diff --git a/src/wl_platform.h b/src/wl_platform.h index c538936c..d75c025e 100644 --- a/src/wl_platform.h +++ b/src/wl_platform.h @@ -83,6 +83,7 @@ typedef struct _GLFWwindowWayland { int width, height; GLFWbool visible; + GLFWbool maximized; struct wl_surface* surface; struct wl_egl_window* native; struct wl_shell_surface* shell_surface; diff --git a/src/wl_window.c b/src/wl_window.c index c254f41b..08586300 100644 --- a/src/wl_window.c +++ b/src/wl_window.c @@ -222,6 +222,10 @@ static GLFWbool createShellSurface(_GLFWwindow* window) 0, window->monitor->wl.output); } + else if (window->wl.maximized) + { + wl_shell_surface_set_maximized(window->wl.shell_surface, NULL); + } else { wl_shell_surface_set_toplevel(window->wl.shell_surface); @@ -516,14 +520,27 @@ void _glfwPlatformIconifyWindow(_GLFWwindow* window) void _glfwPlatformRestoreWindow(_GLFWwindow* window) { - // TODO - fprintf(stderr, "_glfwPlatformRestoreWindow not implemented yet\n"); + // TODO: also do the same for iconified. + if (window->monitor || window->wl.maximized) + { + if (window->wl.shell_surface) + wl_shell_surface_set_toplevel(window->wl.shell_surface); + + window->wl.maximized = GLFW_FALSE; + } } void _glfwPlatformMaximizeWindow(_GLFWwindow* window) { - // TODO - fprintf(stderr, "_glfwPlatformMaximizeWindow not implemented yet\n"); + if (!window->monitor && !window->wl.maximized) + { + if (window->wl.shell_surface) + { + // Let the compositor select the best output. + wl_shell_surface_set_maximized(window->wl.shell_surface, NULL); + } + window->wl.maximized = GLFW_TRUE; + } } void _glfwPlatformShowWindow(_GLFWwindow* window) @@ -592,8 +609,7 @@ int _glfwPlatformWindowVisible(_GLFWwindow* window) int _glfwPlatformWindowMaximized(_GLFWwindow* window) { - // TODO - return GLFW_FALSE; + return window->wl.maximized; } void _glfwPlatformPollEvents(void)