Fix composite widgets with top level container

When wrapping container widgets to create reusable composite widgets,
`drill` will be called twice on the same widget definition. The first
call happens within the wrapping function and applies the children
widgets fine. The second call happens when the composite widget is used,
but since there are no children widgets defined, the call to
`set_children` sets the existing child to `nil` instead.

Fixes #3213.

Signed-off-by: Lucas Schwiderski <lucas@lschwiderski.de>
This commit is contained in:
Lucas Schwiderski 2021-03-10 19:39:47 +01:00
parent aba1cf398f
commit 7bc3ec4c35
No known key found for this signature in database
GPG Key ID: AA12679AAA6DF4D8
1 changed files with 23 additions and 21 deletions

View File

@ -533,6 +533,7 @@ local function drill(ids, content)
end end
end end
if widgets and max > 0 then
-- Add all widgets. -- Add all widgets.
for k = 1, max do for k = 1, max do
-- ipairs cannot be used on sparse tables. -- ipairs cannot be used on sparse tables.
@ -555,10 +556,11 @@ local function drill(ids, content)
end end
end end
end end
-- Replace all children (if any) with the new ones. -- Replace all children (if any) with the new ones.
if widgets then
l:set_children(widgets) l:set_children(widgets)
end end
return l, id return l, id
end end