azalea_shell/component/
login.rs1use crate::{icon, service};
2use azalea_service::LocalStaticServiceManager;
3use gtk::prelude::*;
4use relm4::{ComponentParts, ComponentSender, SimpleComponent, component};
5use std::fmt::Debug;
6
7pub struct Model {}
8
9#[component(pub)]
10impl SimpleComponent for Model {
11 type Input = service::dbus::login::Input;
12 type Output = ();
13 type Init = ();
14
15 view! {
16 gtk::Box {
17 set_hexpand: true,
18 set_halign: gtk::Align::Fill,
19
20 gtk::Button {
21 set_hexpand: true,
22 set_halign: gtk::Align::Fill,
23
24 #[wrap(Some)]
25 set_child = >k::Box {
26 set_halign: gtk::Align::Center,
27 set_spacing: 6,
28
29 gtk::Image {
30 set_icon_name: Some(icon::SUSPEND),
31 },
32
33 gtk::Label {
34 set_label: "Suspend",
35 },
36 },
37
38 connect_clicked => Self::Input::Suspend
39 },
40 gtk::Button {
41 set_hexpand: true,
42 set_halign: gtk::Align::Fill,
43
44 #[wrap(Some)]
45 set_child = >k::Box {
46 set_halign: gtk::Align::Center,
47 set_spacing: 6,
48
49 gtk::Image {
50 set_icon_name: Some(icon::REBOOT),
51 },
52
53 gtk::Label {
54 set_label: "Reboot",
55 },
56 },
57
58 connect_clicked => Self::Input::Reboot
59 },
60 gtk::Button {
61 set_hexpand: true,
62 set_halign: gtk::Align::Fill,
63
64 #[wrap(Some)]
65 set_child = >k::Box {
66 set_halign: gtk::Align::Center,
67 set_spacing: 6,
68
69 gtk::Image {
70 set_icon_name: Some(icon::SHUTDOWN),
71 },
72
73 gtk::Label {
74 set_label: "Shutdown",
75 },
76 },
77
78 connect_clicked => Self::Input::PowerOff
79 },
80 gtk::Button {
81 set_hexpand: true,
82 set_halign: gtk::Align::Fill,
83
84 #[wrap(Some)]
85 set_child = >k::Box {
86 set_halign: gtk::Align::Center,
87 set_spacing: 6,
88
89 gtk::Image {
90 set_icon_name: Some(icon::HIBERNATE),
91 },
92
93 gtk::Label {
94 set_label: "Hibernate",
95 },
96 },
97
98 connect_clicked => Self::Input::Hibernate
99 },
100 }
101 }
102
103 fn init(
104 _init: Self::Init,
105 _root: Self::Root,
106 _sender: ComponentSender<Self>,
107 ) -> ComponentParts<Self> {
108 let model = Self {};
109
110 let widgets = view_output!();
111
112 service::dbus::login::Service::start();
113
114 ComponentParts { model, widgets }
115 }
116
117 fn update(&mut self, input: Self::Input, _sender: ComponentSender<Self>) {
118 service::dbus::login::Service::send(input);
119 }
120}