e_policy_conformant: Add missing view event listener delete 59/316559/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 13 Dec 2024 07:40:27 +0000 (16:40 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 13 Dec 2024 09:45:01 +0000 (18:45 +0900)
If eo deleted without e_policy_conformant_part_del,
the registered event listeners will not be deregisterd.

Change-Id: Ib54ab60b568124cac32b48d6a08bd7a1df4f65d3

src/bin/windowmgr/e_policy_conformant.c

index 9478371cbad95f1e634515e391c1328772307933..e998c0a993d2527bb737381fafefa6a31b0ac700 100644 (file)
@@ -521,6 +521,7 @@ _conf_cb_part_del(struct wl_listener *listener, void *data)
    Conformant_Part *conf_part;
    Conformant_Type type;
    Defer_Job *job;
+   E_View *view;
 
    if (!g_conf)
      return;
@@ -528,7 +529,16 @@ _conf_cb_part_del(struct wl_listener *listener, void *data)
    conf_part = wl_container_of(listener, conf_part, del_listener);
    type = conf_part->type;
 
-   DBG("PART %s ec(%p) Deleted", _conf_type_to_str(type), g_conf->part[type].ec);
+   INF("PART %s ec(%p) Deleted", _conf_type_to_str(type), g_conf->part[type].ec);
+
+   if (g_conf->part[type].ec)
+     {
+        view = e_view_client_view_get(e_client_view_get(g_conf->part[type].ec));
+        e_view_event_listener_del(view, E_VIEW_SHOW, &g_conf->part[type].show_listener);
+        e_view_event_listener_del(view, E_VIEW_HIDE, &g_conf->part[type].hide_listener);
+        e_view_event_listener_del(view, E_VIEW_MOVE, &g_conf->part[type].move_listener);
+        e_view_event_listener_del(view, E_VIEW_RESIZE, &g_conf->part[type].resize_listener);
+     }
 
    g_conf->part[type].ec = NULL;
    g_conf->part[type].state.will_hide = EINA_FALSE;
@@ -706,6 +716,8 @@ _conf_part_deregister(E_Client *ec, Conformant_Type type)
         return;
      }
 
+   INF("%s Deregistered ec:%p", _conf_type_to_str(type), ec);
+
    // wl_list remove
    wl_list_remove(&g_conf->part[type].comp_object_hiding.link);