3 /* local subsystem functions */
4 static void _e_msgbus_request_name_cb(void *data,
8 static DBusMessage *_e_msgbus_core_restart_cb(E_DBus_Object *obj,
10 static DBusMessage *_e_msgbus_core_shutdown_cb(E_DBus_Object *obj,
13 static DBusMessage *_e_msgbus_module_load_cb(E_DBus_Object *obj,
15 static DBusMessage *_e_msgbus_module_unload_cb(E_DBus_Object *obj,
17 static DBusMessage *_e_msgbus_module_enable_cb(E_DBus_Object *obj,
19 static DBusMessage *_e_msgbus_module_disable_cb(E_DBus_Object *obj,
21 static DBusMessage *_e_msgbus_module_list_cb(E_DBus_Object *obj,
24 static DBusMessage *_e_msgbus_profile_set_cb(E_DBus_Object *obj,
26 static DBusMessage *_e_msgbus_profile_get_cb(E_DBus_Object *obj,
28 static DBusMessage *_e_msgbus_profile_list_cb(E_DBus_Object *obj,
30 static DBusMessage *_e_msgbus_profile_add_cb(E_DBus_Object *obj,
32 static DBusMessage *_e_msgbus_profile_delete_cb(E_DBus_Object *obj,
35 /* local subsystem globals */
36 static E_Msgbus_Data *_e_msgbus_data = NULL;
38 /* externally accessible functions */
42 E_DBus_Interface *iface;
44 _e_msgbus_data = E_NEW(E_Msgbus_Data, 1);
51 _e_msgbus_data->conn = e_dbus_bus_get(DBUS_BUS_SESSION);
52 if (!_e_msgbus_data->conn)
54 printf("WARNING: Cannot get DBUS_BUS_SESSION\n");
57 e_dbus_request_name(_e_msgbus_data->conn, "org.enlightenment.wm.service", 0, _e_msgbus_request_name_cb, NULL);
58 _e_msgbus_data->obj = e_dbus_object_add(_e_msgbus_data->conn, "/org/enlightenment/wm/RemoteObject", NULL);
60 iface = e_dbus_interface_new("org.enlightenment.wm.Core");
63 printf("WARNING: Cannot add org.enlightenment.wm.Core interface\n");
66 e_dbus_object_interface_attach(_e_msgbus_data->obj, iface);
67 e_dbus_interface_unref(iface);
69 /* Hardcore methods */
70 e_dbus_interface_method_add(iface, "Restart", "", "", _e_msgbus_core_restart_cb);
71 e_dbus_interface_method_add(iface, "Shutdown", "", "", _e_msgbus_core_shutdown_cb);
73 iface = e_dbus_interface_new("org.enlightenment.wm.Module");
76 printf("WARNING: Cannot add org.enlightenment.wm.Module interface\n");
79 e_dbus_object_interface_attach(_e_msgbus_data->obj, iface);
80 e_dbus_interface_unref(iface);
83 e_dbus_interface_method_add(iface, "Load", "s", "", _e_msgbus_module_load_cb);
84 e_dbus_interface_method_add(iface, "Unload", "s", "", _e_msgbus_module_unload_cb);
85 e_dbus_interface_method_add(iface, "Enable", "s", "", _e_msgbus_module_enable_cb);
86 e_dbus_interface_method_add(iface, "Disable", "s", "", _e_msgbus_module_disable_cb);
87 e_dbus_interface_method_add(iface, "List", "", "a(si)", _e_msgbus_module_list_cb);
89 iface = e_dbus_interface_new("org.enlightenment.wm.Profile");
92 printf("WARNING: Cannot add org.enlightenment.wm.Profile interface\n");
95 e_dbus_object_interface_attach(_e_msgbus_data->obj, iface);
96 e_dbus_interface_unref(iface);
99 e_dbus_interface_method_add(iface, "Set", "s", "", _e_msgbus_profile_set_cb);
100 e_dbus_interface_method_add(iface, "Get", "", "s", _e_msgbus_profile_get_cb);
101 e_dbus_interface_method_add(iface, "List", "", "as", _e_msgbus_profile_list_cb);
102 e_dbus_interface_method_add(iface, "Add", "s", "", _e_msgbus_profile_add_cb);
103 e_dbus_interface_method_add(iface, "Delete", "s", "", _e_msgbus_profile_delete_cb);
109 e_msgbus_shutdown(void)
111 if (_e_msgbus_data->obj)
113 e_dbus_object_free(_e_msgbus_data->obj);
115 if (_e_msgbus_data->conn)
117 e_dbus_connection_close(_e_msgbus_data->conn);
124 E_FREE(_e_msgbus_data);
125 _e_msgbus_data = NULL;
130 e_msgbus_interface_attach(E_DBus_Interface *iface)
132 if (!_e_msgbus_data->obj) return;
133 e_dbus_object_interface_attach(_e_msgbus_data->obj, iface);
137 e_msgbus_interface_detach(E_DBus_Interface *iface)
139 if (!_e_msgbus_data->obj) return;
140 e_dbus_object_interface_detach(_e_msgbus_data->obj, iface);
144 _e_msgbus_request_name_cb(void *data __UNUSED__,
145 DBusMessage *msg __UNUSED__,
146 DBusError *err __UNUSED__)
153 _e_msgbus_core_restart_cb(E_DBus_Object *obj __UNUSED__,
156 e_sys_action_do(E_SYS_RESTART, NULL);
157 return dbus_message_new_method_return(msg);
161 _e_msgbus_core_shutdown_cb(E_DBus_Object *obj __UNUSED__,
164 e_sys_action_do(E_SYS_EXIT, NULL);
165 return dbus_message_new_method_return(msg);
168 /* Modules Handlers */
170 _e_msgbus_module_load_cb(E_DBus_Object *obj __UNUSED__,
173 DBusMessageIter iter;
176 dbus_message_iter_init(msg, &iter);
177 dbus_message_iter_get_basic(&iter, &module);
179 if (!e_module_find(module))
181 e_module_new(module);
182 e_config_save_queue();
185 return dbus_message_new_method_return(msg);
189 _e_msgbus_module_unload_cb(E_DBus_Object *obj __UNUSED__,
192 DBusMessageIter iter;
196 dbus_message_iter_init(msg, &iter);
197 dbus_message_iter_get_basic(&iter, &module);
199 if ((m = e_module_find(module)))
202 e_object_del(E_OBJECT(m));
203 e_config_save_queue();
206 return dbus_message_new_method_return(msg);
210 _e_msgbus_module_enable_cb(E_DBus_Object *obj __UNUSED__,
213 DBusMessageIter iter;
217 dbus_message_iter_init(msg, &iter);
218 dbus_message_iter_get_basic(&iter, &module);
220 if ((m = e_module_find(module)))
223 e_config_save_queue();
226 return dbus_message_new_method_return(msg);
230 _e_msgbus_module_disable_cb(E_DBus_Object *obj __UNUSED__,
233 DBusMessageIter iter;
237 dbus_message_iter_init(msg, &iter);
238 dbus_message_iter_get_basic(&iter, &module);
240 if ((m = e_module_find(module)))
243 e_config_save_queue();
246 return dbus_message_new_method_return(msg);
250 _e_msgbus_module_list_cb(E_DBus_Object *obj __UNUSED__,
256 DBusMessageIter iter;
259 reply = dbus_message_new_method_return(msg);
260 dbus_message_iter_init_append(reply, &iter);
261 dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(si)", &arr);
263 EINA_LIST_FOREACH(e_module_list(), l, mod)
270 enabled = mod->enabled;
271 dbus_message_iter_open_container(&arr, DBUS_TYPE_STRUCT, NULL, &sub);
272 dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &(name));
273 dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT32, &(enabled));
274 dbus_message_iter_close_container(&arr, &sub);
276 dbus_message_iter_close_container(&iter, &arr);
281 /* Profile Handlers */
283 _e_msgbus_profile_set_cb(E_DBus_Object *obj __UNUSED__,
286 DBusMessageIter iter;
289 dbus_message_iter_init(msg, &iter);
290 dbus_message_iter_get_basic(&iter, &profile);
292 e_config_save_flush();
293 e_config_profile_set(profile);
294 e_config_profile_save();
295 e_config_save_block_set(1);
296 e_sys_action_do(E_SYS_RESTART, NULL);
298 return dbus_message_new_method_return(msg);
302 _e_msgbus_profile_get_cb(E_DBus_Object *obj __UNUSED__,
305 DBusMessageIter iter;
309 profile = e_config_profile_get();
311 reply = dbus_message_new_method_return(msg);
312 dbus_message_iter_init_append(reply, &iter);
313 dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &profile);
319 _e_msgbus_profile_list_cb(E_DBus_Object *obj __UNUSED__,
325 DBusMessageIter iter;
328 reply = dbus_message_new_method_return(msg);
329 dbus_message_iter_init_append(reply, &iter);
330 dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &arr);
332 EINA_LIST_FOREACH(e_config_profile_list(), l, name)
334 dbus_message_iter_append_basic(&arr, DBUS_TYPE_STRING, &name);
336 dbus_message_iter_close_container(&iter, &arr);
342 _e_msgbus_profile_add_cb(E_DBus_Object *obj __UNUSED__,
345 DBusMessageIter iter;
348 dbus_message_iter_init(msg, &iter);
349 dbus_message_iter_get_basic(&iter, &profile);
351 e_config_profile_add(profile);
353 return dbus_message_new_method_return(msg);
357 _e_msgbus_profile_delete_cb(E_DBus_Object *obj __UNUSED__,
360 DBusMessageIter iter;
363 dbus_message_iter_init(msg, &iter);
364 dbus_message_iter_get_basic(&iter, &profile);
365 if (!strcmp(e_config_profile_get(), profile))
369 ret = dbus_message_new_error(msg, "org.enlightenment.DBus.InvalidArgument",
370 "Can't delete active profile");
373 e_config_profile_del(profile);
375 return dbus_message_new_method_return(msg);