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 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 pub(super) const TAG: &str = "greeter";
56
57 pub fn new() -> Self {
58 glib::Object::new()
59 }
60}