summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dotfiles/hyprland/.config/hypr/hyprland.conf1
-rwxr-xr-xdotfiles/hyprland/.local/bin/hypr-refocus-scratchpad24
2 files changed, 25 insertions, 0 deletions
diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf
index 55a7c35..f258353 100644
--- a/dotfiles/hyprland/.config/hypr/hyprland.conf
+++ b/dotfiles/hyprland/.config/hypr/hyprland.conf
@@ -33,6 +33,7 @@ exec-once = mpd
# Pyprland (scratchpads, magnify, etc.)
exec-once = pypr
+exec-once = hypr-refocus-scratchpad
# Apps that can start later (sleep ensures waybar tray is registered)
exec-once = sleep 1 && signal-desktop --start-in-tray --ozone-platform=wayland
diff --git a/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad b/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad
new file mode 100755
index 0000000..7a4bb38
--- /dev/null
+++ b/dotfiles/hyprland/.local/bin/hypr-refocus-scratchpad
@@ -0,0 +1,24 @@
+#!/bin/bash
+# Refocus visible scratchpad after a window closes.
+# Without this, closing a regular window while a scratchpad is visible
+# leaves focus on the regular workspace instead of the scratchpad.
+
+SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock"
+
+socat -U - "UNIX-CONNECT:$SOCKET" | while read -r line; do
+ if [[ "$line" == closewindow* ]]; then
+ # Check if a special workspace is active on the current monitor
+ special=$(hyprctl monitors -j | python3 -c "
+import json, sys
+for m in json.load(sys.stdin):
+ sw = m.get('specialWorkspace', {})
+ if sw.get('id', 0) != 0:
+ print(sw['name'])
+ break
+" 2>/dev/null)
+ if [[ -n "$special" ]]; then
+ # Focus the top window on the special workspace
+ hyprctl dispatch focuswindow "workspace:$special" &>/dev/null
+ fi
+ fi
+done