From dfd1f23c7562694e571d44c45aa74fcea9b1ba01 Mon Sep 17 00:00:00 2001 From: Aylur Date: Thu, 27 Feb 2025 19:30:39 +0100 Subject: feat: Astal.Bin --- lib/astal/gtk4/src/widget/bin.vala | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lib/astal/gtk4/src/widget/bin.vala (limited to 'lib/astal/gtk4/src/widget/bin.vala') 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(); + } + } +} -- cgit v1.2.3