wayland: Implement maximized state
diff --git a/src/wl_platform.h b/src/wl_platform.h
index c538936..d75c025 100644
--- a/src/wl_platform.h
+++ b/src/wl_platform.h
@@ -83,6 +83,7 @@
{
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 c254f41..0858630 100644
--- a/src/wl_window.c
+++ b/src/wl_window.c
@@ -222,6 +222,10 @@
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 _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 _glfwPlatformWindowMaximized(_GLFWwindow* window)
{
- // TODO
- return GLFW_FALSE;
+ return window->wl.maximized;
}
void _glfwPlatformPollEvents(void)