#import <Cocoa/Cocoa.h>
+#include "atom/browser/native_window_mac.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "ui/events/keycodes/keyboard_codes.h"
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<AtomNSWindow*>(event.os_event.window);
+ [native_window redispatchKeyEvent:event.os_event];
}
}
} // 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_
@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 {
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