Make dialog.showSaveDialog accept no parent window.
authorCheng Zhao <zcbenz@gmail.com>
Mon, 23 Sep 2013 11:59:00 +0000 (19:59 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 23 Sep 2013 11:59:00 +0000 (19:59 +0800)
browser/api/atom_api_dialog.cc
browser/api/lib/dialog.coffee

index 6f4bfdc..5200a78 100644 (file)
@@ -189,20 +189,24 @@ v8::Handle<v8::Value> ShowOpenDialog(const v8::Arguments &args) {
 v8::Handle<v8::Value> ShowSaveDialog(const v8::Arguments &args) {
   v8::HandleScope scope;
 
-  if (!args[0]->IsObject() ||  // window
-      !args[1]->IsString() ||  // title
-      !args[2]->IsString())    // default_path
+  if (!args[0]->IsString() ||  // title
+      !args[1]->IsString())    // default_path
     return node::ThrowTypeError("Bad argument");
 
-  Window* window = Window::Unwrap<Window>(args[0]->ToObject());
-  if (!window || !window->window())
-    return node::ThrowError("Invalid window");
+  NativeWindow* native_window = NULL;
+  if (args[2]->IsObject()) {
+    Window* window = Window::Unwrap<Window>(args[2]->ToObject());
+    if (!window || !window->window())
+      return node::ThrowError("Invalid window");
 
-  std::string title(*v8::String::Utf8Value(args[1]));
-  base::FilePath default_path(V8ValueToFilePath(args[2]));
+    native_window = window->window();
+  }
+
+  std::string title(*v8::String::Utf8Value(args[0]));
+  base::FilePath default_path(V8ValueToFilePath(args[1]));
 
   base::FilePath path;
-  if (!file_dialog::ShowSaveDialog(window->window(),
+  if (!file_dialog::ShowSaveDialog(native_window,
                                    title,
                                    default_path,
                                    &path))
index 069858a..7cf538b 100644 (file)
@@ -31,16 +31,21 @@ module.exports =
                            window,
                            callback
 
-  showSaveDialog: (window, options) ->
-    throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow
+  showSaveDialog: (window, options, callback) ->
+    unless window?.constructor is BrowserWindow
+      # Shift.
+      callback = options
+      options = window
+      window = null
 
     options ?= title: 'Save'
     options.title ?= ''
     options.defaultPath ?= ''
 
-    binding.showSaveDialog window,
-                           String(options.title),
-                           String(options.defaultPath)
+    binding.showSaveDialog String(options.title),
+                           String(options.defaultPath),
+                           window,
+                           callback
 
   showMessageBox: (window, options, callback) ->
     unless window?.constructor is BrowserWindow