Skip to content

Commit 7b88b6e

Browse files
committed
Mac looks alright.
1 parent 74eca77 commit 7b88b6e

File tree

3 files changed

+36
-26
lines changed

3 files changed

+36
-26
lines changed

examples/video/01-menubar/menubar.c

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ SDL_Window* window = NULL;
1212
SDL_Renderer* renderer = NULL;
1313

1414
SDL_MenuItem* checkable = NULL;
15-
SDL_MenuItem* disabled = NULL;
15+
SDL_MenuItem* new_window = NULL;
1616

1717
typedef enum SDL_EventType_MenuExt
1818
{
@@ -42,7 +42,7 @@ void CreateMenuBar()
4242

4343
{
4444
SDL_MenuItem* menu = SDL_CreateMenuItem(bar, "File", SDL_MENU, MENU_BAR_LAST);
45-
SDL_CreateMenuItem(menu, "New Window", SDL_MENU_BUTTON, MENU_BAR_FILE_NEW_WINDOW);
45+
new_window = SDL_CreateMenuItem(menu, "New Window", SDL_MENU_BUTTON, MENU_BAR_FILE_NEW_WINDOW);
4646
checkable = SDL_CreateMenuItem(menu, "Autosave Tabs on Close", SDL_MENU_CHECKABLE, MENU_BAR_FILE_DISABLE_NEW_WINDOW);
4747

4848
SDL_CheckMenuItem(checkable);
@@ -51,24 +51,23 @@ void CreateMenuBar()
5151
{
5252
SDL_MenuItem* menu = SDL_CreateMenuItem(bar, "Bookmarks", SDL_MENU, MENU_BAR_LAST);
5353
SDL_MenuItem* main_bookmarks = SDL_CreateMenuItem(menu, "Bookmarks Toolbar", SDL_MENU, MENU_BAR_LAST);
54+
SDL_MenuItem* discord = SDL_CreateMenuItem(main_bookmarks, "SDL Discord", SDL_MENU_BUTTON, MENU_BAR_BOOKMARKS_TOOLBAR_DISCORD);
5455
SDL_CreateMenuItem(main_bookmarks, "SDL GitHub", SDL_MENU_BUTTON, MENU_BAR_BOOKMARKS_TOOLBAR_GITHUB);
55-
SDL_CreateMenuItem(main_bookmarks, "SDL Wiki", SDL_MENU_BUTTON, MENU_BAR_BOOKMARKS_TOOLBAR_WIKI);
56-
SDL_CreateMenuItem(main_bookmarks, "SDL Discord", SDL_MENU_BUTTON, MENU_BAR_BOOKMARKS_TOOLBAR_DISCORD);
56+
SDL_CreateMenuItemAt(main_bookmarks, 0, "SDL Wiki", SDL_MENU_BUTTON, MENU_BAR_BOOKMARKS_TOOLBAR_WIKI);
5757

5858
SDL_MenuItem *other_bookmarks = SDL_CreateMenuItem(main_bookmarks, "Other Bookmarks", SDL_MENU, MENU_BAR_LAST);
5959
SDL_CreateMenuItem(other_bookmarks, "Stack Overflow", SDL_MENU_BUTTON, MENU_BAR_BOOKMARKS_OTHER_BOOKMARKS_STACKOVERFLOW);
60+
61+
SDL_DestroyMenuItem(discord);
62+
6063

6164
SDL_DisableMenuItem(other_bookmarks);
6265
}
6366

6467
{
6568
// We can't create a top level checkable .
66-
SDL_MenuItem* checkable = SDL_CreateMenuItem(bar, "Incognito", SDL_MENU_CHECKABLE, MENU_BAR_INCOGNITO);
67-
SDL_assert(!checkable);
68-
69-
disabled = SDL_CreateMenuItem(bar, "Disabled Top-Level Button", SDL_MENU_BUTTON, MENU_BAR_TOP_LEVEL_BUTTON);
70-
SDL_DisableMenuItem(disabled);
71-
69+
SDL_assert(!SDL_CreateMenuItem(bar, "Incognito", SDL_MENU_CHECKABLE, MENU_BAR_INCOGNITO));
70+
7271
SDL_CreateMenuItem(bar, "Exit", SDL_MENU_BUTTON, MENU_BAR_EXIT);
7372
}
7473

@@ -131,11 +130,19 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event) {
131130
SDL_MenuItemChecked(checkable, &is_checked);
132131
if (is_checked) {
133132
SDL_UncheckMenuItem(checkable);
134-
SDL_EnableMenuItem(disabled);
135133
}
136134
else {
137135
SDL_CheckMenuItem(checkable);
138-
SDL_DisableMenuItem(disabled);
136+
}
137+
138+
bool is_enabled = false;
139+
SDL_MenuItemEnabled(new_window, &is_enabled);
140+
141+
if (is_enabled) {
142+
SDL_DisableMenuItem(new_window);
143+
}
144+
else {
145+
SDL_EnableMenuItem(new_window);
139146
}
140147
break;
141148
}

src/video/SDL_video.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6196,11 +6196,6 @@ bool SDL_MenuItemChecked(SDL_MenuItem* menu_item, bool* checked)
61966196
bool SDL_MenuItemEnabled(SDL_MenuItem *menu_item, bool *enabled)
61976197
{
61986198
CHECK_MENUITEM_MAGIC(menu_item, false);
6199-
if (menu_item->common.type != SDL_MENU_CHECKABLE) {
6200-
SDL_SetError("menu_item isn't a checkable.");
6201-
return false;
6202-
}
6203-
62046199
return _this->MenuItemEnabled(menu_item, enabled);
62056200
}
62066201

@@ -6219,10 +6214,10 @@ bool SDL_EnableMenuItem(SDL_MenuItem* menu_item)
62196214
bool SDL_DisableMenuItem(SDL_MenuItem *menu_item)
62206215
{
62216216
CHECK_MENUITEM_MAGIC(menu_item, false);
6222-
if (menu_item->common.type == SDL_MENU || menu_item->common.type == SDL_MENUBAR) {
6223-
SDL_SetError("menu_item can't be a menu.");
6224-
return false;
6225-
}
6217+
// if (menu_item->common.type == SDL_MENU || menu_item->common.type == SDL_MENUBAR) {
6218+
// SDL_SetError("menu_item can't be a menu.");
6219+
// return false;
6220+
// }
62266221

62276222
return _this->DisableMenuItem(menu_item);
62286223
}

src/video/cocoa/SDL_cocoavideo.m

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,8 @@ bool Cocoa_CreateMenuBar(SDL_MenuBar *menu_bar)
380380

381381
NSMenuItem *appMenuItem = [NSMenuItem new];
382382
NSMenu *appMenu = [NSMenu new];
383-
//[appMenu addItemWithTitle: @"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
383+
[appMenu setAutoenablesItems:false];
384+
384385
[appMenuItem setSubmenu:appMenu];
385386

386387
[platform_menu->menu addItem:appMenuItem];
@@ -401,7 +402,7 @@ bool Cocoa_CreateMenuItemAt(SDL_MenuItem *menu_item, size_t index, const char *n
401402

402403
if (menu_item->common.type == SDL_MENU) {
403404
platform_data->menu = [[NSMenu alloc] initWithTitle:name_ns];
404-
[platform_data->menu setAutoenablesItems:true];
405+
[platform_data->menu setAutoenablesItems:false];
405406
platform_data->menu_item = [NSMenuItem new];
406407
[platform_data->menu_item setTitle:name_ns];
407408
[platform_data->menu_item setSubmenu: platform_data->menu];
@@ -430,45 +431,52 @@ bool Cocoa_CheckMenuItem(SDL_MenuItem *menu_item)
430431
{
431432
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
432433
[platform_data->menu_item setState:NSControlStateValueOn];
434+
[platform_data->menu update];
433435
return true;
434436
}
435437

436438
bool Cocoa_UncheckMenuItem(SDL_MenuItem *menu_item)
437439
{
438440
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
439441
[platform_data->menu_item setState:NSControlStateValueOff];
442+
[platform_data->menu update];
440443
return true;
441444
}
442445

443446
bool Cocoa_MenuItemChecked(SDL_MenuItem *menu_item, bool *checked)
444447
{
445448
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
446-
return [platform_data->menu_item state] == NSControlStateValueOn;
449+
NSControlStateValue state = [platform_data->menu_item state];
450+
*checked = state == NSControlStateValueOn;
451+
return true;
447452
}
448453

449454
bool Cocoa_MenuItemEnabled(SDL_MenuItem *menu_item, bool *enabled)
450455
{
451456
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
452-
return [platform_data->menu_item isEnabled];
457+
*enabled = [platform_data->menu_item isEnabled];
458+
return true;
453459
}
454460

455461
bool Cocoa_EnableMenuItem(SDL_MenuItem *menu_item)
456462
{
457463
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
458464
[platform_data->menu_item setEnabled:true];
465+
[platform_data->menu update];
459466
return true;
460467
}
461468

462469
bool Cocoa_DisableMenuItem(SDL_MenuItem *menu_item)
463470
{
464471
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
465472
[platform_data->menu_item setEnabled:false];
473+
[platform_data->menu update];
466474
return true;
467475
}
468476

469477
bool Cocoa_DestroyMenuItem(SDL_MenuItem *menu_item)
470478
{
471-
PlatformMenuData* platform_data = (__bridge PlatformMenuData*)menu_item->common.platform_data;
479+
PlatformMenuData* platform_data = CFBridgingRelease(menu_item->common.platform_data);
472480
PlatformMenuData* parent_platform_data = (__bridge id _Nullable)(menu_item->common.parent->common.platform_data);
473481
[parent_platform_data->menu removeItem:platform_data->menu_item];
474482
return false;

0 commit comments

Comments
 (0)