From 5d1745a60c3ade67384d5be490d9d8f81425c36e Mon Sep 17 00:00:00 2001 From: Micah R Ledbetter Date: Fri, 28 Feb 2025 08:28:35 -0600 Subject: [PATCH] Add cmd-q shortcut on macOS (#270) --- lan-mouse-gtk/src/lib.rs | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/lan-mouse-gtk/src/lib.rs b/lan-mouse-gtk/src/lib.rs index 005b55d..2469c57 100644 --- a/lan-mouse-gtk/src/lib.rs +++ b/lan-mouse-gtk/src/lib.rs @@ -49,7 +49,11 @@ fn gtk_main() -> glib::ExitCode { .application_id("de.feschber.LanMouse") .build(); - app.connect_startup(|_| load_icons()); + app.connect_startup(|app| { + load_icons(); + setup_actions(app); + setup_menu(app); + }); app.connect_activate(build_ui); let args: Vec<&'static str> = vec![]; @@ -62,6 +66,33 @@ fn load_icons() { icon_theme.add_resource_path("/de/feschber/LanMouse/icons"); } +// Add application actions +fn setup_actions(app: &adw::Application) { + // Quit action + // This is important on macOS, where users expect a File->Quit action with a Cmd+Q shortcut. + let quit_action = gio::SimpleAction::new("quit", None); + quit_action.connect_activate({ + let app = app.clone(); + move |_, _| { + app.quit(); + } + }); + app.add_action(&quit_action); +} + +// Set up a global menu +// +// Currently this is used only on macOS +fn setup_menu(app: &adw::Application) { + let menu = gio::Menu::new(); + + let file_menu = gio::Menu::new(); + file_menu.append(Some("Quit"), Some("app.quit")); + menu.append_submenu(Some("_File"), &file_menu); + + app.set_menubar(Some(&menu)) +} + fn build_ui(app: &Application) { log::debug!("connecting to lan-mouse-socket"); let (mut frontend_rx, frontend_tx) = match lan_mouse_ipc::connect() {