Wayland: Decide final window size in one place

This commit is contained in:
Camilla Löwy 2024-02-15 17:24:39 +01:00
parent 2b3f919b60
commit a650c69cff

View File

@ -338,8 +338,14 @@ static void resizeFramebuffer(_GLFWwindow* window)
_glfwInputFramebufferSize(window, window->wl.fbWidth, window->wl.fbHeight); _glfwInputFramebufferSize(window, window->wl.fbWidth, window->wl.fbHeight);
} }
static void resizeWindow(_GLFWwindow* window) static GLFWbool resizeWindow(_GLFWwindow* window, int width, int height)
{ {
if (width == window->wl.width && height == window->wl.height)
return GLFW_FALSE;
window->wl.width = width;
window->wl.height = height;
resizeFramebuffer(window); resizeFramebuffer(window);
if (window->wl.scalingViewport) if (window->wl.scalingViewport)
@ -375,6 +381,8 @@ static void resizeWindow(_GLFWwindow* window)
GLFW_BORDER_SIZE); GLFW_BORDER_SIZE);
wl_surface_commit(window->wl.fallback.bottom.surface); wl_surface_commit(window->wl.fallback.bottom.surface);
} }
return GLFW_TRUE;
} }
void _glfwUpdateBufferScaleFromOutputsWayland(_GLFWwindow* window) void _glfwUpdateBufferScaleFromOutputsWayland(_GLFWwindow* window)
@ -651,13 +659,9 @@ static void xdgSurfaceHandleConfigure(void* userData,
} }
} }
if (width != window->wl.width || height != window->wl.height) if (resizeWindow(window, width, height))
{ {
window->wl.width = width; _glfwInputWindowSize(window, window->wl.width, window->wl.height);
window->wl.height = height;
resizeWindow(window);
_glfwInputWindowSize(window, width, height);
if (window->wl.visible) if (window->wl.visible)
_glfwInputWindowDamage(window); _glfwInputWindowDamage(window);
@ -752,13 +756,9 @@ void libdecorFrameHandleConfigure(struct libdecor_frame* frame,
damaged = GLFW_TRUE; damaged = GLFW_TRUE;
} }
if (width != window->wl.width || height != window->wl.height) if (resizeWindow(window, width, height))
{ {
window->wl.width = width; _glfwInputWindowSize(window, window->wl.width, window->wl.height);
window->wl.height = height;
resizeWindow(window);
_glfwInputWindowSize(window, width, height);
damaged = GLFW_TRUE; damaged = GLFW_TRUE;
} }
@ -2250,13 +2250,13 @@ void _glfwSetWindowSizeWayland(_GLFWwindow* window, int width, int height)
} }
else else
{ {
window->wl.width = width; if (!resizeWindow(window, width, height))
window->wl.height = height; return;
resizeWindow(window);
if (window->wl.libdecor.frame) if (window->wl.libdecor.frame)
{ {
struct libdecor_state* frameState = libdecor_state_new(width, height); struct libdecor_state* frameState =
libdecor_state_new(window->wl.width, window->wl.height);
libdecor_frame_commit(window->wl.libdecor.frame, frameState, NULL); libdecor_frame_commit(window->wl.libdecor.frame, frameState, NULL);
libdecor_state_free(frameState); libdecor_state_free(frameState);
} }
@ -2330,20 +2330,17 @@ void _glfwSetWindowAspectRatioWayland(_GLFWwindow* window, int numer, int denom)
width *= targetRatio; width *= targetRatio;
} }
if (width != window->wl.width || height != window->wl.height) if (resizeWindow(window, width, height))
{ {
window->wl.width = width;
window->wl.height = height;
resizeWindow(window);
if (window->wl.libdecor.frame) if (window->wl.libdecor.frame)
{ {
struct libdecor_state* frameState = libdecor_state_new(width, height); struct libdecor_state* frameState =
libdecor_state_new(window->wl.width, window->wl.height);
libdecor_frame_commit(window->wl.libdecor.frame, frameState, NULL); libdecor_frame_commit(window->wl.libdecor.frame, frameState, NULL);
libdecor_state_free(frameState); libdecor_state_free(frameState);
} }
_glfwInputWindowSize(window, width, height); _glfwInputWindowSize(window, window->wl.width, window->wl.height);
if (window->wl.visible) if (window->wl.visible)
_glfwInputWindowDamage(window); _glfwInputWindowDamage(window);