summaryrefslogtreecommitdiff
path: root/lib/astal/gtk4/src/widget
diff options
context:
space:
mode:
Diffstat (limited to 'lib/astal/gtk4/src/widget')
-rw-r--r--lib/astal/gtk4/src/widget/bin.vala36
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();
+ }
+ }
+}