Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assign Copy keyboard shortcut to 'copy clean link' (Mac App Menu part) #16746

Merged
merged 1 commit into from
Jan 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I think this method can have bool args whether copy item or not.

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