e_desk_area: delegate e_comp_object_stack_above 38/304738/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 18 Dec 2023 02:32:49 +0000 (11:32 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 23 Jan 2024 09:19:22 +0000 (18:19 +0900)
The e_desk_area implements the e_comp_object_stack_above function.

Change-Id: Id928e80ba9d7536e4c4769a121a8aafeb534ce26

src/bin/e_comp_object.c
src/bin/e_comp_object_intern.h
src/bin/e_desk_area.c

index b06e2c7..1abc154 100644 (file)
@@ -485,8 +485,13 @@ _e_comp_object_cb_mirror_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj
 
 /////////////////////////////////////
 
+#ifdef REFACTOR_DESK_AREA
+EINTERN void
+_e_comp_object_transform_obj_stack_update(Evas_Object *obj)
+#else
 static void
 _e_comp_object_transform_obj_stack_update(Evas_Object *obj)
+#endif
 {
    int layer = 0;
    API_ENTRY;
@@ -1935,7 +1940,10 @@ layer_set:
 #endif
 }
 
+#ifdef REFACTOR_DESK_AREA
+#else
 typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
+#endif
 
 static void
 _e_comp_object_raise(Evas_Object *obj)
@@ -1966,8 +1974,13 @@ _e_comp_object_lower(E_Comp_Object *cw, Evas_Object *obj)
      }
 }
 
+#ifdef REFACTOR_DESK_AREA
+EINTERN void
+_e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target)
+#else
 static void
 _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target)
+#endif
 {
    evas_object_stack_above(obj, target);
 
@@ -2022,8 +2035,13 @@ _e_comp_object_is_pending(E_Client *ec)
    return (topmost) ? topmost->layer_pending : EINA_FALSE;
 }
 
+#ifdef REFACTOR_DESK_AREA
+EINTERN void
+_e_comp_intercept_stack_helper(E_Comp_Object *cw, Evas_Object *stack, E_Comp_Object_Stack_Func stack_cb)
+#else
 static void
 _e_comp_intercept_stack_helper(E_Comp_Object *cw, Evas_Object *stack, E_Comp_Object_Stack_Func stack_cb)
+#endif
 {
    E_Comp_Object *cw2 = NULL;
    E_Client *ecstack;
@@ -2179,16 +2197,29 @@ _e_comp_intercept_stack_above(void *data, Evas_Object *obj, Evas_Object *above)
 {
    EINA_SAFETY_ON_TRUE_RETURN(obj == above);
 
+   TRACE_DS_BEGIN(COMP:INTERCEPT STACK ABOVE);
+
+#ifdef REFACTOR_DESK_AREA
+   E_Comp_Object *cw = data;
+   E_Comp_Object_Data_Stack_Above stack_above_data;
+
+   stack_above_data.cw = cw;
+   stack_above_data.above_obj = above;
+
+   wl_signal_emit_mutable(&cw->events.stack_above, &stack_above_data);
+#else
    if (evas_object_below_get(obj) == above)
      {
         e_comp_object_layer_update(obj, above, NULL);
         return;
      }
 
-   TRACE_DS_BEGIN(COMP:INTERCEPT STACK ABOVE);
    _e_comp_intercept_stack_helper(data, above, _e_comp_object_stack_above);
+
    _e_comp_object_transform_obj_stack_update(obj);
    _e_comp_object_transform_obj_stack_update(above);
+#endif
+
    TRACE_DS_END();
 }
 
index 6303900..0e6950d 100644 (file)
@@ -166,9 +166,14 @@ typedef struct _E_Comp_Object_Data_Stack_Below
 } E_Comp_Object_Data_Stack_Below;
 
 //#ifdef REFACTOR_DESK_AREA
+typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
+
 EINTERN void _e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above, E_Comp_Object *below, Eina_Bool prepend);
 EINTERN void _e_comp_object_layers_remove(E_Comp_Object *cw);
 EINTERN void e_comp_object_layer_set(Evas_Object *obj, short layer);
+EINTERN void _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target);
+EINTERN void _e_comp_intercept_stack_helper(E_Comp_Object *cw, Evas_Object *stack, E_Comp_Object_Stack_Func stack_cb);
+EINTERN void _e_comp_object_transform_obj_stack_update(Evas_Object *obj);
 //#endif
 
 EINTERN void e_comp_object_lower_listener_add(Evas_Object *obj, struct wl_listener *listener);
index 6d5081c..1f61b52 100644 (file)
@@ -670,7 +670,30 @@ layer_set:
 static void
 _desk_area_cb_comp_object_stack_above(struct wl_listener *listener, void *data)
 {
-   // TODO:
+   E_Desk_Area_Private_Client *eda_client;
+   E_Client *ec;
+   Evas_Object *obj, *above;
+   E_Comp_Object_Data_Stack_Above *stack_above_data;
+   E_Comp_Object *cw;
+
+   eda_client = wl_container_of(listener, eda_client, comp_object_set_layer);
+   ec = eda_client->ec;
+   obj = ec->frame;
+   stack_above_data = (E_Comp_Object_Data_Stack_Above *)data;
+   cw = stack_above_data->cw;
+   above = stack_above_data->above_obj;
+
+   if (evas_object_below_get(obj) == above)
+     {
+        e_comp_object_layer_update(obj, above, NULL);
+        return;
+     }
+
+   _e_comp_intercept_stack_helper(cw, above, _e_comp_object_stack_above);
+
+   _e_comp_object_transform_obj_stack_update(obj);
+   _e_comp_object_transform_obj_stack_update(above);
+
 }
 
 static void