59 lines
1.7 KiB
Lua
59 lines
1.7 KiB
Lua
-------------------------------------------------
|
|
-- @author Gregor Best <farhaven@googlemail.com>
|
|
-- @copyright 2009 Gregor Best
|
|
-- @release @AWESOME_VERSION@
|
|
-------------------------------------------------
|
|
|
|
-- Grab environment
|
|
local ipairs = ipairs
|
|
local type = type
|
|
local table = table
|
|
local math = math
|
|
local setmetatable = setmetatable
|
|
local util = require("awful.util")
|
|
|
|
--- Simple default layout, emulating the fallback C layout
|
|
module("awful.widget.layout.default")
|
|
|
|
local function default(bounds, widgets, screen)
|
|
local geometries = {
|
|
free = { x = 0, y = 0, width = 0, height = bounds.height }
|
|
}
|
|
|
|
local width = 0
|
|
|
|
local keys = util.table.keys_filter(widgets, "table", "widget")
|
|
|
|
for _, k in ipairs(keys) do
|
|
local v = widgets[k]
|
|
if type(v) == "table" then
|
|
local layout = v.layout or default
|
|
local nbounds = util.table.clone(bounds)
|
|
local g = layout(nbounds, v, screen)
|
|
for _, w in ipairs(g) do
|
|
table.insert(geometries, w)
|
|
end
|
|
else
|
|
if v.visible then
|
|
local e = v:extents(screen)
|
|
e.x = 0
|
|
e.y = 0
|
|
e.width = math.min(e.width, bounds.width)
|
|
e.height = bounds.height
|
|
width = math.max(e.width, width)
|
|
|
|
table.insert(geometries, e)
|
|
else
|
|
table.insert(geometries, { x = 0, y = 0, width = 0, height = 0 })
|
|
end
|
|
end
|
|
end
|
|
|
|
geometries.free.width = bounds.width - width
|
|
geometries.free.x = width
|
|
|
|
return geometries
|
|
end
|
|
|
|
setmetatable(_M, { __call = function(_, ...) return default(...) end })
|