e_desk_area: delegate e_comp_object_stack_below 39/304739/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 18 Dec 2023 04:56:43 +0000 (13:56 +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_below function.

Change-Id: Id42f2a82811b7560ee0340f55ffb2c36a9f46198

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

index 1abc154..51798e7 100644 (file)
@@ -1992,8 +1992,13 @@ _e_comp_object_stack_above(Evas_Object *obj, Evas_Object *target)
      }
 }
 
+#ifdef REFACTOR_DESK_AREA
+EINTERN void
+_e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target)
+#else
 static void
 _e_comp_object_stack_below(Evas_Object *obj, Evas_Object *target)
+#endif
 {
    evas_object_stack_below(obj, target);
 
@@ -2227,18 +2232,35 @@ static void
 _e_comp_intercept_stack_below(void *data, Evas_Object *obj, Evas_Object *below)
 {
    EINA_SAFETY_ON_TRUE_RETURN(obj == below);
+
+   TRACE_DS_BEGIN(COMP:INTERCEPT STACK BELOW);
+
+#ifdef REFACTOR_DESK_AREA
+   E_Comp_Object *cw = data;
+   E_Comp_Object_Data_Stack_Below stack_below_data;
+
+   stack_below_data.cw = cw;
+   stack_below_data.below_obj = below;
+
+   wl_signal_emit_mutable(&cw->events.stack_below, &stack_below_data);
+
+   if (!cw->visible)
+     e_comp_render_queue();
+#else
    if (evas_object_above_get(obj) == below)
      {
         e_comp_object_layer_update(obj, NULL, below);
         return;
      }
 
-   TRACE_DS_BEGIN(COMP:INTERCEPT STACK BELOW);
    _e_comp_intercept_stack_helper(data, below, _e_comp_object_stack_below);
+
    if (evas_object_smart_smart_get(obj))
      _e_comp_object_transform_obj_stack_update(obj);
    if (evas_object_smart_smart_get(below))
      _e_comp_object_transform_obj_stack_update(below);
+#endif
+
    TRACE_DS_END();
 }
 
index 0e6950d..eb5c3b8 100644 (file)
@@ -172,6 +172,7 @@ EINTERN void _e_comp_object_layers_add(E_Comp_Object *cw, E_Comp_Object *above,
 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_object_stack_below(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
index 1f61b52..3bd2533 100644 (file)
@@ -676,7 +676,7 @@ _desk_area_cb_comp_object_stack_above(struct wl_listener *listener, void *data)
    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);
+   eda_client = wl_container_of(listener, eda_client, comp_object_stack_above);
    ec = eda_client->ec;
    obj = ec->frame;
    stack_above_data = (E_Comp_Object_Data_Stack_Above *)data;
@@ -699,7 +699,32 @@ _desk_area_cb_comp_object_stack_above(struct wl_listener *listener, void *data)
 static void
 _desk_area_cb_comp_object_stack_below(struct wl_listener *listener, void *data)
 {
-   // TODO:
+   E_Desk_Area_Private_Client *eda_client;
+   E_Client *ec;
+   Evas_Object *obj, *below;
+   E_Comp_Object_Data_Stack_Below *stack_below_data;
+   E_Comp_Object *cw;
+
+   eda_client = wl_container_of(listener, eda_client, comp_object_stack_below);
+   ec = eda_client->ec;
+   obj = ec->frame;
+   stack_below_data = (E_Comp_Object_Data_Stack_Below *)data;
+   cw = stack_below_data->cw;
+   below = stack_below_data->below_obj;
+
+   if (evas_object_above_get(obj) == below)
+     {
+        e_comp_object_layer_update(obj, NULL, below);
+        return;
+     }
+
+   _e_comp_intercept_stack_helper(cw, below, _e_comp_object_stack_below);
+
+   if (evas_object_smart_smart_get(obj))
+     _e_comp_object_transform_obj_stack_update(obj);
+   if (evas_object_smart_smart_get(below))
+     _e_comp_object_transform_obj_stack_update(below);
+
 }
 
 static Eina_Bool