summaryrefslogtreecommitdiff
path: root/scroll/scripts/maximize_when_only.lua
blob: a0471802d2da122dcfbe1c9106aaa882dc5d326e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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)