e_policy_desk: Add client into desk when client added into sibling desk area 88/325188/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 14 May 2025 00:33:10 +0000 (09:33 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 4 Jun 2025 06:55:56 +0000 (15:55 +0900)
Change-Id: Ic261f2a23aa324786f4a77d82ed8a26aa071aa86

src/bin/windowmgr/e_policy_desk.c

index c33c9f46351c672ea5a7e36555d0b96f894ca3eb..311e4c7afcf1b7db5e0d7f9d583fc0c869685d88 100644 (file)
@@ -46,7 +46,7 @@ struct _E_Policy_Desk
    E_Desk          *desk;
    E_Zone          *zone;
 
-   struct wl_listener desk_new;
+   struct wl_listener policy_desk_area_client_add;
    struct wl_listener desk_free;
    struct wl_listener top_visible_get;
    struct wl_listener name_set;
@@ -738,6 +738,20 @@ _e_policy_desk_smart_set_user(Evas_Smart_Class *sc)
    sc->member_del = _e_policy_desk_smart_member_del;
 }
 
+static void
+_e_policy_desk_cb_policy_desk_area_client_add(struct wl_listener *listener, void *data)
+{
+   E_Policy_Desk *pd;
+   E_Client *ec;
+
+   pd = wl_container_of(listener, pd, policy_desk_area_client_add);
+   ec = (E_Client *) data;
+
+   if (e_desk_has_ec(pd->desk, ec)) return;
+
+   e_desk_client_add(pd->desk, ec);
+}
+
 static void
 _e_policy_desk_cb_desk_free(struct wl_listener *listener, void *data)
 {
@@ -1907,6 +1921,7 @@ e_policy_desk_new(E_Desk *desk)
 {
    E_Policy_Zone *policy_zone;
    E_Policy_Desk *pd;
+   E_Policy_Desk_Area *pda;
    E_Client *ec;
    E_Policy_Client *pc;
    E_Zone *zone;
@@ -1956,7 +1971,16 @@ e_policy_desk_new(E_Desk *desk)
 
    eina_hash_add(hash_policy_desks, &desk, pd);
 
-   e_policy_desk_area_new(desk->desk_area.base);
+   pda = e_policy_desk_area_new(desk->desk_area.base);
+   if (!pda)
+     {
+        ERR("Failed to create base policy desk area of desk area(ID:%d):%p", desk->desk_area.base->id, desk->desk_area.base);
+     }
+   else
+     {
+        pd->policy_desk_area_client_add.notify = _e_policy_desk_cb_policy_desk_area_client_add;
+        e_policy_desk_area_client_add_listener_add(pda, &pd->policy_desk_area_client_add);
+     }
 
    /* add clients */
    E_ZONE_CLIENT_FOREACH(zone, ec)