@@ -186,6 +186,131 @@ impl Menu {
186186 Default :: default ( )
187187 }
188188
189+ /// Creates a menu filled with default menu items and submenus.
190+ ///
191+ /// ## Platform-specific:
192+ ///
193+ /// - **Windows**:
194+ /// - File
195+ /// - CloseWindow
196+ /// - Quit
197+ /// - Edit
198+ /// - Cut
199+ /// - Copy
200+ /// - Paste
201+ /// - Window
202+ /// - Minimize
203+ /// - CloseWindow
204+ ///
205+ /// - **Linux**:
206+ /// - File
207+ /// - CloseWindow
208+ /// - Quit
209+ /// - Window
210+ /// - Minimize
211+ /// - CloseWindow
212+ ///
213+ /// - **macOS**:
214+ /// - App
215+ /// - About
216+ /// - Separator
217+ /// - Services
218+ /// - Separator
219+ /// - Hide
220+ /// - HideOthers
221+ /// - ShowAll
222+ /// - Separator
223+ /// - Quit
224+ /// - File
225+ /// - CloseWindow
226+ /// - Edit
227+ /// - Undo
228+ /// - Redo
229+ /// - Separator
230+ /// - Cut
231+ /// - Copy
232+ /// - Paste
233+ /// - SelectAll
234+ /// - View
235+ /// - EnterFullScreen
236+ /// - Window
237+ /// - Minimize
238+ /// - Zoom
239+ /// - Separator
240+ /// - CloseWindow
241+ pub fn os_default ( #[ allow( unused) ] app_name : & str ) -> Self {
242+ let mut menu = Menu :: new ( ) ;
243+ #[ cfg( target_os = "macos" ) ]
244+ {
245+ menu = menu. add_submenu ( Submenu :: new (
246+ app_name,
247+ Menu :: new ( )
248+ . add_native_item ( MenuItem :: About (
249+ app_name. to_string ( ) ,
250+ AboutMetadata :: default ( ) ,
251+ ) )
252+ . add_native_item ( MenuItem :: Separator )
253+ . add_native_item ( MenuItem :: Services )
254+ . add_native_item ( MenuItem :: Separator )
255+ . add_native_item ( MenuItem :: Hide )
256+ . add_native_item ( MenuItem :: HideOthers )
257+ . add_native_item ( MenuItem :: ShowAll )
258+ . add_native_item ( MenuItem :: Separator )
259+ . add_native_item ( MenuItem :: Quit ) ,
260+ ) ) ;
261+ }
262+
263+ let mut file_menu = Menu :: new ( ) ;
264+ file_menu = file_menu. add_native_item ( MenuItem :: CloseWindow ) ;
265+ #[ cfg( not( target_os = "macos" ) ) ]
266+ {
267+ file_menu = file_menu. add_native_item ( MenuItem :: Quit ) ;
268+ }
269+ menu = menu. add_submenu ( Submenu :: new ( "File" , file_menu) ) ;
270+
271+ #[ cfg( not( target_os = "linux" ) ) ]
272+ let mut edit_menu = Menu :: new ( ) ;
273+ #[ cfg( target_os = "macos" ) ]
274+ {
275+ edit_menu = edit_menu. add_native_item ( MenuItem :: Undo ) ;
276+ edit_menu = edit_menu. add_native_item ( MenuItem :: Redo ) ;
277+ edit_menu = edit_menu. add_native_item ( MenuItem :: Separator ) ;
278+ }
279+ #[ cfg( not( target_os = "linux" ) ) ]
280+ {
281+ edit_menu = edit_menu. add_native_item ( MenuItem :: Cut ) ;
282+ edit_menu = edit_menu. add_native_item ( MenuItem :: Copy ) ;
283+ edit_menu = edit_menu. add_native_item ( MenuItem :: Paste ) ;
284+ }
285+ #[ cfg( target_os = "macos" ) ]
286+ {
287+ edit_menu = edit_menu. add_native_item ( MenuItem :: SelectAll ) ;
288+ }
289+ #[ cfg( not( target_os = "linux" ) ) ]
290+ {
291+ menu = menu. add_submenu ( Submenu :: new ( "Edit" , edit_menu) ) ;
292+ }
293+ #[ cfg( target_os = "macos" ) ]
294+ {
295+ menu = menu. add_submenu ( Submenu :: new (
296+ "View" ,
297+ Menu :: new ( ) . add_native_item ( MenuItem :: EnterFullScreen ) ,
298+ ) ) ;
299+ }
300+
301+ let mut window_menu = Menu :: new ( ) ;
302+ window_menu = window_menu. add_native_item ( MenuItem :: Minimize ) ;
303+ #[ cfg( target_os = "macos" ) ]
304+ {
305+ window_menu = window_menu. add_native_item ( MenuItem :: Zoom ) ;
306+ window_menu = window_menu. add_native_item ( MenuItem :: Separator ) ;
307+ }
308+ window_menu = window_menu. add_native_item ( MenuItem :: CloseWindow ) ;
309+ menu = menu. add_submenu ( Submenu :: new ( "Window" , window_menu) ) ;
310+
311+ menu
312+ }
313+
189314 /// Creates a new window menu with the given items.
190315 ///
191316 /// # Examples
0 commit comments