Wayland: Fix un-maximizing a window not restoring its size to what it was before being maximized
This commit is contained in:
parent
d0f34e99a6
commit
7e78f30739
@ -151,6 +151,9 @@ To update |kitty|, :doc:`follow the instructions <binary>`.
|
||||
|
||||
- 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
|
||||
title (:iss:`3284`)
|
||||
|
||||
|
||||
4
glfw/wl_platform.h
vendored
4
glfw/wl_platform.h
vendored
@ -185,6 +185,10 @@ typedef struct _GLFWwindowWayland
|
||||
struct wl_callback *current_wl_callback;
|
||||
} frameCallbackData;
|
||||
|
||||
struct {
|
||||
int32_t width, height;
|
||||
} size_before_maximize;
|
||||
|
||||
} _GLFWwindowWayland;
|
||||
|
||||
typedef enum _GLFWWaylandOfferType
|
||||
|
||||
15
glfw/wl_window.c
vendored
15
glfw/wl_window.c
vendored
@ -425,6 +425,18 @@ static void xdgToplevelHandleConfigure(void* data,
|
||||
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)
|
||||
{
|
||||
@ -538,6 +550,7 @@ static bool createXdgSurface(_GLFWwindow* window)
|
||||
}
|
||||
else if (window->wl.maximized)
|
||||
{
|
||||
window->wl.maximized = false;
|
||||
xdg_toplevel_set_maximized(window->wl.xdg.toplevel);
|
||||
setIdleInhibitor(window, false);
|
||||
setXdgDecorations(window);
|
||||
@ -950,7 +963,6 @@ void _glfwPlatformRestoreWindow(_GLFWwindow* window)
|
||||
// minimized, so there is nothing to do in this case.
|
||||
}
|
||||
_glfwInputWindowMonitor(window, NULL);
|
||||
window->wl.maximized = false;
|
||||
}
|
||||
|
||||
void _glfwPlatformMaximizeWindow(_GLFWwindow* window)
|
||||
@ -959,7 +971,6 @@ void _glfwPlatformMaximizeWindow(_GLFWwindow* window)
|
||||
{
|
||||
xdg_toplevel_set_maximized(window->wl.xdg.toplevel);
|
||||
}
|
||||
window->wl.maximized = true;
|
||||
}
|
||||
|
||||
void _glfwPlatformShowWindow(_GLFWwindow* window)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user