e_desk_area: Add getter to get the layer object from desk area 35/323535/1
authorJunseok Kim <juns.kim@samsung.com>
Fri, 11 Apr 2025 06:10:31 +0000 (15:10 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 30 Apr 2025 00:26:09 +0000 (09:26 +0900)
Change-Id: I027abca8c80167f17c96ef7481c9cf2799db4357

src/bin/core/e_desk_area.c
src/bin/core/e_desk_area_intern.h
src/bin/windowmgr/e_policy_desk_area.c
src/bin/windowmgr/e_policy_desk_area_layer.c
src/bin/windowmgr/e_policy_desk_area_layer_intern.h

index 801cfd5e53d74751dd9e40c642e39b76db6864ca..9964faaed90eece789bfe2235ce9624cd5d411d9 100644 (file)
@@ -39,6 +39,7 @@ struct _E_Desk_Area_Private
       struct wl_signal client_visible_above_get;
       struct wl_signal client_visible_below_get;
       struct wl_signal has_ec;
+      struct wl_signal layer_obj_get;
 
       struct wl_signal client_add;
       struct wl_signal client_del;
@@ -100,6 +101,7 @@ _e_desk_area_private_init(E_Desk_Area *eda)
    wl_signal_init(&priv->events.client_visible_above_get);
    wl_signal_init(&priv->events.client_visible_below_get);
    wl_signal_init(&priv->events.has_ec);
+   wl_signal_init(&priv->events.layer_obj_get);
    wl_signal_init(&priv->events.client_add);
    wl_signal_init(&priv->events.client_del);
 
@@ -224,16 +226,15 @@ e_desk_area_lower(E_Desk_Area *eda)
 E_API Evas_Object *
 e_desk_area_layer_object_get(E_Desk_Area *eda, E_Layer layer)
 {
+   E_Desk_Area_Data_Layer_Object_Get data = {0,};
+
    if (!eda) return NULL;
    if (layer < E_LAYER_CLIENT_DESKTOP || layer > E_LAYER_MAX) return NULL;
 
-#ifdef NEED_REFINE_EDA_LAYERS_LIST
-   E_Comp *comp;
-   comp = e_comp_get();
-   return comp->layers[e_comp_canvas_layer_map(layer)].obj;
-#else
-   return eda->layers[e_comp_canvas_layer_map(layer)].obj;
-#endif
+   data.layer = layer;
+   wl_signal_emit(&PRI(eda)->events.layer_obj_get, &data);
+
+   return data.layer_obj;
 }
 
 
@@ -472,6 +473,13 @@ e_desk_area_has_ec_listener_add(E_Desk_Area *eda, struct wl_listener *listener)
    wl_signal_add(&priv->events.has_ec, listener);
 }
 
+EINTERN void
+e_desk_area_layer_obj_get_listener_add(E_Desk_Area *eda, struct wl_listener *listener)
+{
+   API_ENTRY;
+   wl_signal_add(&priv->events.layer_obj_get, listener);
+}
+
 EINTERN void
 e_desk_area_client_add_listener_add(E_Desk_Area *eda, struct wl_listener *listener)
 {
index 014a48aadb173ae1efc1068a5fe3a8d558db881b..03f38008fae98105c64cab0dcc63aaaa797d551f 100644 (file)
@@ -62,6 +62,12 @@ typedef struct _E_Desk_Area_Data_Has_EC
    Eina_Bool has_ec;
 } E_Desk_Area_Data_Has_EC;
 
+typedef struct _E_Desk_Area_Data_Layer_Object_Get
+{
+   E_Layer layer;
+   Evas_Object *layer_obj;
+} E_Desk_Area_Data_Layer_Object_Get;
+
 EINTERN int e_desk_area_init(void);
 EINTERN int e_desk_area_shutdown(void);
 
