summaryrefslogtreecommitdiff
path: root/scroll
diff options
context:
space:
mode:
authorZachIR <zachir@librem.one>2025-07-30 02:44:56 -0500
committerZachIR <zachir@librem.one>2025-07-30 02:44:56 -0500
commit5dd6e29077d22eab9a78425a1a9e34a22adaf19c (patch)
tree9c02d294607e00bf3d68cd40fd4e3130387db445 /scroll
parentf6af3222522415f73d7bfb69daef62b81e83081c (diff)
parentec330589a41b423950fe49449248edb546961383 (diff)
Merge branch 'master' into car
Diffstat (limited to 'scroll')
-rw-r--r--scroll/config7
-rw-r--r--scroll/scripts/maximize_when_only.lua38
2 files changed, 44 insertions, 1 deletions
diff --git a/scroll/config b/scroll/config
index f5f8ce5..849eb1b 100644
--- a/scroll/config
+++ b/scroll/config
@@ -100,6 +100,8 @@ layout_heights [0.33333333 0.5 0.666666667 1.0]
fullscreen_movefocus true
+focus_follows_mouse yes
+
mouse_warping none
# Animations
@@ -511,7 +513,7 @@ bindsym $mod+Alt+comma exec dmount
# Launch dmenuumount dmenu umount script
bindsym $mod+Alt+period exec dmenuumount
-focus_wrapping no
+focus_wrapping yes
bindgesture swipe:4:right workspace next
bindgesture swipe:4:left workspace prev
@@ -521,6 +523,9 @@ bindgesture swipe:4:up scale_workspace overview
# Enable window swallowing (of mpv specifically)
lua $scripts/swallow.lua
+# Enable maximize when only
+lua $scripts/maximize_when_only.lua
+
# Scratchpads
for_window [app_id="sphtop"] move scratchpad
for_window [app_id="sphtop"] scratchpad show
diff --git a/scroll/scripts/maximize_when_only.lua b/scroll/scripts/maximize_when_only.lua
new file mode 100644
index 0000000..a047180
--- /dev/null
+++ b/scroll/scripts/maximize_when_only.lua
@@ -0,0 +1,38 @@
+local args, state = ...
+
+local maximized_containers = scroll.state_get_value(state, "maximized_containers") or {}
+
+local debug_notify = function(msg)
+ scroll.command(nil, "exec notify-send " .. msg)
+end
+
+local maximize_container = function(container, workspace)
+ local wf = scroll.container_get_width_fraction(container)
+ local hf = scroll.container_get_height_fraction(container)
+ maximized_containers[workspace] = { container = container, wf = wf, hf = hf, workspace = workspace }
+ scroll.state_set_value(state, "maximized_containers", maximized_containers)
+ scroll.command(container, "set_size h 1.0")
+ scroll.command(container, "set_size v 1.0")
+end
+
+local maximize_when_only = function()
+ local focused_workspace = scroll.focused_workspace()
+ local containers = scroll.workspace_get_tiling(focused_workspace)
+ local focused_container = scroll.focused_container()
+ local maximized_container = maximized_containers[focused_workspace]
+ if #containers == 1 then
+ if not maximized_container or (maximized_container and maximized_container.container ~= focused_container) then
+ -- debug_notify("Maximizing")
+ maximize_container(focused_container, focused_workspace)
+ end
+ elseif #containers > 1 and maximized_container then
+ -- debug_notify("Shrinking")
+ scroll.command(maximized_container.container, "set_size h " .. maximized_container.wf)
+ scroll.command(maximized_container.container, "set_size v " .. maximized_container.hf)
+ maximized_containers[focused_workspace] = nil
+ scroll.state_set_value(state, "maximized_containers", maximized_containers)
+ end
+ scroll.command(focused_container, "nop")
+end
+
+scroll.add_callback("view_focus", maximize_when_only, nil)