From: Junkyeong Kim Date: Thu, 23 Jan 2025 09:08:34 +0000 (+0900) Subject: e_view_client: Fix effect view destroy error X-Git-Tag: accepted/tizen/unified/20250203.113944~31 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F74%2F318774%2F1;p=platform%2Fupstream%2Fenlightenment.git e_view_client: Fix effect view destroy error Change-Id: Ic5cd0d35d88b50bacba255fba8a6ce8f5f955979 --- diff --git a/src/bin/core/e_view_client.c b/src/bin/core/e_view_client.c index ac83cc1c54..1a28ca4ee4 100644 --- a/src/bin/core/e_view_client.c +++ b/src/bin/core/e_view_client.c @@ -28,9 +28,29 @@ _view_client_handle_destroy(E_View *view) e_view_data_del(&client->view, "E_Client"); + if (client->effect) + { + wl_list_remove(&client->effect_destroy.link); + client->effect_destroy.notify = NULL; + e_view_destroy(client->effect); + free(client->effect); + client->effect = NULL; + } + free(client); } +static void +_view_client_effect_destroy(struct wl_listener *listener, void *data) +{ + E_View_Client *client = wl_container_of(listener, client, effect_destroy); + + wl_list_remove(&client->effect_destroy.link); + client->effect_destroy.notify = NULL; + free(client->effect); + client->effect = NULL; +} + static E_View_Client * _view_client_from_tree(E_View_Tree *tree) { @@ -259,6 +279,9 @@ e_view_client_effect_object_get(E_View_Client *client) e_view_init(effect, E_VIEW_TYPE_EDJE, NULL, eo, client->view.parent); client->effect = effect; + client->effect_destroy.notify = _view_client_effect_destroy; + e_view_event_listener_add(effect, E_VIEW_DESTROY, &client->effect_destroy); + return effect; } diff --git a/src/bin/core/e_view_intern.h b/src/bin/core/e_view_intern.h index 5604e72c00..abe4d8e307 100644 --- a/src/bin/core/e_view_intern.h +++ b/src/bin/core/e_view_intern.h @@ -81,6 +81,7 @@ struct _E_View_Client E_View view; E_View *content; E_View *effect; + struct wl_listener effect_destroy; E_View_Tree tree; void *effect_data;