From dae1617a8b7ee7c40beb452046c5ec84e69931ee Mon Sep 17 00:00:00 2001 From: srdusr <99972264+srdusr@users.noreply.github.com> Date: Mon, 3 Feb 2025 20:15:00 +0200 Subject: 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. --- crates/core/src/manager/focus.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'crates/core/src/manager/focus.rs') 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); } -- cgit v1.2.3