Wayland: Fix un-maximizing a window not restoring its size to what it was before being maximized

This commit is contained in:
Kovid Goyal 2021-04-05 13:47:50 +05:30
parent d0f34e99a6
commit 7e78f30739
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 20 additions and 2 deletions

View File

@ -151,6 +151,9 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
- Wayland: Fix mouse handling when using client side decorations - Wayland: Fix mouse handling when using client side decorations
- Wayland: Fix un-maximizing a window not restoring its size to what it was
before being maximized
- GNOME/Wayland: Improve window decorations the titlebar now shows the window - GNOME/Wayland: Improve window decorations the titlebar now shows the window
title (:iss:`3284`) title (:iss:`3284`)

4
glfw/wl_platform.h vendored
View File

@ -185,6 +185,10 @@ typedef struct _GLFWwindowWayland
struct wl_callback *current_wl_callback; struct wl_callback *current_wl_callback;
} frameCallbackData; } frameCallbackData;
struct {
int32_t width, height;
} size_before_maximize;
} _GLFWwindowWayland; } _GLFWwindowWayland;
typedef enum _GLFWWaylandOfferType typedef enum _GLFWWaylandOfferType

15
glfw/wl_window.c vendored
View File

@ -425,6 +425,18 @@ static void xdgToplevelHandleConfigure(void* data,
break; break;
} }
} }
bool window_maximized = !window->wl.maximized && maximized;
bool window_unmaximized = window->wl.maximized && !maximized;
if (window_maximized) {
window->wl.size_before_maximize.width = window->wl.width;
window->wl.size_before_maximize.height = window->wl.height;
} else if (window_unmaximized && window->wl.size_before_maximize.width > 0 && window->wl.size_before_maximize.height > 0) {
width = window->wl.size_before_maximize.width;
height = window->wl.size_before_maximize.height;
window->wl.size_before_maximize.width = 0;
window->wl.size_before_maximize.height = 0;
}
window->wl.maximized = maximized;
if (width != 0 && height != 0) if (width != 0 && height != 0)
{ {
@ -538,6 +550,7 @@ static bool createXdgSurface(_GLFWwindow* window)
} }
else if (window->wl.maximized) else if (window->wl.maximized)
{ {
window->wl.maximized = false;
xdg_toplevel_set_maximized(window->wl.xdg.toplevel); xdg_toplevel_set_maximized(window->wl.xdg.toplevel);
setIdleInhibitor(window, false); setIdleInhibitor(window, false);
setXdgDecorations(window); setXdgDecorations(window);
@ -950,7 +963,6 @@ void _glfwPlatformRestoreWindow(_GLFWwindow* window)
// minimized, so there is nothing to do in this case. // minimized, so there is nothing to do in this case.
} }
_glfwInputWindowMonitor(window, NULL); _glfwInputWindowMonitor(window, NULL);
window->wl.maximized = false;
} }
void _glfwPlatformMaximizeWindow(_GLFWwindow* window) void _glfwPlatformMaximizeWindow(_GLFWwindow* window)
@ -959,7 +971,6 @@ void _glfwPlatformMaximizeWindow(_GLFWwindow* window)
{ {
xdg_toplevel_set_maximized(window->wl.xdg.toplevel); xdg_toplevel_set_maximized(window->wl.xdg.toplevel);
} }
window->wl.maximized = true;
} }
void _glfwPlatformShowWindow(_GLFWwindow* window) void _glfwPlatformShowWindow(_GLFWwindow* window)