summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/chrome_browser_window.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa/chrome_browser_window.mm')
-rw-r--r--chrome/browser/cocoa/chrome_browser_window.mm32
1 files changed, 30 insertions, 2 deletions
diff --git a/chrome/browser/cocoa/chrome_browser_window.mm b/chrome/browser/cocoa/chrome_browser_window.mm
index 4f2f859..a6df8d5 100644
--- a/chrome/browser/cocoa/chrome_browser_window.mm
+++ b/chrome/browser/cocoa/chrome_browser_window.mm
@@ -6,11 +6,15 @@
#include "base/logging.h"
#import "chrome/browser/cocoa/browser_window_controller.h"
+#import "chrome/browser/renderer_host/render_widget_host_view_mac.h"
#include "chrome/browser/global_keyboard_shortcuts_mac.h"
+typedef int (*KeyToCommandMapper)(bool, bool, bool, int);
+
@implementation ChromeBrowserWindow
-- (BOOL)performKeyEquivalent:(NSEvent*)event {
+- (BOOL)handleExtraKeyboardShortcut:(NSEvent*)event fromTable:
+ (KeyToCommandMapper)commandForKeyboardShortcut {
// Extract info from |event|.
NSUInteger modifers = [event modifierFlags];
const bool cmdKey = modifers & NSCommandKeyMask;
@@ -18,7 +22,7 @@
const bool cntrlKey = modifers & NSControlKeyMask;
const int keyCode = [event keyCode];
- int cmdNum = CommandForKeyboardShortcut(cmdKey, shiftKey, cntrlKey,
+ int cmdNum = commandForKeyboardShortcut(cmdKey, shiftKey, cntrlKey,
keyCode);
BrowserWindowController* controller =
@@ -31,7 +35,31 @@
[controller executeCommand:cmdNum];
return YES;
}
+ return NO;
+}
+
+- (BOOL)handleExtraWindowKeyboardShortcut:(NSEvent*)event {
+ return [self handleExtraKeyboardShortcut:event
+ fromTable:CommandForWindowKeyboardShortcut];
+}
+- (BOOL)handleExtraBrowserKeyboardShortcut:(NSEvent*)event {
+ return [self handleExtraKeyboardShortcut:event
+ fromTable:CommandForBrowserKeyboardShortcut];
+}
+
+- (BOOL)performKeyEquivalent:(NSEvent*)event {
+ // Give the web site a chance to handle the event. If it doesn't want to
+ // handle it, it will call us back with one of the |handle*| methods above.
+ NSResponder* r = [self firstResponder];
+ if ([r isKindOfClass:[RenderWidgetHostViewCocoa class]])
+ return [r performKeyEquivalent:event];
+
+ // Handle per-window shortcuts like cmd-1, but do not handle browser-level
+ // shortcuts like cmd-left (else, cmd-left would do history navigation even
+ // if e.g. the Omnibox has focus).
+ if ([self handleExtraWindowKeyboardShortcut:event])
+ return YES;
return [super performKeyEquivalent:event];
}