1 #include "e_mod_main.h"
3 static int _log_dom = -1;
8 #define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__)
9 #define WARN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__)
10 #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
11 #define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__)
14 cb_virtual_desktops(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
16 DBusMessage *reply = dbus_message_new_method_return(msg);
17 dbus_message_append_args(reply,
18 DBUS_TYPE_INT32, &(e_config->zone_desks_x_count),
19 DBUS_TYPE_INT32, &(e_config->zone_desks_y_count),
21 DBG("GetVirtualCount: %d %d",
22 e_config->zone_desks_x_count, e_config->zone_desks_y_count);
28 cb_desktop_show(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
33 dbus_error_init(&err);
34 if (!dbus_message_get_args(msg, &err,
39 ERR("could not get Show arguments: %s: %s", err.name, err.message);
40 dbus_error_free(&err);
44 E_Zone *zone = e_util_zone_current_get(e_manager_current_get());
45 DBG("show desktop %d,%d from zone %p.", x, y, zone);
46 e_zone_desk_flip_to(zone, x, y);
49 return dbus_message_new_method_return(msg);
53 cb_desktop_show_by_name(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
58 dbus_error_init(&err);
59 if (!dbus_message_get_args(msg, &err,
60 DBUS_TYPE_STRING, &name,
63 ERR("could not get Show arguments: %s: %s", err.name, err.message);
64 dbus_error_free(&err);
68 E_Zone *zone = e_util_zone_current_get(e_manager_current_get());
69 unsigned int i, count;
71 DBG("show desktop %s from zone %p.", name, zone);
72 count = zone->desk_x_count * zone->desk_y_count;
73 for (i = 0; i < count; i++)
75 E_Desk *desk = zone->desks[i];
76 if ((desk->name) && (strcmp(desk->name, name) == 0))
78 DBG("show desktop %s (%d,%d) from zone %p.",
79 name, desk->x, desk->y, zone);
80 e_zone_desk_flip_to(zone, desk->x, desk->y);
86 return dbus_message_new_method_return(msg);
90 cb_desktop_lock(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
92 DBG("desklock requested");
93 e_desklock_show(EINA_FALSE);
95 return dbus_message_new_method_return(msg);
98 cb_desktop_unlock(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
100 DBG("deskunlock requested");
103 return dbus_message_new_method_return(msg);
107 cb_desktop_bgadd(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
110 int container, zone, desk_x, desk_y;
113 dbus_error_init(&err);
114 if (!dbus_message_get_args(msg, &err,
115 DBUS_TYPE_INT32, &container,
116 DBUS_TYPE_INT32, &zone,
117 DBUS_TYPE_INT32, &desk_x,
118 DBUS_TYPE_INT32, &desk_y,
119 DBUS_TYPE_STRING, &path,
122 ERR("could not get Add arguments: %s: %s", err.name, err.message);
123 dbus_error_free(&err);
127 DBG("add bg container=%d, zone=%d, pos=%d,%d path=%s",
128 container, zone, desk_x, desk_y, path);
129 e_bg_add(container, zone, desk_x, desk_y, path);
131 e_config_save_queue();
134 return dbus_message_new_method_return(msg);
138 cb_desktop_bgdel(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
141 int container, zone, desk_x, desk_y;
143 dbus_error_init(&err);
144 if (!dbus_message_get_args(msg, &err,
145 DBUS_TYPE_INT32, &container,
146 DBUS_TYPE_INT32, &zone,
147 DBUS_TYPE_INT32, &desk_x,
148 DBUS_TYPE_INT32, &desk_y,
151 ERR("could not get Del arguments: %s: %s", err.name, err.message);
152 dbus_error_free(&err);
156 DBG("del bg container=%d, zone=%d, pos=%d,%d",
157 container, zone, desk_x, desk_y);
159 e_bg_del(container, zone, desk_x, desk_y);
161 e_config_save_queue();
164 return dbus_message_new_method_return(msg);
168 cb_desktop_bglist(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
171 E_Config_Desktop_Background *bg;
173 DBusMessageIter iter;
176 reply = dbus_message_new_method_return(msg);
177 dbus_message_iter_init_append(reply, &iter);
178 dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(iiiis)", &arr);
180 EINA_LIST_FOREACH(e_config->desktop_backgrounds, list, bg)
184 if (!bg || !bg->file)
189 DBG("Background container=%d zone=%d pos=%d,%d path=%s",
190 bg->container, bg->zone, bg->desk_x, bg->desk_y, bg->file);
192 dbus_message_iter_open_container(&arr, DBUS_TYPE_STRUCT, NULL, &sub);
193 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->container));
194 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->zone));
195 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->desk_x));
196 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->desk_y));
197 dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &(bg->file));
198 dbus_message_iter_close_container(&arr, &sub);
200 dbus_message_iter_close_container(&iter, &arr);
205 void msgbus_desktop_init(Eina_Array *ifaces)
207 E_DBus_Interface *iface;
211 _log_dom = eina_log_domain_register("msgbus_desktop", EINA_COLOR_BLUE);
213 EINA_LOG_ERR("could not register msgbus_desktop log domain!");
216 iface = e_dbus_interface_new("org.enlightenment.wm.Desktop");
219 e_dbus_interface_method_add(iface, "GetVirtualCount", "", "ii",
220 cb_virtual_desktops);
221 e_dbus_interface_method_add(iface, "Show", "ii", "",
223 e_dbus_interface_method_add(iface, "ShowByName", "s", "",
224 cb_desktop_show_by_name);
225 e_dbus_interface_method_add(iface, "Lock", "", "",
227 e_dbus_interface_method_add(iface, "Unlock", "", "",
229 e_msgbus_interface_attach(iface);
230 eina_array_push(ifaces, iface);
233 iface = e_dbus_interface_new("org.enlightenment.wm.Desktop.Background");
236 e_dbus_interface_method_add(iface, "Add", "iiiis", "",
238 e_dbus_interface_method_add(iface, "Del", "iiii", "",
240 e_dbus_interface_method_add(iface, "List", "", "a(iiiis)",
242 e_msgbus_interface_attach(iface);
243 eina_array_push(ifaces, iface);