From 06575b00ed7c270b325d14e689452b056017c4f8 Mon Sep 17 00:00:00 2001 From: dawser Date: Mon, 27 Apr 2026 17:37:51 +0200 Subject: [PATCH 1/2] xdg_shell: handle_commit() could receive new geometry of size outside of the toplevel set boundaries (#9130) --- sway/desktop/xdg_shell.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c index 7217e1369..3519df823 100644 --- a/sway/desktop/xdg_shell.c +++ b/sway/desktop/xdg_shell.c @@ -311,6 +311,24 @@ static void handle_commit(struct wl_listener *listener, void *data) { } struct wlr_box *new_geo = &xdg_surface->geometry; + + if (view->wlr_xdg_toplevel->current.min_width > 0 && + new_geo->width < view->wlr_xdg_toplevel->current.min_width) { + new_geo->width = view->wlr_xdg_toplevel->current.min_width; + } + if (view->wlr_xdg_toplevel->current.min_height > 0 && + new_geo->height < view->wlr_xdg_toplevel->current.min_height) { + new_geo->height = view->wlr_xdg_toplevel->current.min_height; + } + if (view->wlr_xdg_toplevel->current.max_width > 0 && + new_geo->width > view->wlr_xdg_toplevel->current.max_width) { + new_geo->width = view->wlr_xdg_toplevel->current.max_width; + } + if (view->wlr_xdg_toplevel->current.max_height > 0 && + new_geo->height < view->wlr_xdg_toplevel->current.max_height) { + new_geo->height = view->wlr_xdg_toplevel->current.max_height; + } + bool new_size = new_geo->width != view->geometry.width || new_geo->height != view->geometry.height || new_geo->x != view->geometry.x || From 1706318afc0d47151eac3a057d4c514929b57aa1 Mon Sep 17 00:00:00 2001 From: dawser Date: Tue, 28 Apr 2026 11:13:41 +0200 Subject: [PATCH 2/2] Correct typo --- sway/desktop/xdg_shell.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c index 3519df823..30f227202 100644 --- a/sway/desktop/xdg_shell.c +++ b/sway/desktop/xdg_shell.c @@ -325,7 +325,7 @@ static void handle_commit(struct wl_listener *listener, void *data) { new_geo->width = view->wlr_xdg_toplevel->current.max_width; } if (view->wlr_xdg_toplevel->current.max_height > 0 && - new_geo->height < view->wlr_xdg_toplevel->current.max_height) { + new_geo->height > view->wlr_xdg_toplevel->current.max_height) { new_geo->height = view->wlr_xdg_toplevel->current.max_height; }