fractal/login/
greeter.rs

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