From: SooChan Lim Date: Thu, 3 Apr 2025 11:03:25 +0000 (+0900) Subject: e_service_launcher: use e_client_destroy_listener_add X-Git-Tag: accepted/tizen/unified/20250407.091005~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e6f97e98a8d69a3359c589aa33c014b394b8b0e3;p=platform%2Fupstream%2Fenlightenment.git e_service_launcher: use e_client_destroy_listener_add use destroy signal of e_client instead of E_CLIENT_HOOK_DEL. Change-Id: Ie45bdfb58dd4509c3edc6c540353d76ed5e5d595 --- diff --git a/src/bin/windowmgr/services/e_service_launcher.c b/src/bin/windowmgr/services/e_service_launcher.c index b5f4552396..78c378a7fa 100644 --- a/src/bin/windowmgr/services/e_service_launcher.c +++ b/src/bin/windowmgr/services/e_service_launcher.c @@ -84,6 +84,9 @@ struct _E_Service_Launcher Eina_Bool block_input; //input is blocked(1) or not(0) while running client side animation Eina_List *consumers; //list launcher consumer of launcher ec + + // client listeners + struct wl_listener client_destroy_listener; }; struct _E_Service_Launcher_Handler @@ -91,7 +94,6 @@ struct _E_Service_Launcher_Handler Eina_Hash *launcher_hash; //hash key:launcher_ec, data:E_Service_Launcher unsigned int launcher_count; //count of launcher object - Eina_List *hooks_ec; //hook list for E_CLIENT_HOOK_* Eina_List *hooks_vis; //hook list for E_POL_VIS_HOOK_TYPE_* Eina_List *hooks_co; //hook list for E_COMP_OBJECT_INTERCEPT_HOOK_* Eina_List *hooks_appinfo; //hook list for E_APPINFO_HOOK_* @@ -1464,6 +1466,8 @@ _launcher_handler_launcher_del(E_Service_Launcher *lc) EINA_SAFETY_ON_NULL_RETURN_VAL(_laundler, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(_laundler->launcher_hash, EINA_FALSE); + wl_list_remove(&lc->client_destroy_listener.link); + ret = eina_hash_del(_laundler->launcher_hash, &lc->ec, lc); if (ret) _laundler->launcher_count--; @@ -1819,24 +1823,6 @@ _launcher_handler_cb_hook_vis_hide(void *data EINA_UNUSED, E_Client *ec) return EINA_TRUE; } -static void -_launcher_handler_cb_hook_client_del(void *data EINA_UNUSED, E_Client *ec) -{ - E_Service_Launcher *lc; - - EINA_SAFETY_ON_NULL_RETURN(ec); - - lc = _launcher_handler_launcher_find(ec); - if (!lc) return; - - if (lc->ec == ec) //launcher surface is gone. - { - _launcher_handler_launcher_del(lc); - _launcher_data_reset(lc); - E_FREE(lc); - } -} - static Eina_Bool _launcher_handler_cb_hook_intercept_show_helper(void *data, E_Client *ec) { @@ -2088,11 +2074,6 @@ _launcher_handler_create(void) E_POL_VIS_HOOK_TYPE_HIDE, _launcher_handler_cb_hook_vis_hide, NULL); - LAUNCHER_HANDLER_CB_ADD(laundler->hooks_ec, - e_client_hook_add, - E_CLIENT_HOOK_DEL, - _launcher_handler_cb_hook_client_del, NULL); - LAUNCHER_HANDLER_CB_ADD(laundler->hooks_co, e_comp_object_intercept_hook_add, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER, @@ -2126,7 +2107,6 @@ _launcher_handler_destroy(E_Service_Launcher_Handler *laundler) E_FREE_LIST(laundler->hdlrs_ev, ecore_event_handler_del); E_FREE_LIST(laundler->hooks_appinfo, e_appinfo_hook_del); E_FREE_LIST(laundler->hooks_co, e_comp_object_intercept_hook_del); - E_FREE_LIST(laundler->hooks_ec, e_client_hook_del); E_FREE_LIST(laundler->hooks_vis, e_policy_visibility_hook_del); E_FREE_FUNC(laundler->launcher_hash, eina_hash_free); @@ -2154,6 +2134,18 @@ e_service_launcher_resource_set(E_Client *ec, struct wl_resource *res_tws_lc) _launcher_cb_resource_destroy); } +static void +_e_service_launcher_cb_client_destroy(struct wl_listener *listener, void *data) +{ + E_Service_Launcher *lc; + + lc = wl_container_of(listener, lc, client_destroy_listener); + + _launcher_handler_launcher_del(lc); + _launcher_data_reset(lc); + E_FREE(lc); +} + EINTERN void e_service_launcher_client_set(E_Client *ec) { @@ -2189,7 +2181,9 @@ e_service_launcher_client_set(E_Client *ec) ELOGF("LAUNCHER_SRV", "client set|Created New Launcher(%p)", ec, lc); _launcher_state_set(lc, LAUNCHER_STATE_IDLE); - return; + // e_client listeners + lc->client_destroy_listener.notify = _e_service_launcher_cb_client_destroy; + e_client_destroy_listener_add(ec, &lc->client_destroy_listener); } EINTERN void