diff --git a/native/atom_cef_client.cpp b/native/atom_cef_client.cpp index db273d586..cd41ee41b 100644 --- a/native/atom_cef_client.cpp +++ b/native/atom_cef_client.cpp @@ -107,6 +107,8 @@ bool AtomCefClient::OnKeyEvent(CefRefPtr browser, } else if (event.modifiers == (KEY_META | KEY_ALT) && event.unmodified_character == 'i') { ToggleDevTools(browser); + } else if (event.modifiers == KEY_META && event.unmodified_character == '`') { + FocusNextWindow(); } else { return false; diff --git a/native/atom_cef_client.h b/native/atom_cef_client.h index e69f47a20..a5a056467 100644 --- a/native/atom_cef_client.h +++ b/native/atom_cef_client.h @@ -98,6 +98,7 @@ class AtomCefClient : public CefClient, protected: CefRefPtr m_Browser; + void FocusNextWindow(); void Open(std::string path); void Open(); void NewWindow(); diff --git a/native/atom_cef_client_mac.mm b/native/atom_cef_client_mac.mm index 7d08c13a6..587427452 100644 --- a/native/atom_cef_client_mac.mm +++ b/native/atom_cef_client_mac.mm @@ -5,6 +5,25 @@ #import "atom_application.h" #import "atom_window_controller.h" + +void AtomCefClient::FocusNextWindow() { + NSArray *windows = [NSApp windows]; + int count = [windows count]; + int start = [windows indexOfObject:[NSApp mainWindow]]; + int i = start; + while (true) { + i = (i + 1) % count; + + if (i == start) break; + + NSWindow *window = [windows objectAtIndex:i]; + if (![window isExcludedFromWindowsMenu]) { + [window makeKeyAndOrderFront:nil]; + break; + } + } +} + void AtomCefClient::Open(std::string path) { NSString *pathString = [NSString stringWithCString:path.c_str() encoding:NSUTF8StringEncoding]; [(AtomApplication *)[AtomApplication sharedApplication] open:pathString]; diff --git a/native/atom_window_controller.mm b/native/atom_window_controller.mm index 3322b2253..9f077e195 100644 --- a/native/atom_window_controller.mm +++ b/native/atom_window_controller.mm @@ -44,6 +44,7 @@ - (id)initInBackground { [self initWithBootstrapScript:@"window-bootstrap" background:YES]; [self.window setFrame:NSMakeRect(0, 0, 0, 0) display:NO]; + [self.window setExcludedFromWindowsMenu:YES]; return self; }