add gadcon visibility handling, send hide signal to pager desks on hide
authorMike Blumenkrantz <zmike@osg.samsung.com>
Mon, 8 Jun 2015 18:53:31 +0000 (14:53 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Mon, 8 Jun 2015 18:53:31 +0000 (14:53 -0400)
this (in combination with elm changes) should greatly reduce cpu usage

src/bin/e_gadcon.c
src/modules/pager/e_mod_main.c

index 83ab356..c087dc3 100644 (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",
@@ -2431,6 +2437,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)
 {
    E_Gadcon *gc;
index 8689c6f..841a011 100644 (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;
 }
@@ -827,6 +833,28 @@ _pager_popup_find(E_Zone *zone)
 }
 
 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)
 {
    Instance *inst;