devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=e78dcd3f4f8274b70ae393f8ef4442ffb8070a8b
commit e78dcd3f4f8274b70ae393f8ef4442ffb8070a8b Author: Chris Michael <[email protected]> Date: Sat Aug 23 08:57:16 2014 -0400 ecore-wayland: Add/Implement code to handle iconifying a window xdg_shell protocol provides functions to minimize a surface. This is now implemented via ecore_wl_window_iconified_set. NB: This Does Not work for wl_shell surfaces because wl_shell provides no method to minimize. Signed-off-by: Chris Michael <[email protected]> --- src/lib/ecore_wayland/ecore_wl_window.c | 77 ++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 15 deletions(-) diff --git a/src/lib/ecore_wayland/ecore_wl_window.c b/src/lib/ecore_wayland/ecore_wl_window.c index 0d6ca72..75fcd7d 100644 --- a/src/lib/ecore_wayland/ecore_wl_window.c +++ b/src/lib/ecore_wayland/ecore_wl_window.c @@ -733,6 +733,52 @@ ecore_wl_window_parent_set(Ecore_Wl_Window *win, Ecore_Wl_Window *parent) win->parent = parent; } +/* @since 1.12 */ +EAPI void +ecore_wl_window_iconified_set(Ecore_Wl_Window *win, Eina_Bool iconified) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + + if (!win) return; + + if (iconified) + { + if (win->xdg_surface) + { + xdg_surface_set_minimized(win->xdg_surface); + win->minimized = iconified; + } + else if (win->shell_surface) + { + /* TODO: handle case of iconifying a wl_shell surface */ + } + } + else + { + if (win->xdg_surface) + { + /* TODO: Handle case of UnIconifying an xdg_surface + * + * NB: This will be needed for Enlightenment IBox scenario */ + } + else if (win->shell_surface) + { + wl_shell_surface_set_toplevel(win->shell_surface); + win->type = ECORE_WL_WINDOW_TYPE_TOPLEVEL; + _ecore_wl_window_configure_send(win, win->saved.w, win->saved.h, 0); + } + } +} + +EAPI Eina_Bool +ecore_wl_window_iconified_get(Ecore_Wl_Window *win) +{ + LOGFN(__FILE__, __LINE__, __FUNCTION__); + + if (!win) return EINA_FALSE; + return win->minimized; +} + EAPI Ecore_Wl_Window * ecore_wl_window_surface_find(struct wl_surface *surface) { @@ -968,21 +1014,22 @@ _ecore_xdg_handle_surface_configure(void *data, struct xdg_surface *xdg_surface uint32_t state = *p; switch (state) { - case XDG_SURFACE_STATE_MAXIMIZED: - win->maximized = EINA_TRUE; - break; - case XDG_SURFACE_STATE_FULLSCREEN: - win->fullscreen = EINA_TRUE; - break; - case XDG_SURFACE_STATE_RESIZING: - win->resizing = EINA_TRUE; - break; - case XDG_SURFACE_STATE_ACTIVATED: - win->focused = EINA_TRUE; - break; - default: - break; - } + case XDG_SURFACE_STATE_MAXIMIZED: + win->maximized = EINA_TRUE; + break; + case XDG_SURFACE_STATE_FULLSCREEN: + win->fullscreen = EINA_TRUE; + break; + case XDG_SURFACE_STATE_RESIZING: + win->resizing = EINA_TRUE; + break; + case XDG_SURFACE_STATE_ACTIVATED: + win->focused = EINA_TRUE; + win->minimized = EINA_FALSE; + break; + default: + break; + } } if ((width > 0) && (height > 0)) _ecore_wl_window_configure_send(win, width, height, 0); --
