discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=a9d0a27ea3aa8381c88efd2a64c37ede11d9b627
commit a9d0a27ea3aa8381c88efd2a64c37ede11d9b627 Author: Mike Blumenkrantz <[email protected]> Date: Wed Oct 26 13:59:29 2016 -0400 add generic handler for desktop gadget layers ...and a menu item for triggering basic editing --- src/bin/e_comp.h | 1 + src/bin/e_gadget.c | 118 +++++++++++++++++++++++++++++++++++++++++--------- src/bin/e_gadget.h | 1 + src/bin/e_int_menus.c | 11 +++++ 4 files changed, 111 insertions(+), 20 deletions(-) diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h index f9aa13d..05de579 100644 --- a/src/bin/e_comp.h +++ b/src/bin/e_comp.h @@ -84,6 +84,7 @@ typedef struct E_Comp_Canvas Evas_Object *bg_blank_object; //black blocker rect to cover background artifacts Evas_Object *fps_bg; Evas_Object *fps_fg; + Evas_Object *gadget_site; //desktop gadget site } E_Comp_Canvas; struct _E_Comp diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c index 91bf4ab..7da6f52 100644 --- a/src/bin/e_gadget.c +++ b/src/bin/e_gadget.c @@ -96,8 +96,9 @@ typedef struct Gadget_Item #define DESKLOCK_DEMO_LAYER (E_LAYER_CLIENT_POPUP - 100) -static Eina_List *desklock_handlers; -static Evas_Object *desklock_rect; +static Eina_List *desktop_handlers; +static Evas_Object *desktop_rect; +static Evas_Object *desktop_editor; static Eina_Bool added = 1; static Evas_Object *pointer_site; @@ -107,6 +108,8 @@ static Eina_Hash *gadget_types; static E_Gadget_Sites *sites; static Ecore_Event_Handler *comp_add_handler; +static Evas_Object *comp_site; + static E_Action *move_act; static E_Action *resize_act; static E_Action *configure_act; @@ -120,6 +123,12 @@ static void _gadget_object_finalize(E_Gadget_Config *zgc); static void _editor_pointer_site_init(E_Gadget_Site_Orient orient, Evas_Object *site, Evas_Object *editor, Eina_Bool ); static void +_comp_site_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + evas_object_resize(data, e_comp->w, e_comp->h); +} + +static void _gadget_free(E_Gadget_Config *zgc) { evas_object_del(zgc->display); @@ -1793,6 +1802,11 @@ e_gadget_init(void) menu_act->func.go_mouse = _gadget_act_menu; comp_add_handler = ecore_event_handler_add(E_EVENT_COMP_OBJECT_ADD, (Ecore_Event_Handler_Cb)_site_auto_comp_object_handler, NULL); + + comp_site = e_comp->canvas->gadget_site = e_gadget_site_add(E_GADGET_SITE_ORIENT_NONE, "__desktop"); + evas_object_event_callback_add(e_comp->canvas->bg_blank_object, EVAS_CALLBACK_RESIZE, _comp_site_resize, comp_site); + evas_object_layer_set(comp_site, E_LAYER_DESKTOP); + evas_object_resize(comp_site, e_comp->w, e_comp->h); } EINTERN void @@ -2052,18 +2066,28 @@ e_gadget_site_edit(Evas_Object *site) return comp_object; } - static void -_gadget_desklock_del(void) +_edit_end() { - e_desklock_hide(); + if (desktop_editor) + { + E_Action *act; + + act = e_action_find("desk_deskshow_toggle"); + if (act) act->func.go(E_OBJECT(e_comp_object_util_zone_get(desktop_editor)), NULL); + evas_object_hide(desktop_editor); + E_FREE_FUNC(desktop_editor, evas_object_del); + } + E_FREE_FUNC(desktop_rect, evas_object_del); + E_FREE_LIST(desktop_handlers, ecore_event_handler_del); + e_comp_ungrab_input(1, 1); } static void -_edit_end() +_gadget_desklock_del(void) { - E_FREE_LIST(desklock_handlers, ecore_event_handler_del); - e_comp_ungrab_input(1, 1); + e_desklock_hide(); + _edit_end(); } static void @@ -2081,7 +2105,7 @@ _gadget_desklock_clear(void) } static Eina_Bool -_gadget_key_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev) +_gadget_desklock_key_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev) { if (eina_streq(ev->key, "Escape")) _gadget_desklock_del(); @@ -2091,7 +2115,7 @@ _gadget_key_handler(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Key *ev) } static void -_gadget_mouse_up_handler() +_gadget_desklock_mouse_up_handler() { if (!added) _gadget_desklock_del(); @@ -2120,7 +2144,6 @@ _gadget_desklock_handler(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Comp_Ob evas_object_layer_set(site, DESKLOCK_DEMO_LAYER); comp_object = e_gadget_site_edit(site); e_comp_object_util_del_list_append(ev->comp_object, comp_object); - e_comp_object_util_del_list_append(ev->comp_object, desklock_rect); memset(&n, 0, sizeof(E_Notification_Notify)); n.timeout = 3000; @@ -2135,15 +2158,70 @@ _gadget_desklock_handler(void *d EINA_UNUSED, int t EINA_UNUSED, E_Event_Comp_Ob E_API void e_gadget_site_desklock_edit(void) { - desklock_rect = evas_object_rectangle_add(e_comp->evas); - evas_object_event_callback_add(desklock_rect, EVAS_CALLBACK_DEL, _edit_end, NULL); - evas_object_color_set(desklock_rect, 0, 0, 0, 0); - evas_object_resize(desklock_rect, e_comp->w, e_comp->h); - evas_object_layer_set(desklock_rect, DESKLOCK_DEMO_LAYER); - evas_object_show(desklock_rect); - E_LIST_HANDLER_APPEND(desklock_handlers, E_EVENT_COMP_OBJECT_ADD, _gadget_desklock_handler, NULL); - E_LIST_HANDLER_APPEND(desklock_handlers, ECORE_EVENT_KEY_DOWN, _gadget_key_handler, NULL); - E_LIST_HANDLER_APPEND(desklock_handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _gadget_mouse_up_handler, NULL); + desktop_rect = evas_object_rectangle_add(e_comp->evas); + evas_object_color_set(desktop_rect, 0, 0, 0, 0); + evas_object_resize(desktop_rect, e_comp->w, e_comp->h); + evas_object_layer_set(desktop_rect, DESKLOCK_DEMO_LAYER); + evas_object_show(desktop_rect); + E_LIST_HANDLER_APPEND(desktop_handlers, E_EVENT_COMP_OBJECT_ADD, _gadget_desklock_handler, NULL); + E_LIST_HANDLER_APPEND(desktop_handlers, ECORE_EVENT_KEY_DOWN, _gadget_desklock_key_handler, NULL); + E_LIST_HANDLER_APPEND(desktop_handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _gadget_desklock_mouse_up_handler, NULL); e_desklock_demo(); e_comp_grab_input(1, 1); } + +static Eina_Bool +_gadget_desktop_key_handler(void *data, int t EINA_UNUSED, Ecore_Event_Key *ev) +{ + if (eina_streq(ev->key, "Escape")) + _edit_end(); + else if (eina_streq(ev->key, "Delete") || eina_streq(ev->key, "Backspace")) + { + E_Gadget_Site *zgs = data; + E_LIST_FOREACH(zgs->gadgets, _gadget_remove); + } + return ECORE_CALLBACK_DONE; +} + +static void +_gadget_desktop_mouse_up_handler() +{ + if (!added) + _edit_end(); + added = 0; +} + +E_API void +e_gadget_site_desktop_edit(Evas_Object *site) +{ + E_Action *act; + E_Notification_Notify n; + + ZGS_GET(site); + + desktop_rect = evas_object_rectangle_add(e_comp->evas); + evas_object_event_callback_add(desktop_rect, EVAS_CALLBACK_DEL, _edit_end, NULL); + evas_object_color_set(desktop_rect, 0, 0, 0, 0); + evas_object_resize(desktop_rect, e_comp->w, e_comp->h); + evas_object_layer_set(desktop_rect, E_LAYER_DESKTOP); + evas_object_show(desktop_rect); + E_LIST_HANDLER_APPEND(desktop_handlers, ECORE_EVENT_KEY_DOWN, _gadget_desktop_key_handler, zgs); + E_LIST_HANDLER_APPEND(desktop_handlers, ECORE_EVENT_MOUSE_BUTTON_UP, _gadget_desktop_mouse_up_handler, NULL); + evas_object_event_callback_add(site, EVAS_CALLBACK_DEL, _edit_end, NULL); + + desktop_editor = e_gadget_site_edit(site); + evas_object_smart_callback_add(site, "gadget_moved", _gadget_moved, NULL); + evas_object_show(desktop_editor); + + act = e_action_find("desk_deskshow_toggle"); + if (act) act->func.go(E_OBJECT(e_comp_object_util_zone_get(desktop_editor)), NULL); + e_comp_grab_input(1, 1); + + memset(&n, 0, sizeof(E_Notification_Notify)); + n.timeout = 3000; + n.summary = _("Desktop Gadgets"); + n.body = _("Press Escape or click the background to exit.<ps/>" + "Use Backspace or Delete to remove all gadgets from this site"); + n.urgency = E_NOTIFICATION_NOTIFY_URGENCY_NORMAL; + e_notification_client_send(&n, NULL, NULL); +} diff --git a/src/bin/e_gadget.h b/src/bin/e_gadget.h index 9999d9b..29be553 100644 --- a/src/bin/e_gadget.h +++ b/src/bin/e_gadget.h @@ -153,5 +153,6 @@ E_API void e_gadget_util_allow_deny_ctxpopup(Evas_Object *g, const char *text, E E_API Evas_Object *e_gadget_editor_add(Evas_Object *parent, Evas_Object *site); E_API Evas_Object *e_gadget_site_edit(Evas_Object *site); E_API void e_gadget_site_desklock_edit(void); +E_API void e_gadget_site_desktop_edit(Evas_Object *site); #endif #endif diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 1e7dc11..09ddc73 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -92,6 +92,12 @@ _e_int_menus_bryce_cb() e_bryce_edit(NULL); } +static void +_e_int_menus_desktop_gadget_add_cb() +{ + e_gadget_site_desktop_edit(e_comp->canvas->gadget_site); +} + #ifdef ISCOMFITOR static void _TEST_ADD(void *data, E_Dialog *dia EINA_UNUSED) @@ -344,6 +350,11 @@ e_int_menus_desktops_new(void) e_menu_item_label_set(mi, _("Add Bryce")); e_util_menu_item_theme_icon_set(mi, "list-add"); e_menu_item_callback_set(mi, _e_int_menus_bryce_cb, NULL); + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Add Gadgets To Desktop")); + e_util_menu_item_theme_icon_set(mi, "list-add"); + e_menu_item_callback_set(mi, _e_int_menus_desktop_gadget_add_cb, NULL); } mi = e_menu_item_new(m); --
