diff --git a/gui/src/keys_page.rs b/gui/src/keys_page.rs index 476c93e..c85300a 100644 --- a/gui/src/keys_page.rs +++ b/gui/src/keys_page.rs @@ -12,14 +12,16 @@ pub(crate) struct KeysPage { pub root: adw::Bin, daemon: Rc>>, parent_window: gtk::Window, + toast_overlay: adw::ToastOverlay, } impl KeysPage { - pub fn new(parent_window: gtk::Window) -> Rc { + pub fn new(parent_window: gtk::Window, toast_overlay: adw::ToastOverlay) -> Rc { 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, 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); } } diff --git a/gui/src/main.rs b/gui/src/main.rs index 6da00f4..133775e 100644 --- a/gui/src/main.rs +++ b/gui/src/main.rs @@ -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()