Merge pull request #227 from electron/redispatch-events

Redispatch key events to handle native shortcuts
This commit is contained in:
Cheng Zhao 2016-06-19 11:12:32 +00:00 committed by GitHub
commit a5ed7b73e1
4 changed files with 57 additions and 2 deletions

View file

@ -3,9 +3,9 @@
#include "browser/inspectable_web_contents_impl.h"
#include "browser/inspectable_web_contents_view_delegate.h"
#include "browser/inspectable_web_contents_view_mac.h"
#include "browser/mac/event_dispatching_window.h"
#include "content/public/browser/render_widget_host_view.h"
#import "ui/base/cocoa/underlay_opengl_hosting_window.h"
#include "ui/gfx/mac/scoped_cocoa_disable_screen_updates.h"
using namespace brightray;
@ -132,7 +132,7 @@ using namespace brightray;
NSMiniaturizableWindowMask | NSResizableWindowMask |
NSTexturedBackgroundWindowMask |
NSUnifiedTitleAndToolbarWindowMask;
devtools_window_.reset([[UnderlayOpenGLHostingWindow alloc]
devtools_window_.reset([[EventDispatchingWindow alloc]
initWithContentRect:NSMakeRect(0, 0, 800, 600)
styleMask:styleMask
backing:NSBackingStoreBuffered

View file

@ -0,0 +1,19 @@
// Copyright (c) 2016 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef BROWSER_EVENT_DISPATCHING_WINDOW_H_
#define BROWSER_EVENT_DISPATCHING_WINDOW_H_
#import "ui/base/cocoa/underlay_opengl_hosting_window.h"
@interface EventDispatchingWindow : UnderlayOpenGLHostingWindow {
@private
BOOL redispatchingEvent_;
}
- (void)redispatchKeyEvent:(NSEvent*)event;
@end
#endif // BROWSER_EVENT_DISPATCHING_WINDOW_H_

View file

@ -0,0 +1,34 @@
// Copyright (c) 2016 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "browser/mac/event_dispatching_window.h"
@implementation EventDispatchingWindow
- (void)sendEvent:(NSEvent*)event {
if (!redispatchingEvent_)
[super sendEvent:event];
}
- (BOOL)performKeyEquivalent:(NSEvent*)event {
if (redispatchingEvent_)
return NO;
else
return [super performKeyEquivalent:event];
}
- (void)redispatchKeyEvent:(NSEvent*)event {
NSEventType eventType = [event type];
if (eventType != NSKeyDown && eventType != NSKeyUp &&
eventType != NSFlagsChanged) {
return;
}
// Redispatch the event.
redispatchingEvent_ = YES;
[NSApp sendEvent:event];
redispatchingEvent_ = NO;
}
@end

View file

@ -35,6 +35,8 @@
'browser/mac/bry_inspectable_web_contents_view.mm',
'browser/mac/cocoa_notification.h',
'browser/mac/cocoa_notification.mm',
'browser/mac/event_dispatching_window.h',
'browser/mac/event_dispatching_window.mm',
'browser/mac/notification_center_delegate.h',
'browser/mac/notification_center_delegate.mm',
'browser/mac/notification_presenter_mac.h',