add generic handler for desktop gadget layers

...and a menu item for triggering basic editing
This commit is contained in:
Mike Blumenkrantz 2016-10-26 13:59:29 -04:00
parent 6c16988adc
commit a9d0a27ea3
4 changed files with 112 additions and 21 deletions

View File

@ -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

View File

@ -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;
@ -119,6 +122,12 @@ static E_Config_DD *edd_gadget;
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)
{
@ -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
_edit_end()
{
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
_gadget_desklock_del(void)
{
e_desklock_hide();
}
static void
_edit_end()
{
E_FREE_LIST(desklock_handlers, ecore_event_handler_del);
e_comp_ungrab_input(1, 1);
_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);
}

View File

@ -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

View File

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