From: SooChan Lim Date: Thu, 3 Apr 2025 12:00:21 +0000 (+0900) Subject: e_magnifier: use e_client_destroy_listener_add X-Git-Tag: accepted/tizen/unified/20250407.091005~20 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1b1adb4564fde16d757db3994584a7e03edb58b0;p=platform%2Fupstream%2Fenlightenment.git e_magnifier: use e_client_destroy_listener_add use destroy signal of e_client instead of E_CLIENT_HOOK_DEL. Change-Id: I1805127024f1604c1d2e1817c9fbb0d442a247cd --- diff --git a/src/bin/windowmgr/e_magnifier.c b/src/bin/windowmgr/e_magnifier.c index 4dbd9df6e4..c6112b7100 100644 --- a/src/bin/windowmgr/e_magnifier.c +++ b/src/bin/windowmgr/e_magnifier.c @@ -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; }