diff --git a/lib/awful/layout/init.lua b/lib/awful/layout/init.lua index 93315a439..e45473933 100644 --- a/lib/awful/layout/init.lua +++ b/lib/awful/layout/init.lua @@ -21,6 +21,7 @@ local client = require("awful.client") local ascreen = require("awful.screen") local timer = require("gears.timer") local gmath = require("gears.math") +local protected_call = require("gears.protected_call") local function get_screen(s) return s and capi.screen[s] @@ -197,19 +198,22 @@ function layout.arrange(screen) if arrange_lock then return end arrange_lock = true - local p = layout.parameters(nil, screen) + -- protected call to ensure that arrange_lock will be reset + protected_call(function() + local p = layout.parameters(nil, screen) - local useless_gap = p.useless_gap + local useless_gap = p.useless_gap - p.geometries = setmetatable({}, {__mode = "k"}) - layout.get(screen).arrange(p) - for c, g in pairs(p.geometries) do - g.width = math.max(1, g.width - c.border_width * 2 - useless_gap * 2) - g.height = math.max(1, g.height - c.border_width * 2 - useless_gap * 2) - g.x = g.x + useless_gap - g.y = g.y + useless_gap - c:geometry(g) - end + p.geometries = setmetatable({}, {__mode = "k"}) + layout.get(screen).arrange(p) + for c, g in pairs(p.geometries) do + g.width = math.max(1, g.width - c.border_width * 2 - useless_gap * 2) + g.height = math.max(1, g.height - c.border_width * 2 - useless_gap * 2) + g.x = g.x + useless_gap + g.y = g.y + useless_gap + c:geometry(g) + end + end) arrange_lock = false delayed_arrange[screen] = nil diff --git a/lib/awful/tag.lua b/lib/awful/tag.lua index 431e8e6ee..17ee0fb10 100644 --- a/lib/awful/tag.lua +++ b/lib/awful/tag.lua @@ -240,11 +240,15 @@ end -- @return A table with all created tags. function tag.new(names, screen, layout) screen = get_screen(screen or 1) + -- True if `layout` should be used as the layout of each created tag + local have_single_layout = (not layout) or (layout.arrange and layout.name) local tags = {} for id, name in ipairs(names) do - table.insert(tags, id, tag.add(name, {screen = screen, - layout = (layout and layout[id]) or - layout})) + local l = layout + if not have_single_layout then + l = layout[id] or layout[1] + end + table.insert(tags, id, tag.add(name, {screen = screen, layout = l})) -- Select the first tag. if id == 1 then tags[id].selected = true