@@ -127,10 +127,13 @@ static void Cocoa_DeleteDevice(SDL_VideoDevice *device)
127127 device->SetWindowModal = Cocoa_SetWindowModal;
128128 device->SyncWindow = Cocoa_SyncWindow;
129129 device->CreateMenuBar = Cocoa_CreateMenuBar;
130- device->CreateMenuBarItem = Cocoa_CreateMenuBarItem;
131- device->CreateMenuItem = Cocoa_CreateMenuItem;
130+ device->CreateMenuItemAt = Cocoa_CreateMenuItemAt;
132131 device->CheckMenuItem = Cocoa_CheckMenuItem;
132+ device->UncheckMenuItem = Cocoa_UncheckMenuItem;
133+ device->MenuItemChecked = Cocoa_MenuItemChecked;
134+ device->MenuItemEnabled = Cocoa_MenuItemEnabled;
133135 device->EnableMenuItem = Cocoa_EnableMenuItem;
136+ device->DisableMenuItem = Cocoa_DisableMenuItem;
134137 device->DestroyMenuItem = Cocoa_DestroyMenuItem;
135138
136139#ifdef SDL_VIDEO_OPENGL_CGL
@@ -364,50 +367,35 @@ - (void) Cocoa_PlatformMenuData_MenuButtonClicked: (id)sender;{
364367@end
365368
366369
367- bool SDLCALL Cocoa_CreateMenuBar (SDL_MenuBar *menu_bar)
370+
371+
372+
373+
374+
375+ bool Cocoa_CreateMenuBar (SDL_MenuBar *menu_bar)
368376{
369377 PlatformMenuData* platform_menu =[PlatformMenuData new ];
370378 platform_menu->menu = [NSMenu new ];
371379 [NSApp setMainMenu: platform_menu->menu];
372380
373381 NSMenuItem *appMenuItem = [NSMenuItem new ];
374382 NSMenu *appMenu = [NSMenu new ];
375- [appMenu addItemWithTitle: @" Quit" action: @selector (terminate: ) keyEquivalent: @" q" ];
383+ // [appMenu addItemWithTitle: @"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
376384 [appMenuItem setSubmenu: appMenu];
377385
378386 [platform_menu->menu addItem: appMenuItem];
379387
380- menu_bar->common .platform_data = CFBridgingRetain (platform_menu);
388+ menu_bar->common .item_common . platform_data = CFBridgingRetain (platform_menu);
381389
382390 return true ;
383- // **** App Menu **** //
384- // NSMenuItem *appMenuItem = [NSMenuItem new];
385- // NSMenu *appMenu = [NSMenu new];
386- // [appMenu addItemWithTitle: @"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
387- // [appMenuItem setSubmenu:appMenu];
388- // [menubar addItem:appMenuItem];
389- // // **** File Menu **** //
390- // NSMenuItem *fileMenuItem = [NSMenuItem new];
391- // NSMenu *fileMenu = [[NSMenu alloc] initWithTitle:@"File"];
392- // //[fileMenu addItemWithTitle:@"New" action:@selector(menuAction:) keyEquivalent:@""];
393- // //[fileMenu addItemWithTitle:@"Open" action:@selector(menuAction:) keyEquivalent:@""];
394- // //[fileMenu addItemWithTitle:@"Save" action:@selector(menuAction:) keyEquivalent:@""];
395- // NSMenuItem *newItem = [fileMenu addItemWithTitle:@"New" action:@selector(Cocoa_PlatformMenuData_MenuButtonClicked:) keyEquivalent:@""];
396- // newItem.target = platform_menu;
397- // [fileMenuItem setSubmenu: fileMenu];
398- // [menubar addItem: fileMenuItem];
399391}
400392
401- bool Cocoa_CreateMenuBarItem (SDL_MenuItem *menu_item, const char *name, Uint16 event_type)
402- {
403- return Cocoa_CreateMenuItem ((SDL_MenuItem*)menu_item, name, event_type);
404- }
405-
406- bool Cocoa_CreateMenuItem (SDL_MenuItem *menu_item, const char *name, Uint16 event_type)
393+ bool Cocoa_CreateMenuItemAt (SDL_MenuItem *menu_item, size_t index, const char *name, Uint16 event_type)
407394{
408395 PlatformMenuData* platform_data = [PlatformMenuData new ];
409396 platform_data->user_event_type = event_type;
410397 menu_item->common .platform_data = CFBridgingRetain (platform_data);
398+
411399 PlatformMenuData* parent_platform_data = (__bridge id _Nullable)(menu_item->common .parent ->common .platform_data );
412400 NSString * name_ns = [NSString stringWithUTF8String: name];
413401
@@ -420,27 +408,71 @@ bool Cocoa_CreateMenuItem(SDL_MenuItem *menu_item, const char *name, Uint16 even
420408 [parent_platform_data->menu addItem: platform_data->menu_item];
421409
422410 } else {
423- platform_data->menu_item = [parent_platform_data->menu addItemWithTitle: name_ns action: @selector (Cocoa_PlatformMenuData_MenuButtonClicked: ) keyEquivalent: @" " ];
411+ platform_data->menu_item = [NSMenuItem alloc ];
412+ [platform_data->menu_item setTitle: name_ns];
413+ [platform_data->menu_item setAction: @selector (Cocoa_PlatformMenuData_MenuButtonClicked: )];
414+ [platform_data->menu_item setTarget: platform_data];
415+ [platform_data->menu_item setEnabled: true ];
424416
425- [platform_data->menu_item setTarget: platform_data];
426- [platform_data->menu_item setEnabled: true ];
417+ if ((menu_item->common .parent ->common .type == SDL_MENUBAR) && (menu_item->common .type != SDL_MENU)) {
418+ NSMenu * app_menu = [[parent_platform_data->menu itemAtIndex: (NSInteger )0 ] submenu ];
419+ [app_menu addItem: platform_data->menu_item];
420+
421+ } else {
422+ [parent_platform_data->menu insertItem: platform_data->menu_item atIndex: (NSInteger )index];
423+ }
427424 }
428425 return true ;
429426}
430427
431- bool Cocoa_CheckMenuItem (SDL_MenuItem *menu_item, bool checked)
428+
429+ bool Cocoa_CheckMenuItem (SDL_MenuItem *menu_item)
432430{
433- return false ;
431+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
432+ [platform_data->menu_item setState: NSControlStateValueOn ];
433+ return true ;
434434}
435435
436- bool Cocoa_EnableMenuItem (SDL_MenuItem *menu_item, bool enabled )
436+ bool Cocoa_UncheckMenuItem (SDL_MenuItem *menu_item)
437437{
438- return false ;
438+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
439+ [platform_data->menu_item setState: NSControlStateValueOff ];
440+ return true ;
439441}
440442
441- void Cocoa_DestroyMenuItem (SDL_MenuItem *menu_item)
443+ bool Cocoa_MenuItemChecked (SDL_MenuItem *menu_item, bool *checked )
442444{
445+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
446+ return [platform_data->menu_item state ] == NSControlStateValueOn ;
447+ }
448+
449+ bool Cocoa_MenuItemEnabled (SDL_MenuItem *menu_item, bool *enabled)
450+ {
451+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
452+ return [platform_data->menu_item isEnabled ];
453+ }
454+
455+ bool Cocoa_EnableMenuItem (SDL_MenuItem *menu_item)
456+ {
457+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
458+ [platform_data->menu_item setEnabled: true ];
459+ return true ;
460+ }
461+
462+ bool Cocoa_DisableMenuItem (SDL_MenuItem *menu_item)
463+ {
464+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
465+ [platform_data->menu_item setEnabled: false ];
466+ return true ;
467+ }
468+
469+ bool Cocoa_DestroyMenuItem (SDL_MenuItem *menu_item)
470+ {
471+ PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common .platform_data ;
472+ PlatformMenuData* parent_platform_data = (__bridge id _Nullable)(menu_item->common .parent ->common .platform_data );
473+ [parent_platform_data->menu removeItem: platform_data->menu_item];
443474 return false ;
444475}
445476
477+
446478#endif // SDL_VIDEO_DRIVER_COCOA
0 commit comments