feat(gui): wire adw::ToastOverlay for error surfacing
This commit is contained in:
@@ -12,14 +12,16 @@ pub(crate) struct KeysPage {
|
||||
pub root: adw::Bin,
|
||||
daemon: Rc<RefCell<Option<Daemon>>>,
|
||||
parent_window: gtk::Window,
|
||||
toast_overlay: adw::ToastOverlay,
|
||||
}
|
||||
|
||||
impl KeysPage {
|
||||
pub fn new(parent_window: gtk::Window) -> Rc<Self> {
|
||||
pub fn new(parent_window: gtk::Window, toast_overlay: adw::ToastOverlay) -> Rc<Self> {
|
||||
let page = Rc::new(Self {
|
||||
root: adw::Bin::new(),
|
||||
daemon: Rc::new(RefCell::new(None)),
|
||||
parent_window,
|
||||
toast_overlay,
|
||||
});
|
||||
let p = page.clone();
|
||||
glib::MainContext::default().spawn_local(async move {
|
||||
@@ -165,9 +167,8 @@ impl KeysPage {
|
||||
}
|
||||
|
||||
fn show_toast(self: &Rc<Self>, msg: &str) {
|
||||
// ToastOverlay wiring lands in Task 7. Until then write to stderr so
|
||||
// manual smoke can observe what would be shown.
|
||||
eprintln!("[gui toast] {msg}");
|
||||
let toast = adw::Toast::builder().title(msg).timeout(5).build();
|
||||
self.toast_overlay.add_toast(toast);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,8 @@ fn main() -> glib::ExitCode {
|
||||
.build();
|
||||
header.set_title_widget(Some(&switcher));
|
||||
|
||||
let keys = keys_page::KeysPage::new(win.clone().upcast());
|
||||
let toast_overlay = adw::ToastOverlay::new();
|
||||
let keys = keys_page::KeysPage::new(win.clone().upcast(), toast_overlay.clone());
|
||||
stack.add_titled(&keys.root, Some("keys"), "Keys");
|
||||
|
||||
// ToolbarView is libadwaita v1_4-gated; the project sticks with the
|
||||
@@ -44,8 +45,9 @@ fn main() -> glib::ExitCode {
|
||||
layout.append(&header);
|
||||
layout.append(&stack);
|
||||
stack.set_vexpand(true);
|
||||
toast_overlay.set_child(Some(&layout));
|
||||
|
||||
win.set_content(Some(&layout));
|
||||
win.set_content(Some(&toast_overlay));
|
||||
win.present();
|
||||
});
|
||||
app.run()
|
||||
|
||||
Reference in New Issue
Block a user