feat: minimize and restore windows the way a desktop does

The scratchpad technically minimized Chrome, but sway hands scratchpad
windows back floating, so restoring gave a draggable window instead of
the maximized one the user put away. Park windows on a hidden workspace
as ordinary tiled containers instead, and move them back to the visible
workspace on restore.

classroom-window carries the whole state machine, so the dock buttons
and Super+M share one implementation:

  not running  -> launch
  unfocused    -> focus
  focused      -> minimize
  minimized    -> restore, tiled and maximized

Fullscreen is dropped on the way out, since a container parked while
still fullscreen keeps drawing over everything else. floating disable on
the way back also rescues windows left floating by the old scratchpad
path.

Super+Shift+M restores the newest minimized window, so nothing can get
stranded on the hidden workspace.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
ekklesia
2026-09-04 17:06:43 -05:00
co-authored by Claude Opus 5
parent d05f5bf909
commit af79aba21b
5 changed files with 366 additions and 41 deletions
+7 -2
View File
@@ -14,5 +14,10 @@ exec --no-startup-id /usr/local/bin/classroom-dock
include /etc/sway/config.d/*
# Minimize focused window to scratchpad
bindsym $mod+m move container to workspace __ekklesia_hidden
# Minimize and restore.
#
# classroom-window parks the window on a hidden workspace as an ordinary
# tiled container, so restoring brings it back maximised instead of as a
# floating, draggable window the way the scratchpad did.
bindsym $mod+m exec /usr/local/bin/classroom-window minimize
bindsym $mod+Shift+m exec /usr/local/bin/classroom-window restore-last