e_comp_wl: delete evas_object's callbacks when ec is deleted 25/271225/1 accepted/tizen/unified/20220218.152610 submit/tizen/20220217.050611 submit/tizen/20220217.084227
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 17 Feb 2022 03:45:04 +0000 (12:45 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 17 Feb 2022 03:45:15 +0000 (12:45 +0900)
Change-Id: I5ba05bbf5d060d4bfd492a849a6296d74d4370b0

src/bin/e_comp_wl.c

index a33f1c36aba4a2754bda6614abd4ccb85eb01404..88416189865c6242a6a02c65250126c21260ca16 100644 (file)
@@ -2119,6 +2119,50 @@ _e_comp_wl_client_evas_init(E_Client *ec)
    ec->comp_data->evas_init = EINA_TRUE;
 }
 
+static void
+_e_comp_wl_client_evas_deinit(E_Client *ec)
+{
+   if (!ec || !ec->comp_data) return;
+   if (!ec->comp_data->evas_init) return;
+
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_SHOW, _e_comp_wl_evas_cb_show);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_HIDE, _e_comp_wl_evas_cb_hide);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOVE, _e_comp_wl_evas_cb_move);
+
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_IN,    _e_comp_wl_evas_cb_mouse_in);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_OUT,   _e_comp_wl_evas_cb_mouse_out);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_MOVE,  _e_comp_wl_evas_cb_mouse_move);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_DOWN,  _e_comp_wl_evas_cb_mouse_down);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_UP,    _e_comp_wl_evas_cb_mouse_up);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOUSE_WHEEL, _e_comp_wl_evas_cb_mouse_wheel);
+
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MULTI_DOWN, _e_comp_wl_evas_cb_multi_down);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MULTI_UP,   _e_comp_wl_evas_cb_multi_up);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MULTI_MOVE, _e_comp_wl_evas_cb_multi_move);
+
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_IN,  _e_comp_wl_evas_cb_focus_in);
+   evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_OUT, _e_comp_wl_evas_cb_focus_out);
+
+   if (!ec->override)
+     {
+        evas_object_smart_callback_del(ec->frame, "client_resize",   _e_comp_wl_evas_cb_resize);
+        evas_object_smart_callback_del(ec->frame, "maximize_done",   _e_comp_wl_evas_cb_state_update);
+        evas_object_smart_callback_del(ec->frame, "unmaximize_done", _e_comp_wl_evas_cb_state_update);
+        evas_object_smart_callback_del(ec->frame, "maximize_pre",    _e_comp_wl_evas_cb_maximize_pre);
+        evas_object_smart_callback_del(ec->frame, "unmaximize_pre",  _e_comp_wl_evas_cb_maximize_pre);
+        evas_object_smart_callback_del(ec->frame, "fullscreen",      _e_comp_wl_evas_cb_state_update);
+        evas_object_smart_callback_del(ec->frame, "unfullscreen",    _e_comp_wl_evas_cb_state_update);
+     }
+
+   evas_object_smart_callback_del(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request);
+   evas_object_smart_callback_del(ec->frame, "kill_request",   _e_comp_wl_evas_cb_kill_request);
+
+   evas_object_smart_callback_del(ec->frame, "ping",           _e_comp_wl_evas_cb_ping);
+   evas_object_smart_callback_del(ec->frame, "color_set",      _e_comp_wl_evas_cb_color_set);
+
+   ec->comp_data->evas_init = EINA_FALSE;
+}
+
 static Eina_Bool
 _e_comp_wl_cb_randr_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
 {
@@ -3703,6 +3747,8 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, E_Client *ec)
 
    e_presentation_time_container_finish(&ec->comp_data->presentation_container);
 
+   _e_comp_wl_client_evas_deinit(ec);
+
    e_pixmap_cdata_set(ec->pixmap, NULL);
 
    E_FREE_FUNC(ec->comp_data->on_focus_timer, ecore_timer_del);