Skip to content

Commit

Permalink
gtk: handle exit of service properly
Browse files Browse the repository at this point in the history
  • Loading branch information
feschber committed Jan 23, 2024
1 parent 82926d8 commit 1f4821a
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ futures-core = "0.3.28"
futures = "0.3.28"
clap = { version="4.4.11", features = ["derive"] }
gtk = { package = "gtk4", version = "0.7.2", features = ["v4_2"], optional = true }
adw = { package = "libadwaita", version = "0.5.2", features = ["v1_1"], optional = true }
adw = { package = "libadwaita", version = "0.5.2", features = ["v1_2"], optional = true }
async-channel = { version = "2.1.1", optional = true }

[target.'cfg(unix)'.dependencies]
Expand Down
9 changes: 8 additions & 1 deletion src/frontend/gtk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,14 @@ fn build_ui(app: &Application) {
window.imp().stream.borrow_mut().replace(tx);
glib::spawn_future_local(clone!(@weak window => async move {
loop {
let notify = receiver.recv().await.unwrap();
let notify = receiver.recv().await;
let notify = match notify {
Ok(n) => n,
_ => {
window.show_exit_dialog("service exited");
break;
}
};
match notify {
FrontendNotify::NotifyClientActivate(handle, active) => {
window.activate_client(handle, active);
Expand Down
14 changes: 13 additions & 1 deletion src/frontend/gtk/window.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
mod imp;

use std::io::Write;
use std::{io::Write, process};

use adw::prelude::*;
use adw::subclass::prelude::*;
Expand Down Expand Up @@ -218,4 +218,16 @@ impl Window {
let toast_overlay = &self.imp().toast_overlay;
toast_overlay.add_toast(toast);
}

pub fn show_exit_dialog(&self, msg: &str) {
let dialog = adw::MessageDialog::builder()
.transient_for(self)
// .heading(msg)
.body(msg)
.build();

dialog.add_response("close", "Close");
dialog.connect_response(Some("close"), move |_, _| process::exit(1));
dialog.show();
}
}

0 comments on commit 1f4821a

Please sign in to comment.