-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlayout-kiosk.lua
More file actions
96 lines (76 loc) · 2.61 KB
/
Copy pathlayout-kiosk.lua
File metadata and controls
96 lines (76 loc) · 2.61 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
-- plugins/layout-kiosk.lua
-- Kiosk layout plugin - single maximized window
local kiosk = {
name = "kiosk",
}
function kiosk:init(monitor_state)
monitor_state.kiosk = {
current_window = nil,
}
end
function kiosk:shutdown(monitor_state)
monitor_state.kiosk = nil
end
function kiosk:on_window_add(monitor_state, surface)
-- Hide previous window if any
if monitor_state.kiosk.current_window then
local prev = monitor_state.kiosk.current_window
if prev.set_enabled then
prev:set_enabled(false)
end
end
-- Show and maximize new window
monitor_state.kiosk.current_window = surface
self:position_window(monitor_state, surface)
end
function kiosk:on_window_remove(monitor_state, surface)
if monitor_state.kiosk.current_window == surface then
monitor_state.kiosk.current_window = nil
-- Show the most recently active remaining window.
for i = #monitor_state.windows, 1, -1 do
local w = monitor_state.windows[i]
if w ~= surface and w.set_enabled then
w:set_enabled(true)
monitor_state.kiosk.current_window = w
self:position_window(monitor_state, w)
break
end
end
end
end
function kiosk:position_window(monitor_state, surface)
if not surface or not surface.scene_node or not surface:scene_node() then return end
local output_service = require("compositor.services.output")
local width, height = output_service:get_output_dimensions(monitor_state.output)
-- Position at origin
surface:set_position(0, 0)
-- Resize to fill
surface:set_size(width, height)
end
function kiosk:get_window_at(monitor_state, x, y)
return monitor_state.kiosk.current_window
end
-- No-op for kiosk (no moves)
function kiosk:begin_move() return false end
function kiosk:update_move() end
function kiosk:end_move() end
-- No-op for kiosk (no resize)
function kiosk:begin_resize() return false end
function kiosk:update_resize() end
function kiosk:end_resize() end
--------------------------------------------------------------------------------
-- Plugin wrapper
--------------------------------------------------------------------------------
local plugin = {
name = "layout-kiosk",
}
function plugin:mount(config)
local layout_service = require("compositor.services.layout")
layout_service:register("kiosk", kiosk)
return { layout = kiosk }
end
function plugin:unmount()
local layout_service = require("compositor.services.layout")
layout_service:unregister("kiosk")
end
return plugin