@@ -91,6 +97,7 @@ EINTERN void e_desk_area_client_below_get_listener_add(E_Desk_Area *eda, struct
 EINTERN void e_desk_area_client_visible_above_get_listener_add(E_Desk_Area *eda, struct wl_listener *listener);
 EINTERN void e_desk_area_client_visible_below_get_listener_add(E_Desk_Area *eda, struct wl_listener *listener);
 EINTERN void e_desk_area_has_ec_listener_add(E_Desk_Area *eda, struct wl_listener *listener);
+EINTERN void e_desk_area_layer_obj_get_listener_add(E_Desk_Area *eda, struct wl_listener *listener);
 EINTERN void e_desk_area_client_add_listener_add(E_Desk_Area *eda, struct wl_listener *listener);
 EINTERN void e_desk_area_client_del_listener_add(E_Desk_Area *eda, struct wl_listener *listener);
 
index 277e7cfb680ee5a74ffe966a50aed0a00d80c150..e8ee70bbf813ca96d6e1a3ab2b54fe562f977f51 100644 (file)
@@ -45,6 +45,7 @@ struct _E_Policy_Desk_Area
    struct wl_listener client_visible_above_get;
    struct wl_listener client_visible_below_get;
    struct wl_listener has_ec;
+   struct wl_listener layer_obj_get;
 
    struct wl_listener client_add;
    struct wl_listener client_del;
@@ -431,6 +432,24 @@ _e_policy_desk_area_cb_has_ec(struct wl_listener *listener, void *data)
    return;
 }
 
+static void
+_e_policy_desk_area_cb_layer_obj_get(struct wl_listener *listener, void *data)
+{
+   E_Desk_Area_Data_Layer_Object_Get *obj_data = (E_Desk_Area_Data_Layer_Object_Get *) data;
+   E_Policy_Desk_Area *pda;
+   E_Policy_Desk_Area_Layer *pdal;
+   E_View *layer_view;
+
+   pda = wl_container_of(listener, pda, layer_obj_get);
+   pdal = pda->layers[obj_data->layer];
+
+   layer_view = e_policy_desk_area_layer_obj_get(pdal);
+   if (layer_view)
+     obj_data->layer_obj = layer_view->eo;
+
+   return;
+}
+
 
 static void
 _desk_area_cb_client_destroy(struct wl_listener *listener, void *data)
@@ -3193,6 +3212,8 @@ e_policy_desk_area_new(E_Desk_Area *eda)
    e_desk_area_client_visible_below_get_listener_add(eda, &pda->client_visible_below_get);
    pda->has_ec.notify = _e_policy_desk_area_cb_has_ec;
    e_desk_area_has_ec_listener_add(eda, &pda->has_ec);
+   pda->layer_obj_get.notify = _e_policy_desk_area_cb_layer_obj_get;
+   e_desk_area_layer_obj_get_listener_add(eda, &pda->layer_obj_get);
 
    pda->client_add.notify = _e_policy_desk_area_cb_client_add;
    e_desk_area_client_add_listener_add(eda, &pda->client_add);
index d27c145a0a89b61c64e59766e749ca10165dee2a..f990702f02d55c1924b9e44d3a6ad992f927d27e 100644 (file)
@@ -76,6 +76,14 @@ e_policy_desk_area_layer_view_tree_get(E_Policy_Desk_Area_Layer *pdal)
    return e_policy_container_view_tree_get(container);
 }
 
+EINTERN E_View *
+e_policy_desk_area_layer_obj_get(E_Policy_Desk_Area_Layer *pdal)
+{
+   EINA_SAFETY_ON_NULL_RETURN_VAL(pdal, NULL);
+
+   return pdal->layer_bottom;
+}
+
 EINTERN E_Policy_Desk_Area_Layer *
 e_policy_desk_area_layer_new(E_Policy_Desk_Area *pda, E_Layer layer)
 {
index fcb60223787923c5de9ea67009c9c36282874339..342edea96bb10f7cf0ca5271ab6ebfb36309fe73 100644 (file)
@@ -11,6 +11,7 @@ extern EINTERN E_View_Tree_Impl desk_area_layer_tree_impl;
 
 EINTERN Eina_Bool                 e_policy_desk_area_layer_has_ec(E_Policy_Desk_Area_Layer *pdal, E_Client *ec);
 EINTERN E_View_Tree              *e_policy_desk_area_layer_view_tree_get(E_Policy_Desk_Area_Layer *pdal);
+EINTERN E_View                   *e_policy_desk_area_layer_obj_get(E_Policy_Desk_Area_Layer *pdal);
 
 EINTERN E_Policy_Desk_Area_Layer *e_policy_desk_area_layer_new(E_Policy_Desk_Area *pda, E_Layer layer);
 EINTERN void                      e_policy_desk_area_layer_del(E_Policy_Desk_Area_Layer *pdal);