From: Cheng Zhao Date: Mon, 23 Sep 2013 12:08:32 +0000 (+0800) Subject: mac: Add asynchronous ShowSaveDialog. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c7637c78d16a16f2a0b8e9573ea09ef501f354c1;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git mac: Add asynchronous ShowSaveDialog. --- diff --git a/browser/ui/file_dialog.h b/browser/ui/file_dialog.h index 250ba5c..96c0061 100644 --- a/browser/ui/file_dialog.h +++ b/browser/ui/file_dialog.h @@ -25,7 +25,10 @@ enum FileDialogProperty { }; typedef base::Callback paths)> OpenDialogCallback; + bool result, const std::vector& paths)> OpenDialogCallback; + +typedef base::Callback SaveDialogCallback; bool ShowOpenDialog(atom::NativeWindow* parent_window, const std::string& title, @@ -44,6 +47,11 @@ bool ShowSaveDialog(atom::NativeWindow* parent_window, const base::FilePath& default_path, base::FilePath* path); +void ShowSaveDialog(atom::NativeWindow* parent_window, + const std::string& title, + const base::FilePath& default_path, + const SaveDialogCallback& callback); + } // namespace file_dialog #endif // BROWSER_UI_FILE_DIALOG_H_ diff --git a/browser/ui/file_dialog_mac.mm b/browser/ui/file_dialog_mac.mm index e4902e4..fd28cf5 100644 --- a/browser/ui/file_dialog_mac.mm +++ b/browser/ui/file_dialog_mac.mm @@ -143,4 +143,26 @@ bool ShowSaveDialog(atom::NativeWindow* parent_window, return true; } +void ShowSaveDialog(atom::NativeWindow* parent_window, + const std::string& title, + const base::FilePath& default_path, + const SaveDialogCallback& c) { + NSSavePanel* dialog = [NSSavePanel savePanel]; + + SetupDialog(dialog, title, default_path); + + __block SaveDialogCallback callback = c; + + NSWindow* window = parent_window ? parent_window->GetNativeWindow() : NULL; + [dialog beginSheetModalForWindow:window + completionHandler:^(NSInteger chosen) { + if (chosen == NSFileHandlingPanelCancelButton) { + callback.Run(false, base::FilePath()); + } else { + std::string path = base::SysNSStringToUTF8([[dialog URL] path]); + callback.Run(true, base::FilePath(path)); + } + }]; +} + } // namespace file_dialog