e_view_edje: Fix e_view event listener delete error 58/317258/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 27 Dec 2024 07:08:57 +0000 (16:08 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 27 Dec 2024 09:48:49 +0000 (18:48 +0900)
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 06fe48a3b75bd85841eaaeb555283e1c0118075b..a31f190284e2471af2949f808c9bfa25ca15e048 100644 (file)
@@ -52,7 +52,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);
 
@@ -85,7 +88,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;
@@ -475,6 +478,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)
      {