Skip to content

Commit

Permalink
Assign Copy keyboard shortcut to 'copy clean link' (Mac App Menu part)
Browse files Browse the repository at this point in the history
  • Loading branch information
spylogsster committed Jan 20, 2023
1 parent 0945438 commit 8c41151
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 1 deletion.
1 change: 1 addition & 0 deletions browser/brave_app_controller_mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

// Manages logic to switch hotkey between copy and copy clean link item.
@interface BraveAppController : AppController {
NSMenuItem* _copyMenuItem;
NSMenuItem* _copyCleanLinkMenuItem;
}

Expand Down
21 changes: 20 additions & 1 deletion browser/brave_app_controller_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
Expand All @@ -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];
}
}

Expand Down
21 changes: 21 additions & 0 deletions browser/brave_app_controller_mac_browsertest.mm
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,24 @@
[[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] submenu],
base::scoped_policy::RETAIN);

base::scoped_nsobject<NSMenuItem> copy_item(
[edit_submenu itemWithTag:IDC_CONTENT_CONTEXT_COPY],
base::scoped_policy::RETAIN);

base::scoped_nsobject<NSMenuItem> clean_link_menu_item(
[edit_submenu itemWithTag:IDC_COPY_CLEAN_LINK],
base::scoped_policy::RETAIN);

[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) {
Expand All @@ -75,13 +86,23 @@
[[[NSApp mainMenu] itemWithTag:IDC_EDIT_MENU] submenu],
base::scoped_policy::RETAIN);

base::scoped_nsobject<NSMenuItem> copy_item(
[edit_submenu itemWithTag:IDC_CONTENT_CONTEXT_COPY],
base::scoped_policy::RETAIN);

base::scoped_nsobject<NSMenuItem> clean_link_menu_item(
[edit_submenu itemWithTag:IDC_COPY_CLEAN_LINK],
base::scoped_policy::RETAIN);

[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,
Expand Down

0 comments on commit 8c41151

Please sign in to comment.