From ec37884a3161914e41c14b041f302e9d21cdcf3c Mon Sep 17 00:00:00 2001 From: Joshua McBeth Date: Tue, 25 Oct 2016 07:13:47 -0400 Subject: [PATCH] add dbus message 'org.enlightenment.wm.Window.SendToDesktop' Signed-off-by: Mike Blumenkrantz --- src/modules/msgbus/msgbus_window.c | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/modules/msgbus/msgbus_window.c b/src/modules/msgbus/msgbus_window.c index 2e7bb28ad..353957bb5 100644 --- a/src/modules/msgbus/msgbus_window.c +++ b/src/modules/msgbus/msgbus_window.c @@ -21,6 +21,7 @@ E_MSGBUS_WIN_ACTION_CB_PROTO(iconify); E_MSGBUS_WIN_ACTION_CB_PROTO(uniconify); E_MSGBUS_WIN_ACTION_CB_PROTO(maximize); E_MSGBUS_WIN_ACTION_CB_PROTO(unmaximize); +E_MSGBUS_WIN_ACTION_CB_PROTO(sendtodesktop); static const Eldbus_Method window_methods[] = { { "List", NULL, ELDBUS_ARGS({"a(si)", "array_of_window"}), _e_msgbus_window_list_cb, 0 }, @@ -31,6 +32,7 @@ static const Eldbus_Method window_methods[] = { { "Uniconify", ELDBUS_ARGS({"i", "window_id"}), NULL, _e_msgbus_window_uniconify_cb, 0 }, { "Maximize", ELDBUS_ARGS({"i", "window_id"}), NULL, _e_msgbus_window_maximize_cb, 0 }, { "Unmaximize", ELDBUS_ARGS({"i", "window_id"}), NULL, _e_msgbus_window_unmaximize_cb, 0 }, + { "SendToDesktop", ELDBUS_ARGS({"i","window_id"},{"i","zone"},{"i","desk_x"},{"i","desk_y"}), NULL, _e_msgbus_window_sendtodesktop_cb, 0 }, { NULL, NULL, NULL, NULL, 0} }; @@ -117,6 +119,40 @@ E_MSGBUS_WIN_ACTION_CB_BEGIN(unmaximize) e_client_unmaximize(ec, E_MAXIMIZE_BOTH); E_MSGBUS_WIN_ACTION_CB_END +static Eldbus_Message * +_e_msgbus_window_sendtodesktop_cb( const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + E_Client *ec; + E_Zone * zone; + E_Desk * desk; + Eina_List *l = NULL; + int xwin, zonenum, xdesk, ydesk; + + if (!eldbus_message_arguments_get(msg, "iiii", &xwin, &zonenum, &xdesk, &ydesk)) + return eldbus_message_method_return_new(msg); + + ec = e_pixmap_find_client(E_PIXMAP_TYPE_X, xwin); + + if (ec) + { + EINA_LIST_FOREACH(e_comp->zones, l, zone) + { + if ((int)zone->num == zonenum) + { + if (xdesk < zone->desk_x_count && ydesk < zone->desk_y_count) + { + desk = e_desk_at_xy_get(zone, xdesk, ydesk); + if (desk) e_client_desk_set(ec, desk); + } + } + } + } + + return eldbus_message_method_return_new(msg); + +} + + void msgbus_window_init(Eina_Array *ifaces) { Eldbus_Service_Interface *iface;