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_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)
{

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_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)
{