1 #include "e_mod_main.h"
3 static int _log_dom = -1;
4 #define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__)
5 #define WARN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__)
6 #define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
7 #define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__)
10 cb_virtual_desktops(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
12 DBusMessage *reply = dbus_message_new_method_return(msg);
13 dbus_message_append_args(reply,
14 DBUS_TYPE_INT32, &(e_config->zone_desks_x_count),
15 DBUS_TYPE_INT32, &(e_config->zone_desks_y_count),
17 DBG("GetVirtualCount: %d %d",
18 e_config->zone_desks_x_count, e_config->zone_desks_y_count);
24 cb_desktop_show(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
29 dbus_error_init(&err);
30 if (!dbus_message_get_args(msg, &err,
35 ERR("could not get Show arguments: %s: %s", err.name, err.message);
36 dbus_error_free(&err);
40 E_Zone *zone = e_util_zone_current_get(e_manager_current_get());
41 DBG("show desktop %d,%d from zone %p.", x, y, zone);
42 e_zone_desk_flip_to(zone, x, y);
45 return dbus_message_new_method_return(msg);
49 cb_desktop_show_by_name(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
54 dbus_error_init(&err);
55 if (!dbus_message_get_args(msg, &err,
56 DBUS_TYPE_STRING, &name,
59 ERR("could not get Show arguments: %s: %s", err.name, err.message);
60 dbus_error_free(&err);
64 E_Zone *zone = e_util_zone_current_get(e_manager_current_get());
65 unsigned int i, count;
67 DBG("show desktop %s from zone %p.", name, zone);
68 count = zone->desk_x_count * zone->desk_y_count;
69 for (i = 0; i < count; i++)
71 E_Desk *desk = zone->desks[i];
72 if ((desk->name) && (strcmp(desk->name, name) == 0))
74 DBG("show desktop %s (%d,%d) from zone %p.",
75 name, desk->x, desk->y, zone);
76 e_zone_desk_flip_to(zone, desk->x, desk->y);
82 return dbus_message_new_method_return(msg);
86 cb_desktop_lock(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
88 DBG("desklock requested");
91 return dbus_message_new_method_return(msg);
95 cb_desktop_bgadd(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
98 int container, zone, desk_x, desk_y;
101 dbus_error_init(&err);
102 if (!dbus_message_get_args(msg, &err,
103 DBUS_TYPE_INT32, &container,
104 DBUS_TYPE_INT32, &zone,
105 DBUS_TYPE_INT32, &desk_x,
106 DBUS_TYPE_INT32, &desk_y,
107 DBUS_TYPE_STRING, &path,
110 ERR("could not get Add arguments: %s: %s", err.name, err.message);
111 dbus_error_free(&err);
115 DBG("add bg container=%d, zone=%d, pos=%d,%d path=%s",
116 container, zone, desk_x, desk_y, path);
117 e_bg_add(container, zone, desk_x, desk_y, path);
119 e_config_save_queue();
122 return dbus_message_new_method_return(msg);
126 cb_desktop_bgdel(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
129 int container, zone, desk_x, desk_y;
131 dbus_error_init(&err);
132 if (!dbus_message_get_args(msg, &err,
133 DBUS_TYPE_INT32, &container,
134 DBUS_TYPE_INT32, &zone,
135 DBUS_TYPE_INT32, &desk_x,
136 DBUS_TYPE_INT32, &desk_y,
139 ERR("could not get Del arguments: %s: %s", err.name, err.message);
140 dbus_error_free(&err);
144 DBG("del bg container=%d, zone=%d, pos=%d,%d",
145 container, zone, desk_x, desk_y);
147 e_bg_del(container, zone, desk_x, desk_y);
149 e_config_save_queue();
152 return dbus_message_new_method_return(msg);
156 cb_desktop_bglist(E_DBus_Object *obj __UNUSED__, DBusMessage *msg)
159 E_Config_Desktop_Background *bg;
161 DBusMessageIter iter;
164 reply = dbus_message_new_method_return(msg);
165 dbus_message_iter_init_append(reply, &iter);
166 dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(iiiis)", &arr);
168 EINA_LIST_FOREACH(e_config->desktop_backgrounds, list, bg)
172 if (!bg || !bg->file)
177 DBG("Background container=%d zone=%d pos=%d,%d path=%s",
178 bg->container, bg->zone, bg->desk_x, bg->desk_y, bg->file);
180 dbus_message_iter_open_container(&arr, DBUS_TYPE_STRUCT, NULL, &sub);
181 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->container));
182 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->zone));
183 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->desk_x));
184 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(bg->desk_y));
185 dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &(bg->file));
186 dbus_message_iter_close_container(&arr, &sub);
188 dbus_message_iter_close_container(&iter, &arr);
193 void msgbus_desktop_init(Eina_Array *ifaces)
195 E_DBus_Interface *iface;
199 _log_dom = eina_log_domain_register("msgbus_desktop", EINA_COLOR_BLUE);
201 EINA_LOG_ERR("could not register msgbus_desktop log domain!");
204 iface = e_dbus_interface_new("org.enlightenment.wm.Desktop");
207 e_dbus_interface_method_add(iface, "GetVirtualCount", "", "ii",
208 cb_virtual_desktops);
209 e_dbus_interface_method_add(iface, "Show", "ii", "",
211 e_dbus_interface_method_add(iface, "ShowByName", "s", "",
212 cb_desktop_show_by_name);
213 e_dbus_interface_method_add(iface, "Lock", "", "",
215 e_msgbus_interface_attach(iface);
216 eina_array_push(ifaces, iface);
219 iface = e_dbus_interface_new("org.enlightenment.wm.Desktop.Background");
222 e_dbus_interface_method_add(iface, "Add", "iiiis", "",
224 e_dbus_interface_method_add(iface, "Del", "iiii", "",
226 e_dbus_interface_method_add(iface, "List", "", "a(iiiis)",
228 e_msgbus_interface_attach(iface);
229 eina_array_push(ifaces, iface);