diff options
author | Aylur <[email protected]> | 2025-02-27 19:30:39 +0100 |
---|---|---|
committer | Aylur <[email protected]> | 2025-03-01 00:40:07 +0100 |
commit | dfd1f23c7562694e571d44c45aa74fcea9b1ba01 (patch) | |
tree | 1e7fb145d078a1a45c6d5563ecf349e4a27b974c | |
parent | 98a488d0efe520533316b0df32386d9b40c2ef17 (diff) |
feat: Astal.Bin
-rw-r--r-- | lib/astal/gtk4/src/meson.build | 1 | ||||
-rw-r--r-- | lib/astal/gtk4/src/widget/bin.vala | 36 |
2 files changed, 37 insertions, 0 deletions
diff --git a/lib/astal/gtk4/src/meson.build b/lib/astal/gtk4/src/meson.build index 58408a6..3bd6a2f 100644 --- a/lib/astal/gtk4/src/meson.build +++ b/lib/astal/gtk4/src/meson.build @@ -26,6 +26,7 @@ deps = [ ] sources = [config] + files( + 'widget/bin.vala', 'widget/box.vala', 'widget/slider.vala', 'widget/window.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(); + } + } +} |