From 19561c611250352df5bc571e0ec2fa88972e4bdd Mon Sep 17 00:00:00 2001 From: "Eduardo Lima (Etrunko)" Date: Tue, 26 Mar 2013 15:48:41 -0300 Subject: [PATCH] Ecore_Wayland: Add ecore_wl_window_surface_create() API On some use cases, it is necessary to create a new wl_surface without associating it to a wl_shell_surface. This new API makes it possible. Signed-off-by: Eduardo Lima (Etrunko) --- src/lib/ecore_wayland/Ecore_Wayland.h | 10 ++++++++++ src/lib/ecore_wayland/ecore_wl_window.c | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/lib/ecore_wayland/Ecore_Wayland.h b/src/lib/ecore_wayland/Ecore_Wayland.h index a610c14140..250429e3f4 100644 --- a/src/lib/ecore_wayland/Ecore_Wayland.h +++ b/src/lib/ecore_wayland/Ecore_Wayland.h @@ -635,6 +635,16 @@ EAPI Ecore_Wl_Dnd *ecore_wl_dnd_get(); EAPI Eina_Bool ecore_wl_dnd_start_drag(); EAPI Eina_Bool ecore_wl_dnd_selection_has_owner(Ecore_Wl_Dnd *dnd); +/** + * Returns a wl_surface with no association to any wl_shell_surface. + * + * @param win The window which will use this newly created surface. + * + * @ingroup Ecore_Wl_Window_Group + * @since 1.8 + */ +EAPI struct wl_surface *ecore_wl_window_surface_create(Ecore_Wl_Window *win); + #ifdef __cplusplus } #endif diff --git a/src/lib/ecore_wayland/ecore_wl_window.c b/src/lib/ecore_wayland/ecore_wl_window.c index 19bf9c5979..b9474b3ae8 100644 --- a/src/lib/ecore_wayland/ecore_wl_window.c +++ b/src/lib/ecore_wayland/ecore_wl_window.c @@ -265,6 +265,17 @@ ecore_wl_window_buffer_attach(Ecore_Wl_Window *win, struct wl_buffer *buffer, in } } +EAPI struct wl_surface* +ecore_wl_window_surface_create(Ecore_Wl_Window *win) +{ + if (!win) return NULL; + if (win->surface) return NULL; + + win->surface = wl_compositor_create_surface(_ecore_wl_disp->wl.compositor); + wl_surface_set_user_data(win->surface, win); + return win->surface; +} + EAPI void ecore_wl_window_show(Ecore_Wl_Window *win) { @@ -273,9 +284,7 @@ ecore_wl_window_show(Ecore_Wl_Window *win) if (!win) return; if (win->surface) return; - win->surface = wl_compositor_create_surface(_ecore_wl_disp->wl.compositor); - wl_surface_set_user_data(win->surface, win); - /* wl_surface_add_listener(win->surface, &_ecore_wl_surface_listener, win); */ + ecore_wl_window_surface_create(win); win->shell_surface = wl_shell_get_shell_surface(_ecore_wl_disp->wl.shell, win->surface);