e_policy_visibility: add skip_hook_del 71/219571/3
authorJuyeon Lee <juyeonne.lee@samsung.com>
Fri, 6 Dec 2019 04:56:50 +0000 (13:56 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 23 Dec 2019 04:56:09 +0000 (04:56 +0000)
E_Vis_Client allocation and free is not paired due missing E_EVENT_CLIENT_REMOVE event
by adding skip_hook_del flag, free e_vis_client when E_CLIENT_HOOK_DEL is called
without E_EVENT_CLIENT_ADD event.

Change-Id: I2d0d67468cecedf2c265887bd525db8abb478b44

src/bin/e_policy_visibility.c
src/bin/e_policy_visibility_internal.h

index fddcf81dbce1c4b70b8c0b307d7cfcc02d3ea8c2..9ca4680b68709c4639a0e6683c730fb02621b59d 100644 (file)
@@ -1851,10 +1851,24 @@ _e_vis_client_remove(E_Client *ec)
 static void
 _e_vis_hook_client_del(void *data EINA_UNUSED, E_Client *ec)
 {
-   if (!ec->new_client) return;
+   E_VIS_CLIENT_GET_OR_RETURN(vc, ec);
+   if (vc->skip_hook_del) return;
    _e_vis_client_remove(ec);
 }
 
+static Eina_Bool
+_e_vis_cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+{
+   E_Event_Client *ev;
+
+   ev = event;
+   E_VIS_CLIENT_GET_OR_RETURN_VAL(vc, ev->ec, ECORE_CALLBACK_PASS_ON);
+
+   vc->skip_hook_del = EINA_TRUE;
+
+   return ECORE_CALLBACK_PASS_ON;
+}
+
 static Eina_Bool
 _e_vis_cb_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
 {
@@ -2055,6 +2069,7 @@ _e_vis_event_init(void)
    E_LIST_HOOK_APPEND(pol_vis->hooks, E_CLIENT_HOOK_NEW_CLIENT_POST, _e_vis_hook_new_client_post, NULL);
    E_LIST_HOOK_APPEND(pol_vis->hooks, E_CLIENT_HOOK_DEL, _e_vis_hook_client_del, NULL);
 
+   E_LIST_HANDLER_APPEND(pol_vis->handlers, E_EVENT_CLIENT_ADD,   _e_vis_cb_client_add, NULL);
    E_LIST_HANDLER_APPEND(pol_vis->handlers, E_EVENT_CLIENT_REMOVE,   _e_vis_cb_client_remove, NULL);
 
    E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(pol_vis->interceptors, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER,  _e_vis_intercept_show, NULL);
index 9d3b75133e6bb3e8b9ca3fb655d451b3daad55ec..ae3ad346b638ac189eaaf3c5c955474f433fb6ba 100644 (file)
@@ -148,6 +148,7 @@ struct _E_Vis_Client
    E_Layer layer;
 
    Eina_Bool skip_below_uniconify;
+   Eina_Bool skip_hook_del;
 };
 
 struct _E_Vis_Job_Group