diff options
Diffstat (limited to 'lib/astal/gtk4/src/widget')
-rw-r--r-- | lib/astal/gtk4/src/widget/bin.vala | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/astal/gtk4/src/widget/bin.vala b/lib/astal/gtk4/src/widget/bin.vala new file mode 100644 index 0000000..102957b --- /dev/null +++ b/lib/astal/gtk4/src/widget/bin.vala @@ -0,0 +1,36 @@ +/** + * A widget with one child. + * It is useful for deriving subclasses, since it provides common code needed for handling a single child widget. + */ +public class Astal.Bin : Gtk.Widget, Gtk.Buildable { + construct { set_layout_manager(new Gtk.BinLayout()); } + + Gtk.Widget _child; + public Gtk.Widget? child { + get { return _child; } + set { + if (_child != null) { + _child.unparent(); + } + + if (value != null) { + _child = value; + value.set_parent(this); + } + } + } + + void add_child(Gtk.Builder builder, Object child, string? type) { + if (child is Gtk.Widget) { + this.child = child as Gtk.Widget; + } else { + base.add_child(builder, child, type); + } + } + + ~Bin() { + if (child != null) { + child.unparent(); + } + } +} |