e_service: use e_client_destroy_listener_add 67/322167/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 3 Apr 2025 09:59:19 +0000 (18:59 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 4 Apr 2025 06:24:34 +0000 (15:24 +0900)
use destroy signal of e_client instead of E_CLIENT_HOOK_DEL.

Change-Id: Ibfe70f82ebd14c2269b0979f65ea0b2c5a144506

src/bin/windowmgr/services/e_service_cbhm.c

index cc99978553104c6e97adae0cbba5114ec729ac0d..70f92ec1f50c68d9ff06e1c7303b59ea42899f06 100644 (file)
@@ -17,6 +17,10 @@ struct _E_Policy_Cbhm
    Eina_List *intercept_hooks;
    Eina_List *events;
 
+   // client listeners
+   struct wl_listener client_destroy_listener;
+
+   // view listeners
    struct wl_listener show_listener;
 };
 
@@ -39,8 +43,9 @@ _cbhm_free(E_Policy_Cbhm *cbhm)
        cbhm->show_listener.notify = NULL;
     }
 
+   wl_list_remove(&cbhm->client_destroy_listener.link);
+
    E_FREE_LIST(cbhm->events, ecore_event_handler_del);
-   E_FREE_LIST(cbhm->hooks, e_client_hook_del);
    E_FREE_LIST(cbhm->intercept_hooks, e_comp_object_intercept_hook_del);
    E_FREE(_pol_cbhm);
 }
@@ -63,23 +68,6 @@ _cbhm_cb_show(struct wl_listener *listener, void *data)
      cbhm->show_block = EINA_TRUE;
 }
 
-static void
-_cbhm_hook_client_del(void *d, E_Client *ec)
-{
-   E_Policy_Cbhm *cbhm;
-
-   cbhm = d;
-   if (EINA_UNLIKELY(!cbhm))
-     return;
-
-   if (!ec) return;
-
-   if (cbhm->ec != ec)
-     return;
-
-   _cbhm_free(cbhm);
-}
-
 static Eina_Bool
 _cbhm_cb_client_zone_set(void *data, int type EINA_UNUSED, void *event)
 {
@@ -190,6 +178,16 @@ _e_cbhm_vis_change(E_Policy_Cbhm *cbhm, Eina_Bool vis)
    EC_CHANGED(ec);
 }
 
+static void
+_cbhm_cb_client_destroy(struct wl_listener *listener, void *data)
+{
+   E_Policy_Cbhm *cbhm;
+
+   cbhm = wl_container_of(listener, cbhm, client_destroy_listener);
+
+   _cbhm_free(cbhm);
+}
+
 /* NOTE: supported single client for cbhm for now. */
 EINTERN void
 e_service_cbhm_client_set(E_Client *ec)
@@ -249,7 +247,10 @@ e_service_cbhm_client_set(E_Client *ec)
         e_view_event_listener_add(view, E_VIEW_SHOW, &cbhm->show_listener);
      }
 
-   E_CLIENT_HOOK_APPEND(cbhm->hooks, E_CLIENT_HOOK_DEL, _cbhm_hook_client_del, cbhm);
+   // e_client listeners
+   cbhm->client_destroy_listener.notify = _cbhm_cb_client_destroy;
+   e_client_destroy_listener_add(ec, &cbhm->client_destroy_listener);
+
    E_LIST_HANDLER_APPEND(cbhm->events, E_EVENT_CLIENT_ZONE_SET, _cbhm_cb_client_zone_set, cbhm);
    E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(cbhm->intercept_hooks, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER, _cbhm_intercept_hook_show, cbhm);
 }