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 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}