@@ -49,7 +49,11 @@ fn gtk_main() -> glib::ExitCode {
49
49
. application_id ( "de.feschber.LanMouse" )
50
50
. build ( ) ;
51
51
52
- app. connect_startup ( |_| load_icons ( ) ) ;
52
+ app. connect_startup ( |app| {
53
+ load_icons ( ) ;
54
+ setup_actions ( app) ;
55
+ setup_menu ( app) ;
56
+ } ) ;
53
57
app. connect_activate ( build_ui) ;
54
58
55
59
let args: Vec < & ' static str > = vec ! [ ] ;
@@ -62,6 +66,33 @@ fn load_icons() {
62
66
icon_theme. add_resource_path ( "/de/feschber/LanMouse/icons" ) ;
63
67
}
64
68
69
+ // Add application actions
70
+ fn setup_actions ( app : & adw:: Application ) {
71
+ // Quit action
72
+ // This is important on macOS, where users expect a File->Quit action with a Cmd+Q shortcut.
73
+ let quit_action = gio:: SimpleAction :: new ( "quit" , None ) ;
74
+ quit_action. connect_activate ( {
75
+ let app = app. clone ( ) ;
76
+ move |_, _| {
77
+ app. quit ( ) ;
78
+ }
79
+ } ) ;
80
+ app. add_action ( & quit_action) ;
81
+ }
82
+
83
+ // Set up a global menu
84
+ //
85
+ // Currently this is used only on macOS
86
+ fn setup_menu ( app : & adw:: Application ) {
87
+ let menu = gio:: Menu :: new ( ) ;
88
+
89
+ let file_menu = gio:: Menu :: new ( ) ;
90
+ file_menu. append ( Some ( "Quit" ) , Some ( "app.quit" ) ) ;
91
+ menu. append_submenu ( Some ( "_File" ) , & file_menu) ;
92
+
93
+ app. set_menubar ( Some ( & menu) )
94
+ }
95
+
65
96
fn build_ui ( app : & Application ) {
66
97
log:: debug!( "connecting to lan-mouse-socket" ) ;
67
98
let ( mut frontend_rx, frontend_tx) = match lan_mouse_ipc:: connect ( ) {
0 commit comments