e_hwc_window: recover hwc_window even if client is deleted 88/229788/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Fri, 3 Apr 2020 08:38:13 +0000 (17:38 +0900)
committerChangyeon Lee <cyeon.lee@samsung.com>
Fri, 3 Apr 2020 09:30:51 +0000 (18:30 +0900)
client can be visible even if it is deleted because hide effect

Change-Id: I1d2368caf06d851981fb9f96f2747b69a44970d9

src/bin/e_hwc_window.c

index f62aa66..6262005 100644 (file)
@@ -403,7 +403,7 @@ _e_hwc_window_client_cb_del(void *data EINA_UNUSED, E_Client *ec)
    if (!ec->hwc_window) return;
    if (e_hwc_window_is_video(ec->hwc_window)) return;
 
-   e_hwc_window_constraints_reset(ec->hwc_window);
+   e_hwc_window_client_type_override(ec->hwc_window);
 }
 
 static Eina_Bool
@@ -1955,8 +1955,6 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window)
    ec = hwc_window->ec;
    if (!ec) return EINA_FALSE;
 
-   if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
-
    comp_wl_buffer = _e_hwc_window_comp_wl_buffer_get(hwc_window);
 
    if ((!comp_wl_buffer) &&
@@ -1981,7 +1979,8 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window)
             e_hwc_window_name_get(hwc_window));
 
    /* force update */
-   e_comp_wl_surface_attach(ec, recover_buffer);
+   if (ec->comp_data)
+     e_comp_wl_surface_attach(ec, recover_buffer);
 
    e_hwc_window_buffer_fetch(hwc_window);
 
@@ -1990,7 +1989,7 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window)
    e_comp_object_dirty(ec->frame);
    e_comp_object_render(ec->frame);
 
-   if (!comp_wl_buffer)
+   if (!comp_wl_buffer && ec->comp_data)
      e_comp_wl_surface_attach(ec, NULL);
 
    return EINA_TRUE;
@@ -2009,8 +2008,6 @@ _e_hwc_window_rendered_window_set(E_Hwc_Window *hwc_window, Eina_Bool set)
    ec = hwc_window->ec;
    if (!ec) return EINA_FALSE;
 
-   if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
-
    if (hwc_window->render_target == set) return EINA_TRUE;
 
    if (set)
@@ -2058,8 +2055,6 @@ e_hwc_window_rendered_window_update(E_Hwc_Window *hwc_window)
    ec = hwc_window->ec;
    if (!ec) return EINA_TRUE;
 
-   if (e_object_is_del(E_OBJECT(ec))) return EINA_TRUE;
-
    if (hwc_window->is_cursor)
      pointer = e_pointer_get(hwc_window->ec);