You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
6.5 KiB
209 lines
6.5 KiB
#include "e_mod_main.h" |
|
|
|
static int _log_dom = -1; |
|
#undef DBG |
|
#undef WARN |
|
#undef INF |
|
#undef ERR |
|
#define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__) |
|
#define WARN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__) |
|
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__) |
|
#define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__) |
|
|
|
static Eldbus_Message * |
|
cb_virtual_desktops(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
eldbus_message_arguments_append(reply, "ii", e_config->zone_desks_x_count, |
|
e_config->zone_desks_y_count); |
|
DBG("GetVirtualCount: %d %d", |
|
e_config->zone_desks_x_count, e_config->zone_desks_y_count); |
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_show(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
int x, y; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
E_Zone *zone; |
|
|
|
if (!eldbus_message_arguments_get(msg, "ii", &x, &y)) |
|
{ |
|
ERR("could not get Show arguments"); |
|
return reply; |
|
} |
|
|
|
zone = e_zone_current_get(); |
|
DBG("show desktop %d,%d from zone %p.", x, y, zone); |
|
e_zone_desk_flip_to(zone, x, y); |
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_show_by_name(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
const char *name; |
|
E_Zone *zone; |
|
unsigned int i, count; |
|
|
|
if (!eldbus_message_arguments_get(msg, "s", &name)) |
|
{ |
|
ERR("could not get Show arguments"); |
|
return reply; |
|
} |
|
|
|
zone = e_zone_current_get(); |
|
DBG("show desktop %s from zone %p.", name, zone); |
|
count = zone->desk_x_count * zone->desk_y_count; |
|
for (i = 0; i < count; i++) |
|
{ |
|
E_Desk *desk = zone->desks[i]; |
|
if ((desk->name) && (strcmp(desk->name, name) == 0)) |
|
{ |
|
DBG("show desktop %s (%d,%d) from zone %p.", name, desk->x, |
|
desk->y, zone); |
|
e_zone_desk_flip_to(zone, desk->x, desk->y); |
|
break; |
|
} |
|
} |
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_lock(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
DBG("desklock requested"); |
|
e_desklock_show(EINA_FALSE); |
|
return eldbus_message_method_return_new(msg); |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_unlock(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
DBG("deskunlock requested"); |
|
e_desklock_hide(); |
|
return eldbus_message_method_return_new(msg); |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_bgadd(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
int zone, desk_x, desk_y; |
|
const char *path; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
|
|
if (!eldbus_message_arguments_get(msg, "iiis", &zone, |
|
&desk_x, &desk_y, &path)) |
|
{ |
|
ERR("could not get Add arguments"); |
|
return reply; |
|
} |
|
|
|
DBG("add bg zone=%d, pos=%d,%d path=%s", zone, desk_x, desk_y, path); |
|
e_bg_add(zone, desk_x, desk_y, path); |
|
e_bg_update(); |
|
e_config_save_queue(); |
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_bgdel(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
int zone, desk_x, desk_y; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
|
|
if (!eldbus_message_arguments_get(msg, "iii", &zone, &desk_x, &desk_y)) |
|
{ |
|
ERR("could not get Del arguments"); |
|
return reply; |
|
} |
|
|
|
DBG("del bg zone=%d, pos=%d,%d", zone, desk_x, desk_y); |
|
e_bg_del(zone, desk_x, desk_y); |
|
e_bg_update(); |
|
e_config_save_queue(); |
|
return reply; |
|
} |
|
|
|
static Eldbus_Message * |
|
cb_desktop_bglist(const Eldbus_Service_Interface *iface EINA_UNUSED, |
|
const Eldbus_Message *msg) |
|
{ |
|
Eina_List *list; |
|
E_Config_Desktop_Background *bg; |
|
Eldbus_Message *reply = eldbus_message_method_return_new(msg); |
|
Eldbus_Message_Iter *main_iter, *array; |
|
|
|
if (!reply) return NULL; |
|
|
|
main_iter = eldbus_message_iter_get(reply); |
|
if (!main_iter) return reply; |
|
|
|
if (!eldbus_message_iter_arguments_append(main_iter, "a(iiiis)", &array)) |
|
return reply; |
|
|
|
EINA_LIST_FOREACH(e_config->desktop_backgrounds, list, bg) |
|
{ |
|
Eldbus_Message_Iter *s; |
|
|
|
if (!bg || !bg->file) continue; |
|
DBG("Background zone=%d pos=%d,%d path=%s", |
|
bg->zone, bg->desk_x, bg->desk_y, bg->file); |
|
eldbus_message_iter_arguments_append(array, "(iiiis)", &s); |
|
if (!s) continue; |
|
eldbus_message_iter_arguments_append(s, "iiiis", bg->zone, |
|
bg->desk_x, bg->desk_y, bg->file); |
|
eldbus_message_iter_container_close(array, s); |
|
} |
|
eldbus_message_iter_container_close(main_iter, array); |
|
return reply; |
|
} |
|
|
|
static const Eldbus_Method desktop_methods[] = { |
|
{ "GetVirtualCount", NULL, ELDBUS_ARGS({"i", "desk_x"}, {"i", "desk_y"}), cb_virtual_desktops, 0 }, |
|
{ "Show", ELDBUS_ARGS({"i", "desk_x"}, {"i", "desk_y"}), NULL, cb_desktop_show, 0 }, |
|
{ "ShowByName", ELDBUS_ARGS({"s", "desk_name"}), NULL, cb_desktop_show_by_name, 0 }, |
|
{ "Lock", NULL, NULL, cb_desktop_lock, 0 }, |
|
{ "Unlock", NULL, NULL, cb_desktop_unlock, 0 }, |
|
{ NULL, NULL, NULL, NULL, 0 } |
|
}; |
|
|
|
static const Eldbus_Method background_methods[] = { |
|
{ "Add", ELDBUS_ARGS({"i", "zone"}, {"i", "desk_x"}, {"i", "desk_y"}, {"s", "path"}), NULL, cb_desktop_bgadd, 0 }, |
|
{ "Del", ELDBUS_ARGS({"i", "zone"}, {"i", "desk_x"}, {"i", "desk_y"}), NULL, cb_desktop_bgdel, 0 }, |
|
{ "List", ELDBUS_ARGS({"a(iiis)", "array_of_bg"}), NULL, cb_desktop_bglist, 0 }, |
|
{ NULL, NULL, NULL, NULL, 0 } |
|
}; |
|
|
|
static const Eldbus_Service_Interface_Desc desktop = { |
|
"org.enlightenment.wm.Desktop", desktop_methods, NULL, NULL, NULL, NULL |
|
}; |
|
|
|
static const Eldbus_Service_Interface_Desc bg = { |
|
"org.enlightenment.wm.Desktop.Background", background_methods, NULL, NULL, NULL, NULL |
|
}; |
|
|
|
void msgbus_desktop_init(Eina_Array *ifaces) |
|
{ |
|
Eldbus_Service_Interface *iface; |
|
|
|
if (_log_dom == -1) |
|
{ |
|
_log_dom = eina_log_domain_register("msgbus_desktop", EINA_COLOR_BLUE); |
|
if (_log_dom < 0) |
|
EINA_LOG_ERR("could not register msgbus_desktop log domain!"); |
|
} |
|
iface = e_msgbus_interface_attach(&desktop); |
|
if (iface) eina_array_push(ifaces, iface); |
|
iface = e_msgbus_interface_attach(&bg); |
|
if (iface) eina_array_push(ifaces, iface); |
|
}
|
|
|