Skip to main content

fractal/login/
greeter.rs

1use adw::{prelude::*, subclass::prelude::*};
2use gtk::glib;
3
4use crate::components::OfflineBanner;
5
6mod imp {
7    use glib::subclass::InitializingObject;
8
9    use super::*;
10
11    #[derive(Debug, Default, gtk::CompositeTemplate)]
12    #[template(resource = "/org/gnome/Fractal/ui/login/greeter.ui")]
13    pub struct Greeter {}
14
15    #[glib::object_subclass]
16    impl ObjectSubclass for Greeter {
17        const NAME: &'static str = "Greeter";
18        type Type = super::Greeter;
19        type ParentType = adw::NavigationPage;
20
21        fn class_init(klass: &mut Self::Class) {
22            OfflineBanner::ensure_type();
23
24            Self::bind_template(klass);
25
26            klass.set_accessible_role(gtk::AccessibleRole::Group);
27        }
28
29        fn instance_init(obj: &InitializingObject<Self>) {
30            obj.init_template();
31        }
32    }
33
34    impl ObjectImpl for Greeter {}
35    impl WidgetImpl for Greeter {}
36
37    impl NavigationPageImpl for Greeter {
38        fn shown(&self) {
39            self.grab_focus();
40        }
41    }
42
43    impl AccessibleImpl for Greeter {}
44}
45
46glib::wrapper! {
47    /// The welcome screen of the app.
48    pub struct Greeter(ObjectSubclass<imp::Greeter>)
49        @extends gtk::Widget, adw::NavigationPage,
50        @implements gtk::Accessible, gtk::Buildable, gtk::ConstraintTarget;
51}
52
53impl Greeter {
54    /// The tag for this page.
55    pub(super) const TAG: &str = "greeter";
56
57    pub fn new() -> Self {
58        glib::Object::new()
59    }
60}