summaryrefslogtreecommitdiff
path: root/lib/astal/gtk3/src/widget/stack.vala
blob: 4e856a6a8a234f5d7931e3e9490b1d9df1fb7899 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
 * Subclass of [[email protected]] that has a children setter which
 * invokes [[email protected]_named] with the child's [[email protected]:name] property.
 */
public class Astal.Stack : Gtk.Stack {
    /**
     * Same as [[email protected]:visible-child-name].
     */
    [CCode (notify = false)]
    public string shown {
        get { return visible_child_name; }
        set { visible_child_name = value; }
    }

    public List<weak Gtk.Widget> children {
        set { _set_children(value); }
        owned get { return get_children(); }
    }

    private void _set_children(List<weak Gtk.Widget> arr) {
        foreach(var child in get_children()) {
            remove(child);
        }

        var i = 0;
        foreach(var child in arr) {
            if (child.name != null) {
                add_named(child, child.name);
            } else {
                add_named(child, (++i).to_string());
            }
        }
    }

    construct {
        notify["visible_child_name"].connect(() => {
            notify_property("shown");
        });
    }
}