From 8f2d8748e148d0d3887d2f45423c6108411c0b60 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 8 Jun 2015 14:53:31 -0400 Subject: [PATCH] add gadcon visibility handling, send hide signal to pager desks on hide this (in combination with elm changes) should greatly reduce cpu usage --- src/bin/e_gadcon.c | 28 ++++++++++++++++++++++++++++ src/modules/pager/e_mod_main.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c index 83ab356d7..c087dc3e6 100644 --- a/src/bin/e_gadcon.c +++ b/src/bin/e_gadcon.c @@ -22,6 +22,8 @@ static void _e_gadcon_client_inject(E_Gadcon *gc, E_Gadcon_C static void _e_gadcon_cb_min_size_request(void *data, Evas_Object *obj, void *event_info); static void _e_gadcon_cb_size_request(void *data, Evas_Object *obj, void *event_info); +static void _e_gadcon_cb_hide(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void _e_gadcon_cb_show(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_gadcon_cb_moveresize(void *data, Evas *evas, Evas_Object *obj, void *event_info); static void _e_gadcon_parent_resize_cb(E_Gadcon *gc, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _e_gadcon_cb_client_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info); @@ -467,6 +469,10 @@ e_gadcon_swallowed_new(const char *name, int id, Evas_Object *obj, const char *s (Evas_Object_Event_Cb)_e_gadcon_parent_resize_cb, gc); evas_object_event_callback_add(gc->o_container, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_moveresize, gc); + evas_object_event_callback_add(gc->o_container, EVAS_CALLBACK_SHOW, + _e_gadcon_cb_show, gc); + evas_object_event_callback_add(gc->o_container, EVAS_CALLBACK_HIDE, + _e_gadcon_cb_hide, gc); evas_object_smart_callback_add(gc->o_container, "size_request", _e_gadcon_cb_size_request, gc); evas_object_smart_callback_add(gc->o_container, "min_size_request", @@ -2430,6 +2436,28 @@ _e_gadcon_cb_size_request(void *data, Evas_Object *obj EINA_UNUSED, void *event_ } } +static void +_e_gadcon_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Gadcon *gc = data; + Eina_List *l; + E_Gadcon_Client *gcc; + + EINA_LIST_FOREACH(gc->clients, l, gcc) + evas_object_show(gcc->o_base ?: gcc->o_frame); +} + +static void +_e_gadcon_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + E_Gadcon *gc = data; + Eina_List *l; + E_Gadcon_Client *gcc; + + EINA_LIST_FOREACH(gc->clients, l, gcc) + evas_object_hide(gcc->o_base ?: gcc->o_frame); +} + static void _e_gadcon_cb_moveresize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index 8689c6f85..841a01124 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -100,6 +100,8 @@ struct _Pager_Popup static void _pager_cb_mirror_add(Pager_Desk *pd, Evas_Object *obj, Evas_Object *mirror); +static void _pager_cb_obj_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _pager_cb_obj_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _pager_cb_obj_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _button_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); static void _pager_inst_cb_menu_configure(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED); @@ -234,6 +236,10 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) _pager_cb_obj_moveresize, inst); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _button_cb_mouse_down, inst); + evas_object_event_callback_add(o, EVAS_CALLBACK_SHOW, + _pager_cb_obj_show, inst); + evas_object_event_callback_add(o, EVAS_CALLBACK_HIDE, + _pager_cb_obj_hide, inst); pager_config->instances = eina_list_append(pager_config->instances, inst); return gcc; } @@ -826,6 +832,28 @@ _pager_popup_find(E_Zone *zone) return NULL; } +static void +_pager_cb_obj_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Instance *inst = data; + Eina_List *l; + Pager_Desk *pd; + + EINA_LIST_FOREACH(inst->pager->desks, l, pd) + edje_object_signal_emit(pd->o_desk, "e,state,hidden", "e"); +} + +static void +_pager_cb_obj_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Instance *inst = data; + Eina_List *l; + Pager_Desk *pd; + + EINA_LIST_FOREACH(inst->pager->desks, l, pd) + edje_object_signal_emit(pd->o_desk, "e,state,visible", "e"); +} + static void _pager_cb_obj_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) {