summaryrefslogtreecommitdiffstats
path: root/ui/base/dialogs
diff options
context:
space:
mode:
authorthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-27 21:36:06 +0000
committerthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-27 21:36:06 +0000
commit8c31bf567fddec2a192921e4e0f99980252365b4 (patch)
tree799438ea352b55d35dc21ac0b16dfdd089d0e777 /ui/base/dialogs
parente228b0ee408e0fe9b4d41674d3ca85d3df24e67c (diff)
downloadchromium_src-8c31bf567fddec2a192921e4e0f99980252365b4.zip
chromium_src-8c31bf567fddec2a192921e4e0f99980252365b4.tar.gz
chromium_src-8c31bf567fddec2a192921e4e0f99980252365b4.tar.bz2
mac: Switch to "new" (10.6) block-based panel apis
The new APIs enable saving of general NSURLs. Strip NSURLs that aren't isFileURLs. The old apis are deprecated in the 10.8 sdk. BUG=139138 TBR=sky Review URL: https://chromiumcodereview.appspot.com/10829053 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148818 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/dialogs')
-rw-r--r--ui/base/dialogs/select_file_dialog_mac.mm79
1 files changed, 27 insertions, 52 deletions
diff --git a/ui/base/dialogs/select_file_dialog_mac.mm b/ui/base/dialogs/select_file_dialog_mac.mm
index 11c0dd5..e844c93 100644
--- a/ui/base/dialogs/select_file_dialog_mac.mm
+++ b/ui/base/dialogs/select_file_dialog_mac.mm
@@ -48,8 +48,9 @@ class SelectFileDialogImpl;
- (id)initWithSelectFileDialogImpl:(SelectFileDialogImpl*)s;
- (void)endedPanel:(NSSavePanel*)panel
- withReturn:(int)returnCode
- context:(void*)context;
+ didCancel:(bool)did_cancel
+ type:(ui::SelectFileDialog::Type)type
+ parentWindow:(NSWindow*)parentWindow;
// NSSavePanel delegate method
- (BOOL)panel:(id)sender shouldShowFilename:(NSString *)filename;
@@ -77,11 +78,6 @@ class SelectFileDialogImpl : public ui::SelectFileDialog {
bool ShouldEnableFilename(NSSavePanel* dialog, NSString* filename);
- struct SheetContext {
- Type type;
- NSWindow* owning_window;
- };
-
protected:
// SelectFileDialog implementation.
// |params| is user data we pass back via the Listener interface.
@@ -151,7 +147,7 @@ void SelectFileDialogImpl::FileWasSelected(NSSavePanel* dialog,
if (!listener_)
return;
- if (was_cancelled) {
+ if (was_cancelled || files.empty()) {
listener_->FileSelectionCanceled(params);
} else {
if (is_multi) {
@@ -254,28 +250,13 @@ void SelectFileDialogImpl::SelectFileImpl(
file_types ? file_types->extensions.size() > 1 : true;
if (!default_extension.empty())
- [dialog setRequiredFileType:base::SysUTF8ToNSString(default_extension)];
+ [dialog setAllowedFileTypes:@[base::SysUTF8ToNSString(default_extension)]];
params_map_[dialog] = params;
type_map_[dialog] = type;
- SheetContext* context = new SheetContext;
-
- // |context| should never be NULL, but we are seeing indications otherwise.
- // This CHECK is here to confirm if we are actually getting NULL
- // |context|s. http://crbug.com/58959
- CHECK(context);
- context->type = type;
- context->owning_window = owning_window;
-
if (type == SELECT_SAVEAS_FILE) {
[dialog setCanSelectHiddenExtension:YES];
- [dialog beginSheetForDirectory:default_dir
- file:default_filename
- modalForWindow:owning_window
- modalDelegate:bridge_.get()
- didEndSelector:@selector(endedPanel:withReturn:context:)
- contextInfo:context];
} else {
NSOpenPanel* open_dialog = (NSOpenPanel*)dialog;
@@ -296,14 +277,19 @@ void SelectFileDialogImpl::SelectFileImpl(
}
[open_dialog setDelegate:bridge_.get()];
- [open_dialog beginSheetForDirectory:default_dir
- file:default_filename
- types:allowed_file_types
- modalForWindow:owning_window
- modalDelegate:bridge_.get()
- didEndSelector:@selector(endedPanel:withReturn:context:)
- contextInfo:context];
+ [open_dialog setAllowedFileTypes:allowed_file_types];
}
+ if (default_dir)
+ [dialog setDirectoryURL:[NSURL fileURLWithPath:default_dir]];
+ if (default_filename)
+ [dialog setNameFieldStringValue:default_filename];
+ [dialog beginSheetModalForWindow:owning_window
+ completionHandler:^(NSInteger result) {
+ [bridge_.get() endedPanel:dialog
+ didCancel:result != NSFileHandlingPanelOKButton
+ type:type
+ parentWindow:owning_window];
+ }];
}
SelectFileDialogImpl::~SelectFileDialogImpl() {
@@ -374,28 +360,15 @@ bool SelectFileDialogImpl::HasMultipleFileTypeChoicesImpl() {
}
- (void)endedPanel:(NSSavePanel*)panel
- withReturn:(int)returnCode
- context:(void*)context {
- // |context| should never be NULL, but we are seeing indications otherwise.
- // This CHECK is here to confirm if we are actually getting NULL
- // |context|s. http://crbug.com/58959
- CHECK(context);
-
+ didCancel:(bool)did_cancel
+ type:(ui::SelectFileDialog::Type)type
+ parentWindow:(NSWindow*)parentWindow {
int index = 0;
- SelectFileDialogImpl::SheetContext* context_struct =
- (SelectFileDialogImpl::SheetContext*)context;
-
- ui::SelectFileDialog::Type type = context_struct->type;
- NSWindow* parentWindow = context_struct->owning_window;
- delete context_struct;
-
- bool isMulti = type == ui::SelectFileDialog::SELECT_OPEN_MULTI_FILE;
-
std::vector<FilePath> paths;
- bool did_cancel = returnCode == NSCancelButton;
if (!did_cancel) {
if (type == ui::SelectFileDialog::SELECT_SAVEAS_FILE) {
- paths.push_back(FilePath(base::SysNSStringToUTF8([panel filename])));
+ if ([[panel URL] isFileURL])
+ paths.push_back(FilePath(base::SysNSStringToUTF8([[panel URL] path])));
NSView* accessoryView = [panel accessoryView];
if (accessoryView) {
@@ -409,12 +382,14 @@ bool SelectFileDialogImpl::HasMultipleFileTypeChoicesImpl() {
}
} else {
CHECK([panel isKindOfClass:[NSOpenPanel class]]);
- NSArray* filenames = [static_cast<NSOpenPanel*>(panel) filenames];
- for (NSString* filename in filenames)
- paths.push_back(FilePath(base::SysNSStringToUTF8(filename)));
+ NSArray* urls = [static_cast<NSOpenPanel*>(panel) URLs];
+ for (NSURL* url in urls)
+ if ([url isFileURL])
+ paths.push_back(FilePath(base::SysNSStringToUTF8([url path])));
}
}
+ bool isMulti = type == ui::SelectFileDialog::SELECT_OPEN_MULTI_FILE;
selectFileDialogImpl_->FileWasSelected(panel,
parentWindow,
did_cancel,