From 83d4f4cb3d7b0da2fbfa7d07d97e3929005279b2 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Mon, 21 Aug 2023 22:01:01 +0200 Subject: MainMenu: Add missing Command modifier if missing from Font menu items I don't understand why, but on Mac OS X 10.15, three menu items in the automatically-generated Font menu don't have a Command key modifier. Detect when this happens and add the modifier to the mask. These menu items correctly had a Command key modifier when I tested the code on macOS 13. --- src/MainMenu.m | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/MainMenu.m b/src/MainMenu.m index 8e4f1da..481f5c6 100644 --- a/src/MainMenu.m +++ b/src/MainMenu.m @@ -464,29 +464,29 @@ BOOL MainMenuNSMenuItemHasKeyEquivalentModifierMaskCommand(NSMenuItem *menu_item return YES; } - // NSLog(@"MainMenuNSMenuItemHasKeyEquivalentModifierMaskCommand mask: %lu", [menu_item keyEquivalentModifierMask]); - // NSLog(@"MainMenuNSMenuItemHasKeyEquivalentModifierMaskCommand NO"); return NO; } -void MainMenuFixFontMenuKeyEquivalentModifierMask(NSMenu *font_menu) +void MainMenuAddMissingCommandModifier(NSMenuItem *menu_item) { - NSMenuItem *show_colors_menu_item = [font_menu itemWithTitle:@"Show Colors"]; - - if ( - !MainMenuNSMenuItemHasKeyEquivalentModifierMaskCommand( - show_colors_menu_item - ) - ) { - // [show_colors_menu_item setKeyEquivalent:@"C"]; - // NSLog(@"colors: %@", [show_colors_menu_item keyEquivalent]); - // [show_colors_menu_item setKeyEquivalentModifierMask:NSEventModifierFlagCommand]; - [show_colors_menu_item - setKeyEquivalentModifierMask: - NSEventModifierFlagCommand - | [show_colors_menu_item keyEquivalentModifierMask]]; - // NSLog(@"show_colors_menu_item mask: %lu", [show_colors_menu_item keyEquivalentModifierMask]); + if (MainMenuNSMenuItemHasKeyEquivalentModifierMaskCommand(menu_item)) { + return; } + + [menu_item + setKeyEquivalentModifierMask: + NSEventModifierFlagCommand | [menu_item keyEquivalentModifierMask]]; +} + +// On Mac OS X 10.15, some menu items did not include the Apple key in the +// Font menu item's modifier mask. +// +// Fix this by adding the modifier if necessary. +void MainMenuFixFontMenuKeyEquivalentModifierMask(NSMenu *font_menu) +{ + MainMenuAddMissingCommandModifier([font_menu itemWithTitle:@"Show Colors"]); + MainMenuAddMissingCommandModifier([font_menu itemWithTitle:@"Copy Style"]); + MainMenuAddMissingCommandModifier([font_menu itemWithTitle:@"Paste Style"]); } NSMenuItem *MainMenuCreateFormatMenuItem() @@ -503,10 +503,7 @@ NSMenuItem *MainMenuCreateFormatMenuItem() keyEquivalent:@""]; NSFontManager *font_manager = [NSFontManager sharedFontManager]; - // NSMenu *font_menu = [[NSMenu alloc] initWithTitle:@"Font"]; NSMenu *font_menu = [font_manager fontMenu:YES]; - NSLog(@"Font menu: %@", font_menu); - NSLog(@"Font menu: %lu", [[font_menu itemAtIndex:14] keyEquivalentModifierMask] & NSEventModifierFlagCommand); [format_menu setSubmenu:font_menu forItem:font_menu_item]; -- cgit v1.2.3