srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates/wayland/src/winit
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2025-12-01 19:28:00 +0200
committersrdusr <[email protected]>2025-12-01 19:28:00 +0200
commit9e88d3e3f86a1248b72fdb9bab59d9936a3323a6 (patch)
tree4e96d180377b7b450fc60d236ceb5090d19efa0e /crates/wayland/src/winit
parentd48dfec46a6502d23648053916c2af91ee2a6f2e (diff)
downloadsrdwm-9e88d3e3f86a1248b72fdb9bab59d9936a3323a6.tar.gz
srdwm-9e88d3e3f86a1248b72fdb9bab59d9936a3323a6.zip
Let a new window pick its own size instead of forcing a guessed placeholder
Root-caused "windows spawn small and square, not remembering placement or size": new_managed_window hardcoded a fresh toplevel's geometry to 800x632 before the client had said anything about its own preferred size, and sync_geometry forced that guess onto the client's very first xdg_toplevel::configure unconditionally. Per xdg-shell, size: None on that first configure is how every mainstream compositor lets a client pick its own natural size instead; this one never did, so every app converged on the same placeholder rectangle regardless of what it would have chosen. Window::size_is_provisional marks a size that really was just the guess (not a remembered geometry, a rule's explicit geometry action, or a maximize/phone-mode fill, none of which are guesses). sync_geometry sends size: None for such a window's first configure; a new adopt_provisional_size, called from the commit handler, adopts the client's own real first size into Window::geometry the moment it commits one, clamping only position so a bigger-than-guessed window can't hang off its monitor's edge. Live-verified in a nested compositor: a zenity dialog now renders at its own compact natural size instead of being stretched to the old guess.
Diffstat (limited to 'crates/wayland/src/winit')
-rw-r--r--crates/wayland/src/winit/connect.rs1
1 files changed, 1 insertions, 0 deletions
diff --git a/crates/wayland/src/winit/connect.rs b/crates/wayland/src/winit/connect.rs
index 39eda5a..4c6954b 100644
--- a/crates/wayland/src/winit/connect.rs
+++ b/crates/wayland/src/winit/connect.rs
@@ -181,6 +181,7 @@ impl WaylandPlatform {
border_side_buffers: HashMap::new(),
color_filter_buffers: HashMap::new(),
last_synced_size: HashMap::new(),
+ provisional_size: HashSet::new(),
pending_size_configure: HashMap::new(),
pending: pending.clone(),
bound_keys: Rc::new(bound_keys.iter().cloned().collect()),