diff options
| author | srdusr <[email protected]> | 2024-11-26 23:16:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2024-11-26 23:16:00 +0200 |
| commit | 87f5c04b2593dc49409644e69e7962b73d26b9d8 (patch) | |
| tree | 5a1da319c9f5e81489af44a4a576eada595b9a22 /crates/core/src/manager/winops.rs | |
| parent | fe92f6e6b8ab680c9603cc6bcf16c98555c378ae (diff) | |
| download | srdwm-87f5c04b2593dc49409644e69e7962b73d26b9d8.tar.gz srdwm-87f5c04b2593dc49409644e69e7962b73d26b9d8.zip | |
Add Monitor::maximize_geometry: maximize covers a dock, still stops at a top bar
toggle_maximize previously targeted full_geometry outright (past every
reserved zone), on an earlier request specifically about the dock -
which also silently let it extend behind a top bar's zone, reported
back as its own bug once live-tested. maximize_geometry is a third
rect distinct from geometry (every zone) and full_geometry (none):
full_geometry with only a top-anchored bar's exclusive zone subtracted
back out. New test locks in dock-covered/bar-respected together.
Diffstat (limited to 'crates/core/src/manager/winops.rs')
| -rw-r--r-- | crates/core/src/manager/winops.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/crates/core/src/manager/winops.rs b/crates/core/src/manager/winops.rs index e656298..6f4d53e 100644 --- a/crates/core/src/manager/winops.rs +++ b/crates/core/src/manager/winops.rs @@ -93,7 +93,19 @@ impl WindowManager { } pub fn toggle_maximize(&mut self, id: WindowId) { - let monitor_geom = self.windows.get(&id).and_then(|w| self.monitor_for(w.monitor)).map(|m| m.geometry); + // `maximize_geometry`, not `geometry` or `full_geometry`: maximize + // covers the whole monitor past a dock's reserved zone, same as + // `toggle_fullscreen` - but still stops at a top bar's, unlike + // fullscreen. Previously targeted `full_geometry` outright (past + // both), on the user's own request specifically about the dock; + // that also silently pulled maximize past the top bar, which + // wasn't part of that request and was reported back as its own + // bug once live-tested. See `Monitor::maximize_geometry`'s own doc + // comment for the exact rect this now is. The only remaining + // difference from fullscreen is `decorated` (maximize keeps + // whatever decoration state the window already had; fullscreen + // forces it off). + let monitor_geom = self.windows.get(&id).and_then(|w| self.monitor_for(w.monitor)).map(|m| m.maximize_geometry); let animations_enabled = self.animations_enabled; let Some(w) = self.windows.get_mut(&id) else { return }; let from = w.geometry; |