e_view_edje: Fix e_view event listener delete error 61/317261/2
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 27 Dec 2024 07:08:57 +0000 (16:08 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 27 Dec 2024 09:58:00 +0000 (09:58 +0000)
The E_VIEW_RESTACK event listener delete always execute even though listener add not be called.
The destroy listener is not deleted.

Change-Id: I0e658d6b319d577691c50837ddaf0019c3fe5d5d

src/bin/core/e_view_edje.c

index f07931f103b6e9bf0312c431a742d9232cbefcef..03b710a92622e0e7a278afb0401ca922fbc2e26c 100644 (file)
@@ -51,7 +51,10 @@ _view_edje_handle_destroy(E_View *view)
    E_View_Edje_Signal *signal, *signal_tmp;
    E_View_Edje_Swallow *swallow, *swallow_tmp;
 
-   e_view_event_listener_del(view, E_VIEW_RESTACK, &edje->restack);
+   if (edje->restack.notify != NULL)
+     e_view_event_listener_del(view, E_VIEW_RESTACK, &edje->restack);
+   if (edje->destroy.notify != NULL)
+     wl_list_remove(&edje->destroy.link);
 
    evas_object_del(view->eo);
 
@@ -84,7 +87,7 @@ e_view_edje_create(E_View_Tree *parent)
    if (!canvas)
      return NULL;
 
-   edje = malloc(sizeof(*edje));
+   edje = calloc(1, sizeof(E_View_Edje));
    if (!edje)
      return NULL;
    edje->edje_edit = false;
@@ -474,6 +477,11 @@ _e_view_edje_util_del(struct wl_listener *listener, void *data)
 
    e_view_edje_signal_callback_del(edje, "e,action,*,done", "e", _e_view_edje_util_done_defer);
 
+   wl_list_remove(&edje->destroy.link);
+   edje->destroy.notify = NULL;
+   e_view_event_listener_del(edje_view, E_VIEW_RESTACK, &edje->restack);
+   edje->restack.notify = NULL;
+
    comp_object = !!e_view_data_get(edje_view, "comp_object");
    if (comp_object)
      {