e_policy_zone: Add client into zone when client added into sibling desk 90/325190/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 14 May 2025 00:42:18 +0000 (09:42 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 4 Jun 2025 06:55:56 +0000 (15:55 +0900)
Change-Id: I3f6f8767d3556b008c647674e08a53201ee45944

src/bin/windowmgr/e_policy_zone.c

index fd98c3986cbb4ca128159d8777be18aff943bd55..4ce7b01363721ac60c26fea5b0c8d36d4b4d784f 100644 (file)
@@ -70,6 +70,8 @@ struct _E_Policy_Zone
    struct wl_listener zone_desk_current_set;
    struct wl_listener zone_desk_find_by_ec;
 
+   struct wl_listener policy_desk_client_add;
+
    struct wl_listener zone_client_top_get;            // from e_zone
    struct wl_listener zone_client_bottom_get;         // from e_zone
    struct wl_listener zone_client_above_get;          // from e_zone
@@ -1356,6 +1358,20 @@ _e_policy_zone_cb_desk_find_by_ec(struct wl_listener *listener, void *data)
      }
 }
 
+static void
+_e_policy_zone_cb_policy_desk_client_add(struct wl_listener *listener, void *data)
+{
+   E_Policy_Zone *policy_zone;
+   E_Client *ec;
+
+   policy_zone = wl_container_of(listener, policy_zone, policy_desk_client_add);
+   ec = (E_Client *) data;
+
+   if (e_zone_has_ec(policy_zone->zone, ec)) return;
+
+   e_zone_client_add(policy_zone->zone, ec);
+}
+
 
 #ifdef EC_IS_NOT_VISIBLE
 # undef EC_IS_NOT_VISIBLE
@@ -1711,6 +1727,7 @@ e_policy_zone_desk_count_set(E_Policy_Zone *policy_zone, size_t count)
 {
    E_Zone *zone;
    E_Desk *desk, *new_desk, *last_desk;
+   E_Policy_Desk *pd;
    E_Client *ec;
    Eina_List *l, *del_list = NULL;
    size_t current_count;
@@ -1775,7 +1792,16 @@ e_policy_zone_desk_count_set(E_Policy_Zone *policy_zone, size_t count)
            }
 
          policy_zone->desk_list = eina_list_append(policy_zone->desk_list, new_desk);
-         e_policy_desk_new(new_desk);
+         pd = e_policy_desk_new(new_desk);
+         if (!pd)
+           {
+              ERR("zone(ID:%d):%p Failed to create policy desk area of desk(ID:%d):%p", zone->id, zone, new_id, new_desk);
+           }
+         else
+           {
+              policy_zone->policy_desk_client_add.notify = _e_policy_zone_cb_policy_desk_client_add;
+              e_policy_desk_client_add_listener_add(pd, &policy_zone->policy_desk_client_add);
+           }
          e_desk_show(new_desk);
       }
 
@@ -2096,6 +2122,7 @@ e_policy_zone_del(E_Policy_Zone *policy_zone)
    wl_list_remove(&policy_zone->zone_desk_current_set.link);
    wl_list_remove(&policy_zone->zone_desk_find_by_ec.link);
 
+   wl_list_remove(&policy_zone->policy_desk_client_add.link);
    wl_list_remove(&policy_zone->focus_focused_ec_changed.link);
 
    wl_list_remove(&policy_zone->zone_client_visible_below_get.link);