Index: chrome/browser/global_keyboard_shortcuts_mac.mm |
diff --git a/chrome/browser/global_keyboard_shortcuts_mac.mm b/chrome/browser/global_keyboard_shortcuts_mac.mm |
index e197c07c39cfc23ce95fb2536f0edefb821ce2c2..0a0f91ef5fd42beff2c3669009894698096266bf 100644 |
--- a/chrome/browser/global_keyboard_shortcuts_mac.mm |
+++ b/chrome/browser/global_keyboard_shortcuts_mac.mm |
@@ -33,6 +33,16 @@ NSMenuItem* FindMenuItem(NSEvent* key, NSMenu* menu) { |
return result; |
} |
+#if DCHECK_IS_ON() |
+// The three main shortcut tables have been mostly migrated to |
+// accelerator_table.cc, and should be not used to remove redundant use. |
+bool IsMacViews() { |
+ // FIXME(mblsha): What's the best way to check for that, that won't trigger on |
tapted
2016/10/26 08:40:47
We should just move the tables into separate files
themblsha
2016/10/26 17:10:03
The normal tables are also used by the
-[ChromeC
tapted
2016/10/28 04:59:48
I think we can still use ChromeCommandDispatcherDe
themblsha
2016/10/28 17:32:22
That's a great idea and is much simpler than what
|
+ // normal Cocoa builds? |
+ return NSClassFromString(@"NativeWidgetMacNSWindow") != nil; |
+} |
+#endif // DCHECK_IS_ON() |
+ |
} // namespace |
// Basically, there are two kinds of keyboard shortcuts: Ones that should work |
@@ -45,6 +55,7 @@ NSMenuItem* FindMenuItem(NSEvent* key, NSMenu* menu) { |
const KeyboardShortcutData* GetWindowKeyboardShortcutTable( |
size_t* num_entries) { |
+ DCHECK(!IsMacViews()); |
static const KeyboardShortcutData keyboard_shortcuts[] = { |
// cmd shift cntrl option |
// --- ----- ----- ------ |
@@ -86,6 +97,7 @@ const KeyboardShortcutData* GetWindowKeyboardShortcutTable( |
const KeyboardShortcutData* GetDelayedWindowKeyboardShortcutTable( |
size_t* num_entries) { |
+ DCHECK(!IsMacViews()); |
static const KeyboardShortcutData keyboard_shortcuts[] = { |
//cmd shift cntrl option |
//--- ----- ----- ------ |
@@ -99,6 +111,7 @@ const KeyboardShortcutData* GetDelayedWindowKeyboardShortcutTable( |
const KeyboardShortcutData* GetBrowserKeyboardShortcutTable( |
size_t* num_entries) { |
+ DCHECK(!IsMacViews()); |
static const KeyboardShortcutData keyboard_shortcuts[] = { |
//cmd shift cntrl option |
//--- ----- ----- ------ |
@@ -114,6 +127,24 @@ const KeyboardShortcutData* GetBrowserKeyboardShortcutTable( |
return keyboard_shortcuts; |
} |
+// Lists shortcuts that are impossible to migrate to accelerator_table.cc |
+// (crbug.com/25946). |
+const KeyboardShortcutData* GetMacViewsKeyboardShortcutTable( |
+ size_t* num_entries) { |
+ static const KeyboardShortcutData keyboard_shortcuts[] = { |
+ // cmd shift cntrl option |
+ // --- ----- ----- ------ |
+ // '{' / '}' characters should be matched earlier than virtual key code |
+ // (therefore we can match alt-8 as '{' on german keyboards). |
+ {true, false, false, false, 0, '}', IDC_SELECT_NEXT_TAB}, |
+ {true, false, false, false, 0, '{', IDC_SELECT_PREVIOUS_TAB}, |
+ }; |
+ |
+ *num_entries = arraysize(keyboard_shortcuts); |
+ |
+ return keyboard_shortcuts; |
+} |
+ |
static bool MatchesEventForKeyboardShortcut( |
const KeyboardShortcutData& shortcut, |
bool command_key, bool shift_key, bool cntrl_key, bool opt_key, |
@@ -195,7 +226,22 @@ int CommandForBrowserKeyboardShortcut( |
key_char); |
} |
-int CommandForKeyEvent(NSEvent* event) { |
+int CommandForMacViewsKeyboardShortcut( |
+ bool command_key, bool shift_key, bool cntrl_key, bool opt_key, |
+ int vkey_code, unichar key_char) { |
+ return CommandForKeyboardShortcut(GetMacViewsKeyboardShortcutTable, |
+ command_key, shift_key, |
+ cntrl_key, opt_key, vkey_code, |
+ key_char); |
+} |
+ |
+int CommandForKeyEvent(NSEvent* event, |
+ int (^get_secondary_shortcuts_block)(bool cmdKey, |
+ bool shiftKey, |
+ bool cntrlKey, |
+ bool optKey, |
+ int keyCode, |
+ unichar keyChar)) { |
if ([event type] != NSKeyDown) |
return -1; |
@@ -224,17 +270,32 @@ int CommandForKeyEvent(NSEvent* event) { |
const int keyCode = [event keyCode]; |
const unichar keyChar = KeyCharacterForEvent(event); |
- int cmdNum = CommandForWindowKeyboardShortcut( |
- cmdKey, shiftKey, cntrlKey, optKey, keyCode, keyChar); |
- if (cmdNum != -1) |
- return cmdNum; |
+ return get_secondary_shortcuts_block(cmdKey, shiftKey, cntrlKey, optKey, |
+ keyCode, keyChar); |
+} |
- cmdNum = CommandForBrowserKeyboardShortcut( |
- cmdKey, shiftKey, cntrlKey, optKey, keyCode, keyChar); |
- if (cmdNum != -1) |
- return cmdNum; |
+int CommandForKeyEvent(NSEvent* event) { |
+ return CommandForKeyEvent( |
+ event, ^int(bool cmdKey, bool shiftKey, bool cntrlKey, bool optKey, |
tapted
2016/10/26 08:40:47
I don't think this needs to be a block -- there's
themblsha
2016/10/28 17:32:22
Ah, yes, the implicit capturing of blocks. Probabl
|
+ int keyCode, unichar keyChar) { |
+ int cmdNum = CommandForWindowKeyboardShortcut( |
+ cmdKey, shiftKey, cntrlKey, optKey, keyCode, keyChar); |
+ if (cmdNum != -1) |
+ return cmdNum; |
+ |
+ cmdNum = CommandForBrowserKeyboardShortcut(cmdKey, shiftKey, cntrlKey, |
+ optKey, keyCode, keyChar); |
+ return cmdNum; |
+ }); |
+} |
- return -1; |
+int CommandForKeyEventOnMacViews(NSEvent* event) { |
+ return CommandForKeyEvent( |
+ event, ^int(bool cmdKey, bool shiftKey, bool cntrlKey, bool optKey, |
+ int keyCode, unichar keyChar) { |
+ return CommandForMacViewsKeyboardShortcut(cmdKey, shiftKey, cntrlKey, |
+ optKey, keyCode, keyChar); |
+ }); |
} |
unichar KeyCharacterForEvent(NSEvent* event) { |