summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-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();
+ }
+ }
+}