e_policy_visibility: use e_client_destroy_listener_add 79/322279/1
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 4 Apr 2025 06:58:29 +0000 (15:58 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 7 Apr 2025 07:14:51 +0000 (16:14 +0900)
use destroy signal of e_client instead of E_CLIENT_HOOK_DEL.

Change-Id: I131a5bd4081e5f7759198d86f15fd7ec801899e8

src/bin/windowmgr/e_policy_visibility.c
src/bin/windowmgr/e_policy_visibility_intern.h

index e1550fb014d481d0c933281fccbd5ec82a6611ff..26047417084c4c8de4ce8eac2764181a00044d05 100644 (file)
@@ -2043,6 +2043,31 @@ _e_vis_ec_below_uniconify(E_Client *ec, E_Pol_Vis_Type above_vis_type)
    return ret;
 }
 
+static void
+_e_vis_client_remove(E_Client *ec)
+{
+   E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
+   eina_hash_del_by_key(pol_vis->clients_hash, &ec);
+
+   if (pol_vis->activity == ec)
+     pol_vis->activity = NULL;
+
+   if (!stopping)
+     _e_vis_update_foreground_job_queue();
+}
+
+static void
+_e_vis_client_cb_client_destroy(struct wl_listener *listener, void *data)
+{
+   E_Vis_Client *vc;
+   E_Client *ec;
+
+   vc = wl_container_of(listener, vc, client_destroy_listener);
+   ec = vc->ec;
+
+   _e_vis_client_remove(ec);
+}
+
 static void
 _e_vis_ec_setup(E_Vis_Client *vc)
 {
@@ -2067,6 +2092,10 @@ _e_vis_ec_setup(E_Vis_Client *vc)
    e_view_event_listener_add(view, E_VIEW_MOVE, &vc->view_move_listener);
    vc->view_restack_listener.notify = _e_vis_client_cb_view_restack;
    e_view_event_listener_add(view, E_VIEW_RESTACK, &vc->view_restack_listener);
+
+   // e_client listeners
+   vc->client_destroy_listener.notify = _e_vis_client_cb_client_destroy;
+   e_client_destroy_listener_add(ec, &vc->client_destroy_listener);
 }
 
 static void
@@ -2088,6 +2117,8 @@ _e_vis_ec_reset(E_Vis_Client *vc)
    e_view_event_listener_del(view, E_VIEW_RESTACK, &vc->view_restack_listener);
 
    wl_list_remove(&vc->view_client_resize_listener.link);
+
+   wl_list_remove(&vc->client_destroy_listener.link);
 }
 
 static void
@@ -2096,27 +2127,6 @@ _e_vis_hook_new_client_post(void *data EINA_UNUSED, E_Client *ec)
    _e_vis_client_add(ec);
 }
 
-static void
-_e_vis_client_remove(E_Client *ec)
-{
-   E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
-   eina_hash_del_by_key(pol_vis->clients_hash, &ec);
-
-   if (pol_vis->activity == ec)
-     pol_vis->activity = NULL;
-
-   if (!stopping)
-     _e_vis_update_foreground_job_queue();
-}
-
-static void
-_e_vis_hook_client_del(void *data EINA_UNUSED, E_Client *ec)
-{
-   E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
-
-   _e_vis_client_remove(ec);
-}
-
 static void
 _e_vis_cb_child_launch_done(void *data, Evas_Object *obj, const char *signal, const char *source)
 {
@@ -2323,7 +2333,6 @@ static void
 _e_vis_event_init(void)
 {
    E_LIST_HOOK_APPEND(pol_vis->hooks, E_CLIENT_HOOK_NEW_CLIENT_POST, _e_vis_hook_new_client_post, NULL);
-   E_LIST_HOOK_APPEND(pol_vis->hooks, E_CLIENT_HOOK_DEL, _e_vis_hook_client_del, NULL);
 
    E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(pol_vis->interceptors, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER,  _e_vis_intercept_show, NULL);
    E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(pol_vis->interceptors, E_COMP_OBJECT_INTERCEPT_HOOK_HIDE,         _e_vis_intercept_hide, NULL);
index a23c54c7166926e0890f389bd27f08cb6ac0d019..2c9a052c84f7e0469a3c973866023900a4ae4e77 100644 (file)
@@ -147,6 +147,9 @@ struct _E_Vis_Client
    struct wl_listener view_hide_listener;
    struct wl_listener view_move_listener;
    struct wl_listener view_restack_listener;
+
+   // client listeners
+   struct wl_listener client_destroy_listener;
 };
 
 struct _E_Vis_Job_Group