e_desk_area: delegate e_comp_object_raise 41/304741/1
authorSooChan Lim <sc1.lim@samsung.com>
Mon, 18 Dec 2023 08:18:02 +0000 (17:18 +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_raise function.

Change-Id: I0f896ee154770c9c7897f085cc5adece340fe55c

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

index b6565d2..24e552c 100644 (file)
@@ -1945,8 +1945,13 @@ layer_set:
 typedef void (*E_Comp_Object_Stack_Func)(Evas_Object *obj, Evas_Object *stack);
 #endif
 
+#ifdef REFACTOR_DESK_AREA
+EINTERN void
+_e_comp_object_raise(Evas_Object *obj)
+#else
 static void
 _e_comp_object_raise(Evas_Object *obj)
+#endif
 {
    evas_object_raise(obj);
 
@@ -2311,6 +2316,7 @@ _e_comp_intercept_lower(void *data, Evas_Object *obj)
    _e_comp_object_transform_obj_stack_update(obj);
 
 end:
+#endif
    TRACE_DS_END();
 }
 
@@ -2318,11 +2324,17 @@ static void
 _e_comp_intercept_raise(void *data, Evas_Object *obj)
 {
    E_Comp_Object *cw = data;
+#ifdef REFACTOR_DESK_AREA
+#else
    Evas_Object *o;
    Evas_Object *op;
+#endif
 
    TRACE_DS_BEGIN(COMP:INTERCEPT RAISE);
 
+#ifdef REFACTOR_DESK_AREA
+   wl_signal_emit_mutable(&cw->events.raise, cw);
+#else
    if ((cw->ec->layer_block) || (cw->ec->layer_pending))
      {
         if (cw->ec->layer_pending)
index d7e2563..1195410 100644 (file)
@@ -172,6 +172,7 @@ 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_lower(E_Comp_Object *cw, Evas_Object *obj);
+EINTERN void _e_comp_object_raise(Evas_Object *obj);
 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);
index 7a48f05..6966316 100644 (file)
@@ -576,7 +576,51 @@ _desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data)
 static void
 _desk_area_cb_comp_object_raise(struct wl_listener *listener, void *data)
 {
-   // TODO:
+   E_Desk_Area_Private_Client *eda_client;
+   E_Client *ec;
+   Evas_Object *obj, *o, *op;
+   E_Comp_Object *cw;
+
+   eda_client = wl_container_of(listener, eda_client, comp_object_raise);
+   ec = eda_client->ec;
+   obj = ec->frame;
+   cw = (E_Comp_Object *)data;
+
+   if ((cw->ec->layer_block) || (cw->ec->layer_pending))
+     {
+        if (cw->ec->layer_pending)
+          {
+             int obj_layer = evas_object_layer_get(obj);
+             if (cw->ec->layer != obj_layer)
+               e_comp_object_layer_update(obj, NULL, NULL);
+          }
+
+        _e_comp_object_raise(obj);
+        return;
+     }
+   if (!EINA_INLIST_GET(cw->ec)->next) return;//already highest on layer
+   o = evas_object_above_get(obj);
+   if (evas_object_layer_get(o) != evas_object_layer_get(obj)) return; //already at top!
+
+   /* still stack below override below the layer marker */
+   for (op = o = e_comp->layers[cw->layer].obj;
+        o && o != e_comp->layers[cw->layer - 1].obj;
+        op = o, o = evas_object_below_get(o))
+     {
+        if (evas_object_smart_smart_get(o))
+          {
+             E_Client *ec;
+
+             ec = e_comp_object_client_get(o);
+             if (ec && (!ec->override)) break;
+          }
+     }
+   _e_comp_object_stack_below(obj, op);
+   e_client_focus_defer_set(cw->ec);
+
+   if (!cw->visible) return;
+   e_comp_render_queue();
+   _e_comp_object_transform_obj_stack_update(obj);
 }
 
 static void