e_comp_object: add E_COMP_OBJECT_HOOK_LAYER_SET hook 66/231266/1 accepted/tizen/unified/20200421.051611 submit/tizen/20200420.234739
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 20 Apr 2020 23:44:39 +0000 (08:44 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 20 Apr 2020 23:44:39 +0000 (08:44 +0900)
Change-Id: I311b1ad070128f082fe736ec897e4b6d1c5ec80c

src/bin/e_comp_object.c
src/bin/e_comp_object.h

index eea510c842c0f7f798244f7a917b6a9537514360..1d4899ba7223a7e31d950ea17c67cf2b9c3c19db 100644 (file)
@@ -196,6 +196,7 @@ static Eina_Inlist *_e_comp_object_hooks[] =
    [E_COMP_OBJECT_HOOK_EFFECT_START] = NULL,
    [E_COMP_OBJECT_HOOK_EFFECT_END] = NULL,
    [E_COMP_OBJECT_HOOK_RESTACK] = NULL,
+   [E_COMP_OBJECT_HOOK_LAYER_SET] = NULL,
 };
 
 #ifdef _F_E_COMP_OBJECT_INTERCEPT_HOOK_
@@ -224,6 +225,7 @@ static void           _e_comp_object_dim_enable_set(E_Client *ec, Evas_Object *o
 static Eina_Bool      _e_comp_object_dim_enable_get(E_Client *ec, Evas_Object *obj);
 static void           _e_comp_object_dim_update(E_Comp_Object *cw);
 static void           _e_comp_object_native_surface_set(E_Comp_Object *cw, Evas_Native_Surface *ns, Eina_Bool with_mirror);
+static void           _e_comp_object_layer_set(Evas_Object *obj, short layer);
 
 static E_Client       *dim_client = NULL;
 
@@ -253,6 +255,7 @@ _e_comp_object_hook_call(E_Comp_Object_Hook_Point hookpoint, E_Client *ec)
      {
         if ((hookpoint != E_COMP_OBJECT_HOOK_EFFECT_START) &&
             (hookpoint != E_COMP_OBJECT_HOOK_EFFECT_END) &&
+            (hookpoint != E_COMP_OBJECT_HOOK_LAYER_SET) &&
             (hookpoint != E_COMP_OBJECT_HOOK_RESTACK))
           {
              return ret;
@@ -1649,7 +1652,7 @@ _e_comp_intercept_layer_set(void *data, Evas_Object *obj, int layer)
    if ((cw->ec->layer_block) || (cw->ec->layer_pending))
      {
         /* doing a compositor effect, follow directions */
-        evas_object_layer_set(obj, layer);
+        _e_comp_object_layer_set(obj, layer);
         if (layer == cw->ec->layer) //trying to put layer back
           {
              E_Client *ec;
@@ -1743,7 +1746,7 @@ layer_set:
    _e_comp_object_layers_add(cw, NULL, NULL, 0);
    //if (cw->ec->new_client)
      //INF("CLIENT STACKED %p: %u", cw->ec, layer);
-   evas_object_layer_set(obj, layer);
+   _e_comp_object_layer_set(obj, layer);
    if (!e_comp->layers[cw->layer].obj) return; //this is a layer marker
    evas_object_stack_below(obj, e_comp->layers[cw->layer].obj);
    if (evas_object_below_get(obj) == e_comp->layers[cw->layer].obj)
@@ -1810,6 +1813,19 @@ _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target)
      }
 }
 
+static void
+_e_comp_object_layer_set(Evas_Object *obj, short layer)
+{
+   evas_object_layer_set(obj, layer);
+
+   if (evas_object_smart_smart_get(obj))
+     {
+        E_Client *ec = e_comp_object_client_get(obj);
+        if (ec)
+          _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_LAYER_SET, ec);
+     }
+}
+
 static Eina_Bool
 _e_comp_object_is_pending(E_Client *ec)
 {
index a04babaeaa52cbd23e8a5c6b41942aec07cbac1f..c8b8beaddf4387826b3329bbce1bba26aa000bc3 100644 (file)
@@ -48,6 +48,7 @@ typedef enum _E_Comp_Object_Hook_Point
    E_COMP_OBJECT_HOOK_EFFECT_START,
    E_COMP_OBJECT_HOOK_EFFECT_END,
    E_COMP_OBJECT_HOOK_RESTACK,
+   E_COMP_OBJECT_HOOK_LAYER_SET,
    E_COMP_OBJECT_HOOK_LAST,
 } E_Comp_Object_Hook_Point;