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);

-- 


Reply via email to