containers: Create view tree when init each containers 63/322663/1
authorJunseok Kim <juns.kim@samsung.com>
Thu, 27 Mar 2025 04:18:10 +0000 (13:18 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 14 Apr 2025 06:48:50 +0000 (15:48 +0900)
Change-Id: Ied21cc915d0cd730ad12047ac03a4fe2cf400e41

src/bin/windowmgr/e_policy_desk.c
src/bin/windowmgr/e_policy_desk_area.c
src/bin/windowmgr/e_policy_zone.c

index a39d70e902de992dc8061c58181acc9f1b54c4fc..77c45a015a378a2b05ae86859dc10098b89ba396 100644 (file)
@@ -1,5 +1,7 @@
 #include "e_policy_desk_intern.h"
+#include "e_policy_zone_intern.h"
 #include "e_policy_desk_area_intern.h"
+#include "e_policy_container_intern.h"
 
 #include "e_policy_intern.h"
 #include "e_desk_area_intern.h"
@@ -39,6 +41,8 @@ EVAS_SMART_SUBCLASS_NEW(E_POLICY_DESK_SMART_OBJ_TYPE, _e_policy_desk,
 
 struct _E_Policy_Desk
 {
+   E_Policy_Container container;
+
    E_Desk          *desk;
    E_Zone          *zone;
 
@@ -76,6 +80,7 @@ struct _E_Policy_Desk
    struct wl_listener client_visible_above_get;
    struct wl_listener client_visible_below_get;
 };
+E_POLICY_CONTAINER_INIT(E_Policy_Desk);
 
 struct _E_Policy_Desk_Private_Client
 {
@@ -1860,9 +1865,38 @@ _e_policy_desk_cb_client_activate_done(struct wl_listener *listener, void *data)
      }
 }
 
+static void
+_e_policy_desk_tree_destroy(E_View_Tree *tree)
+{
+   // doing something
+}
+
+static void
+_e_policy_desk_tree_child_add(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+static void
+_e_policy_desk_tree_child_remove(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+E_View_Tree_Impl desk_tree_impl = {
+   .destroy = _e_policy_desk_tree_destroy,
+   .child_add = _e_policy_desk_tree_child_add,
+   .child_remove = _e_policy_desk_tree_child_remove,
+};
+
 EINTERN void
 e_policy_desk_add(E_Desk *desk)
 {
+   E_Policy_Zone *policy_zone;
    E_Policy_Desk *pd;
    E_Client *ec;
    E_Policy_Client *pc;
@@ -1873,6 +1907,19 @@ e_policy_desk_add(E_Desk *desk)
    if (pd) return;
 
    zone = desk->zone;
+   policy_zone = e_policy_zone_get(zone);
+
+   pd = E_NEW(E_Policy_Desk, 1);
+   if (!pd) return;
+
+   ELOGF("POL_DESK", "Policy desk NEW. from zone(ID:%d):%p, policy_zone:%p, desk:%p, policy desk:%p", NULL, zone?zone->id:-1, zone, policy_zone, desk, pd);
+
+   if (!e_policy_container_view_tree_init(e_policy_container_get(pd), &desk_tree_impl, e_policy_container_general_get(policy_zone)))
+     {
+        ERR("Failed to init view tree of desk(ID:%d):%p", desk->id, desk);
+        E_FREE(pd);
+        return;
+     }
 
    /* init smart object */
    _e_policy_desk_smart_init(desk);
@@ -1886,14 +1933,10 @@ e_policy_desk_add(E_Desk *desk)
    if (!desk->desk_area.base)
      {
         e_object_del(E_OBJECT(desk));
+        E_FREE(pd);
         return;
      }
 
-   pd = E_NEW(E_Policy_Desk, 1);
-   if (!pd) return;
-
-   ELOGF("POL_DESK", "Policy desk NEW. desk:%p, policy desk:%p", NULL, desk, pd);
-
    pd->desk = desk;
    pd->zone = desk->zone;
 
@@ -1985,6 +2028,8 @@ e_policy_desk_del(E_Policy_Desk *pd)
           }
      }
 
+   e_policy_container_view_tree_shutdown(e_policy_container_get(pd));
+
    eina_hash_del_by_key(hash_policy_desks, &pd->desk);
 }
 
index 642b9e424aaaf2aff163e6ef8c82d701777b590d..b7bc76e99162765ebb2defddf20db7ed4c0bbc42 100644 (file)
@@ -1,5 +1,6 @@
 #include "e_desk_area_intern.h"
 #include "e_policy_desk_area_intern.h"
+#include "e_policy_container_intern.h"
 #include "e_client_intern.h"
 #include "e_comp_object_intern.h"
 #include "e_comp_canvas_intern.h"
@@ -25,6 +26,8 @@ typedef struct _E_Policy_Desk_Area_Private_Client  E_Policy_Desk_Area_Private_Cl
 #define POLICY_DESK_AREA_EC_DATA_KEY  "E_Policy_Desk_Area_Client"
 struct _E_Policy_Desk_Area
 {
+   E_Policy_Container container;
+
    E_Desk_Area *desk_area;
 
    struct wl_listener geometry_set;
@@ -42,6 +45,7 @@ struct _E_Policy_Desk_Area
    struct wl_listener client_add;
    struct wl_listener client_del;
 };
+E_POLICY_CONTAINER_INIT(E_Policy_Desk_Area);
 
 struct _E_Policy_Desk_Area_Private_Client
 {
@@ -2978,10 +2982,40 @@ _e_policy_desk_area_cb_client_free(void *data, E_Client *ec)
 }
 #endif //CLIENT_DEL_STACK_ISSUE
 
+static void
+_e_policy_desk_area_tree_destroy(E_View_Tree *tree)
+{
+   // doing something
+}
+
+static void
+_e_policy_desk_area_tree_child_add(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+static void
+_e_policy_desk_area_tree_child_remove(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+E_View_Tree_Impl desk_area_tree_impl = {
+   .destroy = _e_policy_desk_area_tree_destroy,
+   .child_add = _e_policy_desk_area_tree_child_add,
+   .child_remove = _e_policy_desk_area_tree_child_remove,
+};
+
 EINTERN E_Policy_Desk_Area *
 e_policy_desk_area_new(E_Desk_Area *eda)
 {
    E_Policy_Desk_Area *pda;
+   E_Policy_Desk *pd;
+   E_Desk *desk;
    E_Layer ec_layer;
    Evas_Object *obj;
 #ifdef NEED_REFINE_EDA_LAYERS_LIST
@@ -2998,10 +3032,21 @@ e_policy_desk_area_new(E_Desk_Area *eda)
         return pda;
      }
 
+   desk = eda->desk;
+   pd = e_policy_desk_get(desk);
+
    pda = E_NEW(E_Policy_Desk_Area, 1);
    EINA_SAFETY_ON_NULL_RETURN_VAL(pda, NULL);
 
-   ELOGF("POLICY_DESK_AREA", "new! | DESK_AREA:%p, Policy_Desk_Area:%p", NULL, eda, pda);
+   ELOGF("POLICY_DESK_AREA", "Policy_desk_area new!, desk(ID:%d):%p, policy_desk:%p, desk_area:%p, policy_desk_area:%p",
+         NULL, desk?desk->id:-1, desk, pd, eda, pda);
+
+   if (!e_policy_container_view_tree_init(e_policy_container_get(pda), &desk_area_tree_impl, e_policy_container_general_get(pd)))
+     {
+        ERR("Failed to init view tree of desk area(ID:%d):%p", eda->id, eda);
+        E_FREE(pda);
+        return NULL;
+     }
 
    pda->desk_area = eda;
 
index b66b99352012d802081182e4cc4f66cee03c7a9c..76c4f9ab7008a459870c0fd377c58096353dc03c 100644 (file)
@@ -23,6 +23,7 @@
 #include "e_tizen_display_policy_intern.h"
 #include "e_policy_stack_intern.h"
 #include "e_policy_wl_intern.h"
+#include "e_policy_container_intern.h"
 
 #define ZONE_EC_DATA_KEY  "E_Zone_Client"
 
@@ -30,6 +31,8 @@ typedef struct _E_Policy_Zone_Private_Client E_Policy_Zone_Private_Client;
 
 struct _E_Policy_Zone
 {
+   E_Policy_Container container;
+
    E_Zone *zone;
 
    Eina_Hash *clients_hash;
@@ -77,6 +80,7 @@ struct _E_Policy_Zone
         struct wl_signal focus_reset;
      } events;
 };
+E_POLICY_CONTAINER_INIT(E_Policy_Zone);
 
 struct _E_Policy_Zone_Private_Client
 {
@@ -1809,6 +1813,34 @@ e_policy_zone_get_zone(E_Policy_Zone *policy_zone)
    return policy_zone->zone;
 }
 
+static void
+_e_policy_zone_tree_destroy(E_View_Tree *tree)
+{
+   // doing something
+}
+
+static void
+_e_policy_zone_tree_child_add(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+static void
+_e_policy_zone_tree_child_remove(E_View_Tree *tree, E_View *child)
+{
+   if (!child->eo)
+     return;
+   // doing something
+}
+
+E_View_Tree_Impl zone_tree_impl = {
+   .destroy = _e_policy_zone_tree_destroy,
+   .child_add = _e_policy_zone_tree_child_add,
+   .child_remove = _e_policy_zone_tree_child_remove,
+};
+
 EINTERN E_Policy_Zone *
 e_policy_zone_new(E_Zone *zone)
 {
@@ -1816,10 +1848,16 @@ e_policy_zone_new(E_Zone *zone)
 
    policy_zone = E_NEW(E_Policy_Zone, 1);
    EINA_SAFETY_ON_NULL_RETURN_VAL(policy_zone, NULL);
-   policy_zone->zone = zone;
-   e_object_ref(E_OBJECT(zone));
+
+   if (!e_policy_container_view_tree_init(e_policy_container_get(policy_zone), &zone_tree_impl, NULL))
+     {
+        ERR("Failed to init view tree of zone(ID:%d):%p", zone->id, zone);
+        return NULL;
+     }
 
    policy_zone->clients_hash = eina_hash_pointer_new(NULL);
+   policy_zone->zone = zone;
+   e_object_ref(E_OBJECT(zone));
 
    // events
    wl_signal_init(&policy_zone->events.client_add);
@@ -1987,6 +2025,8 @@ e_policy_zone_del(E_Policy_Zone *policy_zone)
         eina_hash_free(policy_zone->clients_hash);
      }
 
+   e_policy_container_view_tree_shutdown(e_policy_container_get(policy_zone));
+
    E_FREE(policy_zone);
 
    return;