mirror of
https://github.com/swaywm/sway.git
synced 2026-04-16 08:21:30 -04:00
xdg_shell: don't overwrite for_window directive geometry
When a floating container is resized (e.g., via for_window rules or internal transactions), a race condition occurs if the client commits a buffer with its old geometry before processing the new configure event. Sway currently accepts these stale dimensions and calls view_update_size, causing the container to snap back to the client's previous size and overwriting the compositor's intended geometry. This patch prevents the overwrite by checking two conditions: 1. !node.instruction: Ensures we aren't mid-transaction. 2. !pending_configures: Compares current.configure_serial against scheduled_serial to ensure the client has acknowledged the latest requested dimensions before we allow it to dictate a resize.
This commit is contained in:
parent
e51f9d7183
commit
aa1ec44e27
1 changed files with 2 additions and 1 deletions
|
|
@ -321,7 +321,8 @@ static void handle_commit(struct wl_listener *listener, void *data) {
|
|||
// containers, we resize the container to match. For tiling containers,
|
||||
// we only recenter the surface.
|
||||
memcpy(&view->geometry, new_geo, sizeof(struct wlr_box));
|
||||
if (container_is_floating(view->container)) {
|
||||
bool pending_configures = xdg_surface->current.configure_serial < xdg_surface->scheduled_serial;
|
||||
if (container_is_floating(view->container) && !view->container->node.instruction && !pending_configures) {
|
||||
view_update_size(view);
|
||||
// Only set the toplevel size the current container actually has a size.
|
||||
if (view->container->current.width) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue