From c2c003a620ffe1dfd2095029131181876229f01d Mon Sep 17 00:00:00 2001 From: Cepera Date: Sat, 21 Jan 2023 16:03:27 +0300 Subject: [PATCH] Assign Copy keyboard shortcut to 'copy clean link' (Mac App Menu part) (#16746) --- browser/brave_app_controller_mac.h | 1 + browser/brave_app_controller_mac.mm | 21 ++++++++++++++++++- .../brave_app_controller_mac_browsertest.mm | 21 +++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/browser/brave_app_controller_mac.h b/browser/brave_app_controller_mac.h index b92f6ac1440c..1738cd698f08 100644 --- a/browser/brave_app_controller_mac.h +++ b/browser/brave_app_controller_mac.h @@ -10,6 +10,7 @@ // Manages logic to switch hotkey between copy and copy clean link item. @interface BraveAppController : AppController { + NSMenuItem* _copyMenuItem; NSMenuItem* _copyCleanLinkMenuItem; } diff --git a/browser/brave_app_controller_mac.mm b/browser/brave_app_controller_mac.mm index f4d21f51f9fb..75908fce200f 100644 --- a/browser/brave_app_controller_mac.mm +++ b/browser/brave_app_controller_mac.mm @@ -18,12 +18,16 @@ - (void)mainMenuCreated { [super mainMenuCreated]; NSMenu* editMenu = [[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] submenu]; + _copyMenuItem = [editMenu itemWithTag:IDC_CONTENT_CONTEXT_COPY]; + DCHECK(_copyMenuItem); + [[_copyMenuItem menu] setDelegate:self]; _copyCleanLinkMenuItem = [editMenu itemWithTag:IDC_COPY_CLEAN_LINK]; DCHECK(_copyCleanLinkMenuItem); [[_copyCleanLinkMenuItem menu] setDelegate:self]; } - (void)dealloc { + [[_copyMenuItem menu] setDelegate:nil]; [[_copyCleanLinkMenuItem menu] setDelegate:nil]; [super dealloc]; } @@ -36,15 +40,30 @@ - (BOOL)shouldShowCleanLinkItem { return brave::HasSelectedURL([self getBrowser]); } +- (void)setKeyEquivalentToItem:(NSMenuItem*)item { + auto* hotkeyItem = + item == _copyMenuItem ? _copyMenuItem : _copyCleanLinkMenuItem; + auto* noHotkeyItem = + item == _copyMenuItem ? _copyCleanLinkMenuItem : _copyMenuItem; + + [hotkeyItem setKeyEquivalent:@"c"]; + [hotkeyItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand]; + + [noHotkeyItem setKeyEquivalent:@""]; + [noHotkeyItem setKeyEquivalentModifierMask:0]; +} + - (void)menuNeedsUpdate:(NSMenu*)menu { - if (menu != [_copyCleanLinkMenuItem menu]) { + if (menu != [_copyMenuItem menu] && menu != [_copyCleanLinkMenuItem menu]) { [super menuNeedsUpdate:menu]; return; } if ([self shouldShowCleanLinkItem]) { [_copyCleanLinkMenuItem setHidden:NO]; + [self setKeyEquivalentToItem:_copyCleanLinkMenuItem]; } else { [_copyCleanLinkMenuItem setHidden:YES]; + [self setKeyEquivalentToItem:_copyMenuItem]; } } diff --git a/browser/brave_app_controller_mac_browsertest.mm b/browser/brave_app_controller_mac_browsertest.mm index 71ffbf09a140..80deb68ffd35 100644 --- a/browser/brave_app_controller_mac_browsertest.mm +++ b/browser/brave_app_controller_mac_browsertest.mm @@ -52,6 +52,10 @@ [[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] submenu], base::scoped_policy::RETAIN); + base::scoped_nsobject copy_item( + [edit_submenu itemWithTag:IDC_CONTENT_CONTEXT_COPY], + base::scoped_policy::RETAIN); + base::scoped_nsobject clean_link_menu_item( [edit_submenu itemWithTag:IDC_COPY_CLEAN_LINK], base::scoped_policy::RETAIN); @@ -59,6 +63,13 @@ [ac menuNeedsUpdate:[clean_link_menu_item menu]]; base::RunLoop().RunUntilIdle(); EXPECT_FALSE([clean_link_menu_item isHidden]); + + EXPECT_TRUE([[clean_link_menu_item keyEquivalent] isEqualToString:@"c"]); + EXPECT_EQ([clean_link_menu_item keyEquivalentModifierMask], + NSEventModifierFlagCommand); + + EXPECT_TRUE([[copy_item keyEquivalent] isEqualToString:@""]); + EXPECT_EQ([copy_item keyEquivalentModifierMask], 0UL); } IN_PROC_BROWSER_TEST_F(BraveAppControllerBrowserTest, CopyLinkItemNotVisible) { @@ -75,6 +86,10 @@ [[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] submenu], base::scoped_policy::RETAIN); + base::scoped_nsobject copy_item( + [edit_submenu itemWithTag:IDC_CONTENT_CONTEXT_COPY], + base::scoped_policy::RETAIN); + base::scoped_nsobject clean_link_menu_item( [edit_submenu itemWithTag:IDC_COPY_CLEAN_LINK], base::scoped_policy::RETAIN); @@ -82,6 +97,12 @@ [ac menuNeedsUpdate:[clean_link_menu_item menu]]; EXPECT_TRUE([clean_link_menu_item isHidden]); + + EXPECT_TRUE([[clean_link_menu_item keyEquivalent] isEqualToString:@""]); + EXPECT_EQ([clean_link_menu_item keyEquivalentModifierMask], 0UL); + + EXPECT_TRUE([[copy_item keyEquivalent] isEqualToString:@"c"]); + EXPECT_EQ([copy_item keyEquivalentModifierMask], NSEventModifierFlagCommand); } IN_PROC_BROWSER_TEST_F(BraveAppControllerBrowserTest,