This commit is contained in:
aditiv 2025-08-21 09:42:51 +05:30 committed by GitHub
commit c28e8ae689
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1016,48 +1016,57 @@ static GLFWbool createLibdecorFrame(_GLFWwindow* window)
static void updateXdgSizeLimits(_GLFWwindow* window) static void updateXdgSizeLimits(_GLFWwindow* window)
{ {
int minwidth, minheight, maxwidth, maxheight; int minwidth = 0, minheight = 0;
int maxwidth = 0, maxheight = 0;
GLFWbool setMin = GLFW_FALSE, setMax = GLFW_FALSE;
if (window->resizable) if (window->resizable)
{ {
if (window->minwidth == GLFW_DONT_CARE || window->minheight == GLFW_DONT_CARE) if (window->minwidth != GLFW_DONT_CARE && window->minheight != GLFW_DONT_CARE)
minwidth = minheight = 0;
else
{ {
minwidth = window->minwidth; minwidth = window->minwidth;
minheight = window->minheight; minheight = window->minheight;
setMin = GLFW_TRUE;
if (window->wl.fallback.decorations)
{
minwidth += GLFW_BORDER_SIZE * 2;
minheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE;
}
} }
if (window->maxwidth == GLFW_DONT_CARE || window->maxheight == GLFW_DONT_CARE) if (window->maxwidth != GLFW_DONT_CARE && window->maxheight != GLFW_DONT_CARE)
maxwidth = maxheight = 0;
else
{ {
maxwidth = window->maxwidth; maxwidth = window->maxwidth;
maxheight = window->maxheight; maxheight = window->maxheight;
setMax = GLFW_TRUE;
}
if (window->wl.fallback.decorations) if (window->wl.fallback.decorations)
{
if (setMin)
{ {
maxwidth += GLFW_BORDER_SIZE * 2; minwidth += GLFW_BORDER_SIZE * 2;
minheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE;
}
if (setMax)
{
maxwidth += GLFW_BORDER_SIZE * 2;
maxheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE; maxheight += GLFW_CAPTION_HEIGHT + GLFW_BORDER_SIZE;
} }
} }
} }
else else
{ {
// Non-resizable: lock to current size
minwidth = maxwidth = window->wl.width; minwidth = maxwidth = window->wl.width;
minheight = maxheight = window->wl.height; minheight = maxheight = window->wl.height;
setMin = setMax = GLFW_TRUE;
} }
xdg_toplevel_set_min_size(window->wl.xdg.toplevel, minwidth, minheight); if (setMin)
xdg_toplevel_set_max_size(window->wl.xdg.toplevel, maxwidth, maxheight); xdg_toplevel_set_min_size(window->wl.xdg.toplevel, minwidth, minheight);
if (setMax)
xdg_toplevel_set_max_size(window->wl.xdg.toplevel, maxwidth, maxheight);
} }
static GLFWbool createXdgShellObjects(_GLFWwindow* window) static GLFWbool createXdgShellObjects(_GLFWwindow* window)
{ {
window->wl.xdg.surface = xdg_wm_base_get_xdg_surface(_glfw.wl.wmBase, window->wl.xdg.surface = xdg_wm_base_get_xdg_surface(_glfw.wl.wmBase,