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 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
4
glfw/wl_platform.h
vendored
@ -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
15
glfw/wl_window.c
vendored
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user