| Index: chrome/browser/renderer_host/render_widget_host_view_mac.mm
|
| diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.mm b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
|
| index e6dc1fa88441b2e5d43a78fd009eaa6c1110631b..4a05273f36a27d9b9c0058d9d169bfe13498a09b 100644
|
| --- a/chrome/browser/renderer_host/render_widget_host_view_mac.mm
|
| +++ b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
|
| @@ -29,6 +29,7 @@ using WebKit::WebMouseWheelEvent;
|
| @interface RenderWidgetHostViewCocoa (Private)
|
| + (BOOL)shouldAutohideCursorForEvent:(NSEvent*)event;
|
| - (id)initWithRenderWidgetHostViewMac:(RenderWidgetHostViewMac*)r;
|
| +- (void)keyEvent:(NSEvent *)theEvent wasKeyEquivalent:(BOOL)equiv;
|
| - (void)cancelChildPopups;
|
| @end
|
|
|
| @@ -536,7 +537,41 @@ void RenderWidgetHostViewMac::SetBackground(const SkBitmap& background) {
|
| renderWidgetHostView_->render_widget_host_->ForwardMouseEvent(event);
|
| }
|
|
|
| +- (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
|
| + // |performKeyEquivalent:| is sent to the whole view tree, not only down the
|
| + // responder chain. We only want to handle key equivalents if we're first
|
| + // responder.
|
| + if ([[self window] firstResponder] != self)
|
| + return NO;
|
| +
|
| + // If we return |NO| from this function, cocoa will send the key event to
|
| + // the menu and only if the menu does not process the event to |keyDown:|. We
|
| + // want to send the event to a renderer _before_ sending it to the menu, so
|
| + // we need to return |YES| for all events that might be swallowed by the menu.
|
| + // We do not return |YES| for every keypress because we don't get |keyDown:|
|
| + // events for keys that we handle this way.
|
| + NSUInteger modifierFlags = [theEvent modifierFlags];
|
| + if ((modifierFlags & NSCommandKeyMask) == 0) {
|
| + // Make sure the menu does not contain key equivalents that don't
|
| + // contain cmd.
|
| + DCHECK(![[NSApp mainMenu] performKeyEquivalent:theEvent]);
|
| + return NO;
|
| + }
|
| +
|
| + // Command key combinations are sent via performKeyEquivalent rather than
|
| + // keyDown:. We just forward this on and if WebCore doesn't want to handle
|
| + // it, we let the TabContentsView figure out how to reinject it.
|
| + [self keyEvent:theEvent wasKeyEquivalent:YES];
|
| + return YES;
|
| +}
|
| +
|
| - (void)keyEvent:(NSEvent*)theEvent {
|
| + [self keyEvent:theEvent wasKeyEquivalent:NO];
|
| +}
|
| +
|
| +- (void)keyEvent:(NSEvent *)theEvent wasKeyEquivalent:(BOOL)equiv {
|
| + DCHECK([theEvent type] != NSKeyDown ||
|
| + !equiv == !([theEvent modifierFlags] & NSCommandKeyMask));
|
| // TODO(avi): Possibly kill self? See RenderWidgetHostViewWin::OnKeyEvent and
|
| // http://b/issue?id=1192881 .
|
|
|
|
|