From: Kevin Sawicki Date: Wed, 15 Jun 2016 20:55:19 +0000 (-0700) Subject: Redispatch events to handle native shortcuts X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a2bbfea9e0cb900c16b0c08906bee3fe0b795a14;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git Redispatch events to handle native shortcuts --- diff --git a/atom/browser/common_web_contents_delegate_mac.mm b/atom/browser/common_web_contents_delegate_mac.mm index 69117f1..eeb87f2 100644 --- a/atom/browser/common_web_contents_delegate_mac.mm +++ b/atom/browser/common_web_contents_delegate_mac.mm @@ -6,6 +6,7 @@ #import +#include "atom/browser/native_window_mac.h" #include "content/public/browser/native_web_keyboard_event.h" #include "ui/events/keycodes/keyboard_codes.h" @@ -22,17 +23,9 @@ void CommonWebContentsDelegate::HandleKeyboardEvent( if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) ExitFullscreenModeForTab(source); - BOOL handled = [[NSApp mainMenu] performKeyEquivalent:event.os_event]; - if (!handled && event.os_event.window) { - // Handle the cmd+~ shortcut. - if ((event.os_event.modifierFlags & NSCommandKeyMask) /* cmd */ && - (event.os_event.keyCode == 50 /* ~ */)) { - if (event.os_event.modifierFlags & NSShiftKeyMask) { - [NSApp sendAction:@selector(_cycleWindowsReversed:) to:nil from:nil]; - } else { - [NSApp sendAction:@selector(_cycleWindows:) to:nil from:nil]; - } - } + if (event.os_event.window) { + AtomNSWindow* native_window = static_cast(event.os_event.window); + [native_window redispatchKeyEvent:event.os_event]; } } diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 899043f..bf8125f 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -152,4 +152,21 @@ class NativeWindowMac : public NativeWindow { } // namespace atom +@interface AtomNSWindow : NSWindow { + @private + atom::NativeWindowMac* shell_; + bool enable_larger_than_screen_; + BOOL redispatchingEvent_; + BOOL eventHandled_; +} +@property BOOL acceptsFirstMouse; +@property BOOL disableAutoHideCursor; +@property BOOL disableKeyOrMainWindow; + +- (void)setShell:(atom::NativeWindowMac*)shell; +- (void)setEnableLargerThanScreen:(bool)enable; +- (BOOL)redispatchKeyEvent:(NSEvent*)event; +- (BOOL)performKeyEquivalent:(NSEvent*)theEvent; +@end + #endif // ATOM_BROWSER_NATIVE_WINDOW_MAC_H_ diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 0a64302..fe4cba4 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -270,19 +270,6 @@ bool ScopedDisableResize::disable_resize_ = false; @end -@interface AtomNSWindow : NSWindow { - @private - atom::NativeWindowMac* shell_; - bool enable_larger_than_screen_; -} -@property BOOL acceptsFirstMouse; -@property BOOL disableAutoHideCursor; -@property BOOL disableKeyOrMainWindow; - -- (void)setShell:(atom::NativeWindowMac*)shell; -- (void)setEnableLargerThanScreen:(bool)enable; -@end - @implementation AtomNSWindow - (void)setShell:(atom::NativeWindowMac*)shell { @@ -347,6 +334,38 @@ bool ScopedDisableResize::disable_resize_ = false; return !self.disableKeyOrMainWindow; } +- (void)sendEvent:(NSEvent*)event { + if (!redispatchingEvent_) + [super sendEvent:event]; + else + eventHandled_ = NO; +} + +- (BOOL)performKeyEquivalent:(NSEvent*)event { + if (redispatchingEvent_) + return NO; + + if ([super performKeyEquivalent:event]) + return YES; + + return NO; + } + +- (BOOL)redispatchKeyEvent:(NSEvent*)event { + NSEventType eventType = [event type]; + if (eventType != NSKeyDown && eventType != NSKeyUp && + eventType != NSFlagsChanged) { + return YES; + } + + // Redispatch the event. + eventHandled_ = YES; + redispatchingEvent_ = YES; + [NSApp sendEvent:event]; + redispatchingEvent_ = NO; + + return eventHandled_; +} @end @interface ControlRegionView : NSView