@@ -70,74 +70,76 @@ private NativeMenu CreateDefaultAppMenu()
70
70
var result = new NativeMenu ( ) ;
71
71
72
72
var aboutItem = new NativeMenuItem ( "About Avalonia" ) ;
73
- aboutItem . Click += async ( sender , e ) =>
73
+
74
+ aboutItem . Click += async ( _ , _ ) =>
74
75
{
75
76
var dialog = new AboutAvaloniaDialog ( ) ;
76
77
77
- var mainWindow = ( Application . Current . ApplicationLifetime as IClassicDesktopStyleApplicationLifetime ) ? . MainWindow ;
78
-
79
- await dialog . ShowDialog ( mainWindow ) ;
78
+ if ( Application . Current is
79
+ { ApplicationLifetime : IClassicDesktopStyleApplicationLifetime { MainWindow : { } mainWindow } } )
80
+ {
81
+ await dialog . ShowDialog ( mainWindow ) ;
82
+ }
80
83
} ;
84
+
81
85
result . Add ( aboutItem ) ;
82
86
83
- var macOpts = AvaloniaLocator . Current . GetService < MacOSPlatformOptions > ( ) ;
84
- if ( macOpts == null || ! macOpts . DisableDefaultApplicationMenuItems )
85
- {
86
- result . Add ( new NativeMenuItemSeparator ( ) ) ;
87
+ return result ;
88
+ }
87
89
88
- var servicesMenu = new NativeMenuItem ( "Services" ) ;
89
- servicesMenu . Menu = new NativeMenu
90
- {
91
- [ MacOSNativeMenuCommands . IsServicesSubmenuProperty ] = true
92
- } ;
93
- result . Add ( servicesMenu ) ;
90
+ private void PopulateStandardOSXMenuItems ( NativeMenu appMenu )
91
+ {
92
+ appMenu . Add ( new NativeMenuItemSeparator ( ) ) ;
94
93
95
- result . Add ( new NativeMenuItemSeparator ( ) ) ;
94
+ var servicesMenu = new NativeMenuItem ( "Services" ) ;
95
+ servicesMenu . Menu = new NativeMenu { [ MacOSNativeMenuCommands . IsServicesSubmenuProperty ] = true } ;
96
96
97
- var hideItem = new NativeMenuItem ( "Hide " + Application . Current . Name )
98
- {
99
- Gesture = new KeyGesture ( Key . H , KeyModifiers . Meta )
100
- } ;
101
- hideItem . Click += ( sender , args ) =>
102
- {
103
- _applicationCommands . HideApp ( ) ;
104
- } ;
105
- result . Add ( hideItem ) ;
97
+ appMenu . Add ( servicesMenu ) ;
106
98
99
+ appMenu . Add ( new NativeMenuItemSeparator ( ) ) ;
107
100
108
- var hideOthersItem = new NativeMenuItem ( "Hide Others" )
109
- {
110
- Gesture = new KeyGesture ( Key . Q , KeyModifiers . Meta | KeyModifiers . Alt )
111
- } ;
112
- hideOthersItem . Click += ( sender , args ) =>
113
- {
114
- _applicationCommands . HideOthers ( ) ;
115
- } ;
116
- result . Add ( hideOthersItem ) ;
101
+ var hideItem = new NativeMenuItem ( "Hide " + ( Application . Current ? . Name ?? "Application" ) )
102
+ {
103
+ Gesture = new KeyGesture ( Key . H , KeyModifiers . Meta )
104
+ } ;
117
105
106
+ hideItem . Click += ( _ , _ ) =>
107
+ {
108
+ _applicationCommands . HideApp ( ) ;
109
+ } ;
118
110
119
- var showAllItem = new NativeMenuItem ( "Show All" ) ;
120
- showAllItem . Click += ( sender , args ) =>
121
- {
122
- _applicationCommands . ShowAll ( ) ;
123
- } ;
124
- result . Add ( showAllItem ) ;
111
+ appMenu . Add ( hideItem ) ;
125
112
126
- result . Add ( new NativeMenuItemSeparator ( ) ) ;
113
+ var hideOthersItem = new NativeMenuItem ( "Hide Others" )
114
+ {
115
+ Gesture = new KeyGesture ( Key . Q , KeyModifiers . Meta | KeyModifiers . Alt )
116
+ } ;
117
+ hideOthersItem . Click += ( _ , _ ) =>
118
+ {
119
+ _applicationCommands . HideOthers ( ) ;
120
+ } ;
121
+ appMenu . Add ( hideOthersItem ) ;
127
122
128
- var quitItem = new NativeMenuItem ( "Quit" )
129
- {
130
- Gesture = new KeyGesture ( Key . Q , KeyModifiers . Meta )
131
- } ;
132
- quitItem . Click += ( sender , args ) =>
133
- {
134
- _applicationCommands . ShowAll ( ) ;
135
- } ;
136
- result . Add ( quitItem ) ;
137
- }
123
+ var showAllItem = new NativeMenuItem ( "Show All" ) ;
124
+ showAllItem . Click += ( _ , _ ) =>
125
+ {
126
+ _applicationCommands . ShowAll ( ) ;
127
+ } ;
138
128
129
+ appMenu . Add ( showAllItem ) ;
139
130
140
- return result ;
131
+ appMenu . Add ( new NativeMenuItemSeparator ( ) ) ;
132
+
133
+ var quitItem = new NativeMenuItem ( "Quit" ) { Gesture = new KeyGesture ( Key . Q , KeyModifiers . Meta ) } ;
134
+ quitItem . Click += ( _ , _ ) =>
135
+ {
136
+ if ( Application . Current is { ApplicationLifetime : IControlledApplicationLifetime lifetime } )
137
+ {
138
+ lifetime . Shutdown ( ) ;
139
+ }
140
+ } ;
141
+
142
+ appMenu . Add ( quitItem ) ;
141
143
}
142
144
143
145
private void DoLayoutReset ( bool forceUpdate = false )
@@ -213,6 +215,13 @@ private void SetMenu(NativeMenu menu)
213
215
214
216
_nativeMenu . Initialize ( this , appMenuHolder , "" ) ;
215
217
218
+ var macOpts = AvaloniaLocator . Current . GetService < MacOSPlatformOptions > ( ) ;
219
+
220
+ if ( macOpts == null || ! macOpts . DisableDefaultApplicationMenuItems )
221
+ {
222
+ PopulateStandardOSXMenuItems ( menu ) ;
223
+ }
224
+
216
225
setMenu = true ;
217
226
}
218
227
0 commit comments