summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAylur <[email protected]>2025-02-27 19:30:39 +0100
committerAylur <[email protected]>2025-03-01 00:40:07 +0100
commitdfd1f23c7562694e571d44c45aa74fcea9b1ba01 (patch)
tree1e7fb145d078a1a45c6d5563ecf349e4a27b974c
parent98a488d0efe520533316b0df32386d9b40c2ef17 (diff)
feat: Astal.Bin
-rw-r--r--lib/astal/gtk4/src/meson.build1
-rw-r--r--lib/astal/gtk4/src/widget/bin.vala36
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();
+ }
+ }
+}