srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates/core/src/manager/focus.rs
diff options
context:
space:
mode:
authorsrdusr <[email protected]>2025-02-03 20:15:00 +0200
committersrdusr <[email protected]>2025-02-03 20:15:00 +0200
commitdae1617a8b7ee7c40beb452046c5ec84e69931ee (patch)
treedd1d00855571c75e1238dbfc823567cded60fd20 /crates/core/src/manager/focus.rs
parent6c1dfe191843ad56aaa0381e5645ad9e74c38b8b (diff)
downloadsrdwm-dae1617a8b7ee7c40beb452046c5ec84e69931ee.tar.gz
srdwm-dae1617a8b7ee7c40beb452046c5ec84e69931ee.zip
Fix focusing a minimized window not restoring it
focus_window marked the target focused without clearing minimized, so a dock icon's Activate (or the plain "focus" IPC command) on a minimized window left it focused but still excluded from visible_windows/rendering - reads exactly like the click did nothing, since the window never actually reappears. Every focus_window caller gets the restore for free now. Added a Super+n keybind for minimize too, since none existed at all before this.
Diffstat (limited to 'crates/core/src/manager/focus.rs')
-rw-r--r--crates/core/src/manager/focus.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/crates/core/src/manager/focus.rs b/crates/core/src/manager/focus.rs
index 6dae20a..f1473cf 100644
--- a/crates/core/src/manager/focus.rs
+++ b/crates/core/src/manager/focus.rs
@@ -45,6 +45,22 @@ impl WindowManager {
if workspace != self.current_workspace {
self.switch_workspace(workspace);
}
+ // A minimized window's dock icon (or Alt-Tab entry, or any
+ // other `focus_window` caller) has to un-minimize it too, not
+ // just focus it - without this, clicking a minimized app's
+ // dock icon left it focused (keyboard input, `srd clients`'
+ // own `focused: true`) while still `minimized: true`, still
+ // excluded from `visible_windows`/rendering. Reads exactly like
+ // the click did nothing, since the one visible thing "focused"
+ // usually implies (the window coming to the front) never
+ // happens. Every desktop's taskbar/dock has this behavior for
+ // free; this compositor's `Activate` (zwlr-foreign-toplevel)
+ // and `"focus"` IPC handlers both route through here already,
+ // so they get it too rather than each needing their own
+ // explicit restore call.
+ if let Some(w) = self.windows.get_mut(&id) {
+ w.minimized = false;
+ }
self.focused = Some(id);
self.raise_window(id);
}