From 87f5c04b2593dc49409644e69e7962b73d26b9d8 Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Tue, 26 Nov 2024 23:16:00 +0200 Subject: 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. --- crates/core/src/manager/winops.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'crates/core/src/manager/winops.rs') 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; -- cgit v1.2.3