add gadcon visibility handling, send hide signal to pager desks on hide

this (in combination with elm changes) should greatly reduce cpu usage
This commit is contained in:
Mike Blumenkrantz 2015-06-08 14:53:31 -04:00
parent 829b401494
commit 8f2d8748e1
2 changed files with 56 additions and 0 deletions

View File

@ -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_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_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_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_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); 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_Cb)_e_gadcon_parent_resize_cb, gc);
evas_object_event_callback_add(gc->o_container, EVAS_CALLBACK_RESIZE, evas_object_event_callback_add(gc->o_container, EVAS_CALLBACK_RESIZE,
_e_gadcon_cb_moveresize, gc); _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", evas_object_smart_callback_add(gc->o_container, "size_request",
_e_gadcon_cb_size_request, gc); _e_gadcon_cb_size_request, gc);
evas_object_smart_callback_add(gc->o_container, "min_size_request", 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 static void
_e_gadcon_cb_moveresize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) _e_gadcon_cb_moveresize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {

View File

@ -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_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 _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 _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); 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); _pager_cb_obj_moveresize, inst);
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
_button_cb_mouse_down, inst); _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); pager_config->instances = eina_list_append(pager_config->instances, inst);
return gcc; return gcc;
} }
@ -826,6 +832,28 @@ _pager_popup_find(E_Zone *zone)
return NULL; 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 static void
_pager_cb_obj_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) _pager_cb_obj_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{ {