diff options
| author | srdusr <[email protected]> | 2025-11-04 11:55:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-11-04 11:55:00 +0200 |
| commit | a8991f65602abc5ecee740c443c58fa96ecd15e1 (patch) | |
| tree | 31c9d1e15915b6e3757b293140e6ee47b6d28008 /crates/wayland/src/xwayland.rs | |
| parent | a4710d792a1b16698fc30b9e97e6c08c82129d6d (diff) | |
| download | srdwm-a8991f65602abc5ecee740c443c58fa96ecd15e1.tar.gz srdwm-a8991f65602abc5ecee740c443c58fa96ecd15e1.zip | |
Fix window memory never saving on close, and split-screen icon/primary bugs
Screenshotted the just-split display on request rather than guessing --
it showed why windows never seem to remember placement/size, plus two
real split-screen bugs.
Window memory (WindowManager::remembered_geometry) was correctly wired
on the read side, but the only writes came from end_drag/end_resize in
dragresize.rs - a real drag or resize. A window the user opens, looks
at, and closes without ever touching its edges had nothing recorded, so
reopening it always fell back to a fresh cascade placement, for what is
probably most ordinary window lifecycles. remove_window now also
snapshots geometry (same app_id-non-empty gate the drag/resize sites
use), persisted at both of its wayland-side call sites the same way the
drag/resize-release site already does.
desktop_icon_origins mirrored the full icon set onto every Monitor entry
when general.desktop_icons_all_monitors is on - which, after a
srd.monitor.split, is one entry per split part of the same physical
screen, not one per real monitor. Extracted into a separately-tested
icon_origins_for that collapses split parts of the same connector back
to one origin, keeping a genuinely separate monitor's own origin intact.
Found while fixing that: every split part also reported primary: true
(computed from the connector's name, which doesn't vary per part) --
fixed by gating on part == 0 too.
Diffstat (limited to 'crates/wayland/src/xwayland.rs')
| -rw-r--r-- | crates/wayland/src/xwayland.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/crates/wayland/src/xwayland.rs b/crates/wayland/src/xwayland.rs index 5b537d2..9fba4e5 100644 --- a/crates/wayland/src/xwayland.rs +++ b/crates/wayland/src/xwayland.rs @@ -759,6 +759,10 @@ impl CompState { self.close_snap_flyout(); } self.wm.borrow_mut().remove_window(id); + // Same reason as `state/lifecycle.rs`'s native `remove_window`: + // persist whatever `remove_window` just snapshotted into + // `remembered_geometry`, not just a manual drag/resize release. + crate::window_memory::save_all(self.wm.borrow().all_remembered_geometry()); self.pending.borrow_mut().push(CoreEvent::WindowDestroyed(id)); crate::foreign_toplevel::window_closed(self, id); // Same reason as the equivalent call in `state/lifecycle.rs`'s native |