e_view_client: Fix effect view destroy error 74/318774/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 23 Jan 2025 09:08:34 +0000 (18:08 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 23 Jan 2025 11:21:07 +0000 (20:21 +0900)
Change-Id: Ic5cd0d35d88b50bacba255fba8a6ce8f5f955979

src/bin/core/e_view_client.c
src/bin/core/e_view_intern.h

index ac83cc1c54bdb2cef76fd504c77d258f121ac436..1a28ca4ee4ccc5466b55f2de3b598ca45cb906cc 100644 (file)
@@ -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;
 }
 
index 5604e72c0021e548411bb3cd8c35a1bc13d0cb34..abe4d8e3072160c586756ccbbe7516fda6e19e86 100644 (file)
@@ -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;