AwesomeFiles/config/awesome/module/savefloats.lua
VincentKnightTesting 0cc6886341 updated
2022-04-25 09:51:27 -05:00

59 lines
1.2 KiB
Lua

local awful = require("awful")
local function rel(screen, win)
return {
x = (win.x - screen.x) / screen.width,
y = (win.y - screen.y) / screen.height,
width = win.width / screen.width,
aspect = win.height / win.width,
}
end
local function unrel(s, rel)
return rel
and {
x = s.x + s.width * rel.x,
y = s.y + s.height * rel.y,
width = s.width * rel.width,
height = rel.aspect * s.width * rel.width,
}
end
local stored = {}
local function forget(c)
stored[c] = nil
end
local floating = awful.layout.suit.floating
function remember(c)
if floating == awful.layout.get(c.screen) or c.floating then
stored[c.window] = rel(c.screen.geometry, c:geometry())
end
end
function restore(c)
local s = stored[c.window]
if s then
c:geometry(unrel(c.screen.geometry, stored[c.window]))
return true
else
return false
end
end
client.connect_signal("manage", remember)
client.connect_signal("property::geometry", remember)
client.connect_signal("unmanage", forget)
tag.connect_signal("property::layout", function(t)
if floating == awful.layout.get(t.screen) then
for _, c in ipairs(t:clients()) do
c:geometry(unrel(t.screen.geometry, stored[c.window]))
end
end
end)
return restore