Implement :set_children() sanely everywhere

This makes the code use the existing functions for setting widgets. That way,
all the sanity checks that the existing functions have are applied for this code
as well.

I just spent half an hour tracking down a bug where a boolean ended up as a
"widget" in a fixed layout. The symptom was that while drawing the widget, an
error happened. Via this change, the error would instead be flagged while
constructing the widget.

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2016-02-27 13:55:34 +01:00
parent a2301ae8f3
commit cf3c81fa9e
8 changed files with 14 additions and 20 deletions

View File

@ -175,11 +175,9 @@ end
-- This layout only accept three children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function align:set_children(children)
if not children then return self:reset() end
self.first = children[1]
self.second = children[2]
self.third = children[3]
self:emit_signal("widget::layout_changed")
self:set_first(children[1])
self:set_second(children[2])
self:set_third(children[3])
end
--- Fit the align layout into the given space. The align layout will

View File

@ -54,8 +54,7 @@ end
-- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function constraint:set_children(children)
self.widget = children and children[1]
self:emit_signal("widget::layout_changed")
self:set_widget(children[1])
end
--- Set the strategy to use for the constraining. Valid values are 'max',

View File

@ -5,6 +5,7 @@
-- @classmod wibox.layout.fixed
---------------------------------------------------------------------------
local unpack = unpack or table.unpack -- luacheck: globals unpack (compatibility with Lua 5.1)
local base = require("wibox.widget.base")
local table = table
local pairs = pairs
@ -110,9 +111,10 @@ end
--- Replace the layout children
-- @tparam table children A table composed of valid widgets
function fixed:set_children(children)
if not children then return self:reset() end
self.widgets = children
self:emit_signal("widget::layout_changed")
self:reset()
if #children > 0 then
self:add(unpack(children))
end
end
--- Replace the first instance of `widget` in the layout with `widget2`

View File

@ -82,8 +82,7 @@ end
-- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function margin:set_children(children)
self.widget = children and children[1]
self:emit_signal("widget::layout_changed")
self:set_widget(children[1])
end
--- Set all the margins to val.

View File

@ -68,8 +68,7 @@ end
-- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function mirror:set_children(children)
self.widget = children and children[1]
self:emit_signal("widget::layout_changed")
self:set_widget(children[1])
end
--- Reset this layout. The widget will be removed and the axes reset.

View File

@ -76,8 +76,7 @@ end
-- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function rotate:set_children(children)
self.widget = children and children[1]
self:emit_signal("widget::layout_changed")
self:set_widget(children[1])
end
--- Reset this layout. The widget will be removed and the rotation reset.

View File

@ -267,8 +267,7 @@ end
-- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function scroll:set_children(children)
self.widget = children and children[1]
self:emit_signal("widget::layout_changed")
self:set_widget(children[1])
end
--- Specify the expand mode that is used for extra space.

View File

@ -109,8 +109,7 @@ end
-- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets
function background:set_children(children)
self.widget = children and children[1]
self:emit_signal("widget::layout_changed")
self:set_widget(children[1])
end
--- Set the background to use