From 0f219bae4bc7cee997e2eb242d008a3cc84dd15c Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Tue, 9 Jun 2020 12:50:30 +0700 Subject: [PATCH] Set (visible) key equivalents for file browser context menu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some of the items require the key equivalent to be set as “inactive” as menu item keys are “global” and thus need to be unique, and can be triggered even when the view containing the context menu is not active. --- .../src/FileBrowserViewController.mm | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Frameworks/FileBrowser/src/FileBrowserViewController.mm b/Frameworks/FileBrowser/src/FileBrowserViewController.mm index 02f5c37b..ae9412bf 100644 --- a/Frameworks/FileBrowser/src/FileBrowserViewController.mm +++ b/Frameworks/FileBrowser/src/FileBrowserViewController.mm @@ -477,23 +477,39 @@ static NSMutableIndexSet* MutableLongestCommonSubsequence (NSArray* lhs, NSArray { @"Add to Favorites", @selector(addSelectedEntriesToFavorites:) }, { @"Remove From Favorites", @selector(removeSelectedEntriesFromFavorites:) }, { /* -------- */ }, - { @"Move to Trash", @selector(delete:) }, + { @"Move to Trash", @selector(delete:), .key = NSBackspaceCharacter }, { /* -------- */ .ref = &insertBundleItemsMenuItem }, { /* -------- */ }, { @"Copy", @selector(copy:) }, { @"Copy as Pathname", @selector(copyAsPathname:), @"", NSEventModifierFlagOption, .alternate = YES, .tag = kRequiresSelectionTag }, - { @"Paste", @selector(paste:), }, + { @"Paste", @selector(paste:), @"v" }, { @"Move Items Here", @selector(pasteNext:), @"v", NSEventModifierFlagCommand|NSEventModifierFlagOption }, { /* -------- */ }, { @"Finder Tag", .ref = &finderTagsMenuItem, .tag = kRequiresSelectionTag }, { /* -------- */ }, - { @"Undo", @selector(undo:) }, - { @"Redo", @selector(redo:) }, + { @"Undo", @selector(undo:), @"z" }, + { @"Redo", @selector(redo:), @"z", NSEventModifierFlagCommand|NSEventModifierFlagShift }, { /* -------- */ }, }; MBCreateMenu(items, menu); + std::map inactiveKeyEquivalents = { + { @selector(openSelectedItems:), "@" + utf8::to_s(NSDownArrowFunctionKey) }, + { @selector(editSelectedEntries:), "" + utf8::to_s(NSCarriageReturnCharacter) }, + { @selector(duplicateSelectedEntries:), "@d" }, + { @selector(toggleQuickLookPreview:), " " }, + { @selector(copy:), "@c" }, + { @selector(copyAsPathname:), "~@c" }, + }; + + for(NSMenuItem* menuItem in menu.itemArray) + { + auto it = inactiveKeyEquivalents.find(menuItem.action); + if(it != inactiveKeyEquivalents.end()) + [menuItem setInactiveKeyEquivalentCxxString:it->second]; + } + if(self.previewableItems.count == 0) { NSInteger i = [menu indexOfItemWithTag:kRequiresSelectionTag]; @@ -1018,7 +1034,7 @@ static NSMutableIndexSet* MutableLongestCommonSubsequence (NSArray* lhs, NSArray case 1: items = [NSString stringWithFormat:@" “%@”", previewableItems.firstObject.localizedName]; break; default: items = [NSString stringWithFormat:@" %ld Items", previewableItems.count]; break; } - menuItem.dynamicTitle = [NSString stringWithFormat:info.format, items]; + [menuItem updateTitle:[NSString stringWithFormat:info.format, items]]; } }