diff --git a/native/atom_application.mm b/native/atom_application.mm index 869bddcfa..1793a239b 100644 --- a/native/atom_application.mm +++ b/native/atom_application.mm @@ -131,6 +131,10 @@ [[AtomWindowController alloc] initWithPath:path]; } +- (void)openUnstable:(NSString *)path { + [[AtomWindowController alloc] initUnstableWithPath:path]; +} + - (IBAction)runSpecs:(id)sender { [self runSpecsThenExit:NO]; } diff --git a/native/atom_cef_client.cpp b/native/atom_cef_client.cpp index 216127846..e36215144 100644 --- a/native/atom_cef_client.cpp +++ b/native/atom_cef_client.cpp @@ -34,6 +34,10 @@ bool AtomCefClient::OnProcessMessageReceived(CefRefPtr browser, bool hasArguments = argumentList->GetSize() > 1; hasArguments ? Open(argumentList->GetString(1)) : Open(); } + if (name == "openUnstable") { + bool hasArguments = argumentList->GetSize() > 1; + hasArguments ? OpenUnstable(argumentList->GetString(1)) : OpenUnstable(); + } else if (name == "newWindow") { NewWindow(); } diff --git a/native/atom_cef_client.h b/native/atom_cef_client.h index ae1f6219b..92c3784bb 100644 --- a/native/atom_cef_client.h +++ b/native/atom_cef_client.h @@ -107,6 +107,9 @@ class AtomCefClient : public CefClient, void FocusNextWindow(); void Open(std::string path); void Open(); + void OpenUnstable(std::string path); + + void OpenUnstable(); void NewWindow(); void ToggleDevTools(CefRefPtr browser); void ShowDevTools(CefRefPtr browser); diff --git a/native/atom_cef_client_mac.mm b/native/atom_cef_client_mac.mm index 6533b29bb..628017009 100644 --- a/native/atom_cef_client_mac.mm +++ b/native/atom_cef_client_mac.mm @@ -37,6 +37,20 @@ void AtomCefClient::Open() { } } +void AtomCefClient::OpenUnstable(std::string path) { + NSString *pathString = [NSString stringWithCString:path.c_str() encoding:NSUTF8StringEncoding]; + [(AtomApplication *)[AtomApplication sharedApplication] openUnstable:pathString]; +} + +void AtomCefClient::OpenUnstable() { + NSOpenPanel *panel = [NSOpenPanel openPanel]; + [panel setCanChooseDirectories:YES]; + if ([panel runModal] == NSFileHandlingPanelOKButton) { + NSURL *url = [[panel URLs] lastObject]; + OpenUnstable([[url path] UTF8String]); + } +} + void AtomCefClient::NewWindow() { [(AtomApplication *)[AtomApplication sharedApplication] open:nil]; } diff --git a/native/atom_window_controller.h b/native/atom_window_controller.h index 1921ec066..e1f177d1c 100644 --- a/native/atom_window_controller.h +++ b/native/atom_window_controller.h @@ -23,6 +23,7 @@ class AtomCefClient; @property (nonatomic, retain) IBOutlet NSView *devToolsView; - (id)initWithPath:(NSString *)path; +- (id)initUnstableWithPath:(NSString *)path; - (id)initInBackground; - (id)initSpecsThenExit:(BOOL)exitWhenDone; - (id)initBenchmarksThenExit:(BOOL)exitWhenDone; diff --git a/native/atom_window_controller.mm b/native/atom_window_controller.mm index 4a259f0fe..0aca7b6ea 100644 --- a/native/atom_window_controller.mm +++ b/native/atom_window_controller.mm @@ -52,6 +52,12 @@ return [self initWithBootstrapScript:@"window-bootstrap" background:NO alwaysUseBundleResourcePath:stable]; } +- (id)initUnstableWithPath:(NSString *)path { + _pathToOpen = [path retain]; + AtomApplication *atomApplication = (AtomApplication *)[AtomApplication sharedApplication]; + return [self initWithBootstrapScript:@"window-bootstrap" background:NO alwaysUseBundleResourcePath:false]; +} + - (id)initInBackground { AtomApplication *atomApplication = (AtomApplication *)[AtomApplication sharedApplication]; BOOL stable = [atomApplication.arguments objectForKey:@"stable"] != nil; diff --git a/src/app/atom.coffee b/src/app/atom.coffee index 96571194f..1b3860f2a 100644 --- a/src/app/atom.coffee +++ b/src/app/atom.coffee @@ -25,6 +25,9 @@ atom.receiveMessageFromBrowserProcess = (name, data) -> atom.open = (args...) -> @sendMessageToBrowserProcess('open', args) +atom.openUnstable = (args...) -> + @sendMessageToBrowserProcess('openUnstable', args) + atom.newWindow = (args...) -> @sendMessageToBrowserProcess('newWindow', args) diff --git a/src/app/keymap.coffee b/src/app/keymap.coffee index 462ccb85b..f08e1e364 100644 --- a/src/app/keymap.coffee +++ b/src/app/keymap.coffee @@ -20,11 +20,13 @@ class Keymap 'meta-n': 'new-window' 'meta-,': 'open-user-configuration' 'meta-o': 'open' + 'meta-O': 'open-unstable' 'meta-w': 'core:close' $(document).on 'new-window', => atom.newWindow() $(document).on 'open-user-configuration', => atom.open(atom.configFilePath) $(document).on 'open', => atom.open() + $(document).on 'open-unstable', => atom.openUnstable() bindKeys: (selector, bindings) -> bindingSet = new BindingSet(selector, bindings, @bindingSets.length)