e_magnifier: use e_client_destroy_listener_add 74/322174/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 3 Apr 2025 12:00:21 +0000 (21:00 +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: I1805127024f1604c1d2e1817c9fbb0d442a247cd

src/bin/windowmgr/e_magnifier.c

index 4dbd9df6e474b762fe45e48759541099b2e5b2c6..c6112b7100f31d8cf6c70d077d42ee6e8858213a 100644 (file)
@@ -60,7 +60,6 @@ static Eina_Bool _e_magnifier_smart_client_cb_show(void *data, int type, void *e
 static Eina_Bool _e_magnifier_smart_client_cb_hide(void *data, int type, void *event);
 static Eina_Bool _e_magnifier_smart_client_cb_move(void *data, int type, void *event);
 static Eina_Bool _e_magnifier_smart_client_cb_resize(void *data, int type, void *event);
-static void      _e_magnifier_smart_cb_hook_client_del(void *data, E_Client *ec);
 static Eina_Bool _e_magnifier_smart_cb_hook_effect_end(void *data, E_Client *ec);
 static void      _e_magnifier_smart_cb_hook_client_reuse(void *data, E_Client *ec);
 
@@ -80,7 +79,6 @@ typedef struct _E_Magnifier_Manager
    E_View_Rect *clip_rect;
 
    Eina_List *handlers;
-   Eina_List *hooks;
    Eina_List *cp_hooks;
    Eina_List *wl_hooks;
    E_Desk *desk;
@@ -102,6 +100,9 @@ typedef struct _E_Magnifier_Manager
    Eina_Bool enabled;
 
    struct wl_listener show;
+
+   // client listeners
+   struct wl_listener client_destroy_listener;
 } E_Magnifier_Manager;
 
 static E_Magnifier_Manager *_e_magnifier_mgr = NULL;
@@ -155,9 +156,6 @@ _e_magnifier_manager_create(E_Zone *zone)
    E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_MOVE, _e_magnifier_smart_client_cb_move, emm);
    E_LIST_HANDLER_APPEND(emm->handlers, E_EVENT_CLIENT_RESIZE, _e_magnifier_smart_client_cb_resize, emm);
 
-   // e_client hooks
-   E_LIST_HOOK_APPEND(emm->hooks, E_CLIENT_HOOK_DEL, _e_magnifier_smart_cb_hook_client_del, emm);
-
    // e_comp_object hooks
    E_COMP_COMP_HOOK_APPEND(emm->cp_hooks, E_COMP_OBJECT_HOOK_EFFECT_END, _e_magnifier_smart_cb_hook_effect_end, emm);
 
@@ -176,7 +174,6 @@ _e_magnifier_manager_destroy(E_Magnifier_Manager *emm)
    if (!emm) return;
 
    E_FREE_LIST(emm->handlers, ecore_event_handler_del);
-   E_FREE_LIST(emm->hooks, e_client_hook_del);
    E_FREE_LIST(emm->cp_hooks, e_comp_object_hook_del);
    E_FREE_LIST(emm->wl_hooks, e_comp_wl_hook_del);
 
@@ -667,21 +664,6 @@ _e_magnifier_smart_cb_hook_client_reuse(void *data, E_Client *ec)
    _e_magnifier_proxy_ec_new(ec);
 }
 
-static void
-_e_magnifier_smart_cb_hook_client_del(void *data, E_Client *ec)
-{
-   if (!data) return;
-   if (!ec) return;
-
-   if (!_e_magnifier_mgr) return;
-
-   if (_e_magnifier_mgr->owner == ec)
-     {
-        ELOGF("MAGNIFIER", "Deleted Owner.. So, Unset owner", ec);
-        e_magnifier_owner_unset(ec);
-     }
-}
-
 static void
 _e_magnifier_zoom_obj_geometry_convert_set(int angle, int x, int y, int w, int h, int tx, int ty, int tw, int th)
 {
@@ -1011,6 +993,21 @@ _e_magnifier_stand_alone_mode_set(E_Magnifier_Manager *emm, Eina_Bool set)
    return EINA_TRUE;
 }
 
+
+static void
+_e_magnifier_owner_cb_client_destroy(struct wl_listener *listener, void *data)
+{
+   E_Magnifier_Manager *emm;
+   E_Client *ec;
+
+   emm = wl_container_of(listener, emm, client_destroy_listener);
+   ec = emm->owner;
+
+   ELOGF("MAGNIFIER", "Deleted Owner.. So, Unset owner", ec);
+
+   e_magnifier_owner_unset(ec);
+}
+
 EINTERN Eina_Bool
 e_magnifier_owner_set(E_Client *ec)
 {
@@ -1038,6 +1035,10 @@ e_magnifier_owner_set(E_Client *ec)
         _e_magnifier_stand_alone_mode_set(_e_magnifier_mgr, EINA_FALSE);
      }
 
+   // e_client listeners
+   emm->client_destroy_listener.notify = _e_magnifier_owner_cb_client_destroy;
+   e_client_destroy_listener_add(ec, &emm->client_destroy_listener);
+
    return EINA_TRUE;
 }
 
@@ -1065,6 +1066,8 @@ e_magnifier_owner_unset(E_Client *ec)
         return;
      }
 
+   wl_list_remove(&emm->client_destroy_listener.link);
+
    emm->owner = NULL;
 }