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 -- This layout only accept three children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function align:set_children(children) function align:set_children(children)
if not children then return self:reset() end self:set_first(children[1])
self.first = children[1] self:set_second(children[2])
self.second = children[2] self:set_third(children[3])
self.third = children[3]
self:emit_signal("widget::layout_changed")
end end
--- Fit the align layout into the given space. The align layout will --- 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 -- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function constraint:set_children(children) function constraint:set_children(children)
self.widget = children and children[1] self:set_widget(children[1])
self:emit_signal("widget::layout_changed")
end end
--- Set the strategy to use for the constraining. Valid values are 'max', --- Set the strategy to use for the constraining. Valid values are 'max',

View File

@ -5,6 +5,7 @@
-- @classmod wibox.layout.fixed -- @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 base = require("wibox.widget.base")
local table = table local table = table
local pairs = pairs local pairs = pairs
@ -110,9 +111,10 @@ end
--- Replace the layout children --- Replace the layout children
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function fixed:set_children(children) function fixed:set_children(children)
if not children then return self:reset() end self:reset()
self.widgets = children if #children > 0 then
self:emit_signal("widget::layout_changed") self:add(unpack(children))
end
end end
--- Replace the first instance of `widget` in the layout with `widget2` --- 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 -- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function margin:set_children(children) function margin:set_children(children)
self.widget = children and children[1] self:set_widget(children[1])
self:emit_signal("widget::layout_changed")
end end
--- Set all the margins to val. --- Set all the margins to val.

View File

@ -68,8 +68,7 @@ end
-- This layout only accept one children, all others will be ignored -- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function mirror:set_children(children) function mirror:set_children(children)
self.widget = children and children[1] self:set_widget(children[1])
self:emit_signal("widget::layout_changed")
end end
--- Reset this layout. The widget will be removed and the axes reset. --- 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 -- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function rotate:set_children(children) function rotate:set_children(children)
self.widget = children and children[1] self:set_widget(children[1])
self:emit_signal("widget::layout_changed")
end end
--- Reset this layout. The widget will be removed and the rotation reset. --- 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 -- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function scroll:set_children(children) function scroll:set_children(children)
self.widget = children and children[1] self:set_widget(children[1])
self:emit_signal("widget::layout_changed")
end end
--- Specify the expand mode that is used for extra space. --- 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 -- This layout only accept one children, all others will be ignored
-- @tparam table children A table composed of valid widgets -- @tparam table children A table composed of valid widgets
function background:set_children(children) function background:set_children(children)
self.widget = children and children[1] self:set_widget(children[1])
self:emit_signal("widget::layout_changed")
end end
--- Set the background to use --- Set the background to use