e_zone: cleanup signal listener and hook when policy_zone delete 61/321361/2
authorJunseok Kim <juns.kim@samsung.com>
Mon, 17 Mar 2025 10:20:46 +0000 (19:20 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Wed, 19 Mar 2025 08:48:51 +0000 (08:48 +0000)
Change-Id: I3cc02c9739a068458af6dbcfa33c365d645b27f3

src/bin/core/e_zone.c
src/bin/windowmgr/e_policy_zone.c
src/include/e_zone.h

index 23e0e63896d4ddf4e72dff3d69870dfaa6666347..377d54c80846bce013c07682312a95cdc756f242 100644 (file)
@@ -740,8 +740,6 @@ _e_zone_free(E_Zone *zone)
    if(zone->focus) e_focus_del(zone->focus);
 
    /* Delete the hooks */
-   E_FREE_LIST(zone->ec_hooks, e_client_hook_del);
-
    E_FREE_FUNC(zone->cur_mouse_action, e_object_unref);
 
    if (zone->name) eina_stringshare_del(zone->name);
index 4a889305e241728fcd7c994d732dd853a7f29bfe..4ea69e785351c540c4594ac208be831159e49884 100644 (file)
@@ -28,6 +28,8 @@ struct _E_Policy_Zone
    E_Zone *zone;
    Eina_Hash *clients_hash;
 
+   Eina_List *ec_hooks;
+
    struct wl_listener client_add;
    struct wl_listener has_ec;
    struct wl_listener zone_destroy;
@@ -2004,7 +2006,7 @@ e_policy_zone_new(E_Zone *zone)
      }
 
    // CLIENT HOOK Handlers
-   E_LIST_HOOK_APPEND(zone->ec_hooks, E_CLIENT_HOOK_NEW_CLIENT_POST, _e_policy_zone_cb_hook_client_new_client_post, zone);
+   E_LIST_HOOK_APPEND(policy_zone->ec_hooks, E_CLIENT_HOOK_NEW_CLIENT_POST, _e_policy_zone_cb_hook_client_new_client_post, zone);
 
    // zone listeners
    policy_zone->client_add.notify = _e_policy_zone_cb_client_add;
@@ -2089,7 +2091,33 @@ e_policy_zone_del(E_Policy_Zone *policy_zone)
    // TODO:: need policy desk remove?
 
    // zone listeners
-
+   wl_list_remove(&policy_zone->client_add.link);
+   wl_list_remove(&policy_zone->has_ec.link);
+   wl_list_remove(&policy_zone->zone_destroy.link);
+   wl_list_remove(&policy_zone->move.link);
+   wl_list_remove(&policy_zone->resize.link);
+   wl_list_remove(&policy_zone->move_resize.link);
+   wl_list_remove(&policy_zone->is_current.link);
+   wl_list_remove(&policy_zone->desk_count_set.link);
+   wl_list_remove(&policy_zone->obstacle_add.link);
+   wl_list_remove(&policy_zone->obstacle_update.link);
+   wl_list_remove(&policy_zone->obstacle_remove.link);
+   wl_list_remove(&policy_zone->useful_geometry_get.link);
+   wl_list_remove(&policy_zone->focused_client_get.link);
+   wl_list_remove(&policy_zone->focused_client_set.link);
+
+   wl_list_remove(&policy_zone->desk_row_add.link);
+   wl_list_remove(&policy_zone->desk_row_remove.link);
+   wl_list_remove(&policy_zone->desk_col_add.link);
+   wl_list_remove(&policy_zone->desk_col_remove.link);
+   wl_list_remove(&policy_zone->desk_current_get.link);
+   wl_list_remove(&policy_zone->desk_at_xy_get.link);
+   wl_list_remove(&policy_zone->desk_at_pos_get.link);
+   wl_list_remove(&policy_zone->desk_next.link);
+   wl_list_remove(&policy_zone->desk_prev.link);
+   wl_list_remove(&policy_zone->desk_count.link);
+
+   wl_list_remove(&policy_zone->focus_focused_ec_changed.link);
 
    wl_list_remove(&policy_zone->zone_client_visible_below_get.link);
    wl_list_remove(&policy_zone->zone_client_visible_above_get.link);
@@ -2097,7 +2125,8 @@ e_policy_zone_del(E_Policy_Zone *policy_zone)
    wl_list_remove(&policy_zone->zone_client_above_get.link);
    wl_list_remove(&policy_zone->zone_client_bottom_get.link);
    wl_list_remove(&policy_zone->zone_client_top_get.link);
-   wl_list_remove(&policy_zone->zone_destroy.link);
+
+   E_FREE_LIST(policy_zone->ec_hooks, e_client_hook_del);
 
    if (policy_zone->clients_hash)
      {
index 517338cbbf595368d644b8f0808cd776adcf5e39..19cf0d2a2157e4bad6c1bc4b13028b522651494d 100644 (file)
@@ -108,7 +108,7 @@ struct _E_Zone
 
    Eina_List *obstacles;
 
-   Eina_List *ec_hooks;
+   E_DEPRECATED Eina_List *ec_hooks;
 
    E_Focus *focus;
 };