From f3240f630b56f3e991506013952bc5fb54a94be6 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Mon, 31 Oct 2016 14:03:30 -0400 Subject: ecore-wl2: Unify surface creation code As we call the same code during ecore_wl2_window_surface_get and ecore_wl2_window_show functions that basically create the wl_surface for a given window we can unify that code into one function that can be called from various places. This also fixes an issue inside ecore_wl2_window_show where the window surface_id may not have been getting filled properly. @fix Signed-off-by: Chris Michael --- src/lib/ecore_wl2/ecore_wl2_window.c | 51 +++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index 6b0d9cf8a5..21225342f8 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -335,6 +335,29 @@ surf_err: ERR("Failed to create surface for window"); } +static void +_ecore_wl2_window_surface_create(Ecore_Wl2_Window *window) +{ + if (window->surface) return; + + EINA_SAFETY_ON_NULL_RETURN(window->display->wl.compositor); + + window->surface = + wl_compositor_create_surface(window->display->wl.compositor); + if (!window->surface) + { + ERR("Failed to create surface for window"); + return; + } + + window->surface_id = + wl_proxy_get_id((struct wl_proxy *)window->surface); + + if (window->display->wl.session_recovery) + zwp_e_session_recovery_add_listener(window->display->wl.session_recovery, + &_session_listener, window); +} + EAPI Ecore_Wl2_Window * ecore_wl2_window_new(Ecore_Wl2_Display *display, Ecore_Wl2_Window *parent, int x, int y, int w, int h) { @@ -381,20 +404,7 @@ ecore_wl2_window_surface_get(Ecore_Wl2_Window *window) { EINA_SAFETY_ON_NULL_RETURN_VAL(window, NULL); - if (!window->surface) - { - EINA_SAFETY_ON_NULL_RETURN_VAL(window->display->wl.compositor, NULL); - - window->surface = - wl_compositor_create_surface(window->display->wl.compositor); - - window->surface_id = - wl_proxy_get_id((struct wl_proxy *)window->surface); - - if (window->display->wl.session_recovery) - zwp_e_session_recovery_add_listener(window->display->wl.session_recovery, - &_session_listener, window); - } + _ecore_wl2_window_surface_create(window); return window->surface; } @@ -411,16 +421,7 @@ ecore_wl2_window_show(Ecore_Wl2_Window *window) { EINA_SAFETY_ON_NULL_RETURN(window); - if (!window->surface) - { - window->surface = - wl_compositor_create_surface(window->display->wl.compositor); - if (!window->surface) - { - ERR("Failed to create surface for window"); - return; - } - } + _ecore_wl2_window_surface_create(window); if (window->input_set) ecore_wl2_window_input_region_set(window, window->input_rect.x, window->input_rect.y, @@ -470,6 +471,8 @@ ecore_wl2_window_hide(Ecore_Wl2_Window *window) window->configure_serial = 0; window->configure_ack = NULL; + + window->surface_id = -1; } EAPI void -- cgit v1.2.1