Index: ui/shell_dialogs/select_file_dialog_win.cc |
diff --git a/ui/shell_dialogs/select_file_dialog_win.cc b/ui/shell_dialogs/select_file_dialog_win.cc |
index 4cd8896b02515ba9edc7e3cb332d9324247ffa1c..40215a344fee59fc74d0d75987bfd0e974dbb43a 100644 |
--- a/ui/shell_dialogs/select_file_dialog_win.cc |
+++ b/ui/shell_dialogs/select_file_dialog_win.cc |
@@ -30,6 +30,7 @@ |
#include "ui/shell_dialogs/base_shell_dialog_win.h" |
#include "ui/shell_dialogs/shell_dialogs_delegate.h" |
#include "ui/strings/grit/ui_strings.h" |
+#include "win8/viewer/metro_viewer_process_host.h" |
namespace { |
@@ -327,6 +328,59 @@ |
void* params) { |
has_multiple_file_type_choices_ = |
file_types ? file_types->extensions.size() > 1 : true; |
+ // If the owning_window passed in is in metro then we need to forward the |
+ // file open/save operations to metro. |
+ if (GetShellDialogsDelegate() && |
+ GetShellDialogsDelegate()->IsWindowInMetro(owning_window)) { |
+ if (type == SELECT_SAVEAS_FILE) { |
+ win8::MetroViewerProcessHost::HandleSaveFile( |
+ title, |
+ default_path, |
+ GetFilterForFileTypes(file_types), |
+ file_type_index, |
+ default_extension, |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelected, |
+ base::Unretained(listener_)), |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelectionCanceled, |
+ base::Unretained(listener_))); |
+ return; |
+ } else if (type == SELECT_OPEN_FILE) { |
+ win8::MetroViewerProcessHost::HandleOpenFile( |
+ title, |
+ default_path, |
+ GetFilterForFileTypes(file_types), |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelected, |
+ base::Unretained(listener_)), |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelectionCanceled, |
+ base::Unretained(listener_))); |
+ return; |
+ } else if (type == SELECT_OPEN_MULTI_FILE) { |
+ win8::MetroViewerProcessHost::HandleOpenMultipleFiles( |
+ title, |
+ default_path, |
+ GetFilterForFileTypes(file_types), |
+ base::Bind(&ui::SelectFileDialog::Listener::MultiFilesSelected, |
+ base::Unretained(listener_)), |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelectionCanceled, |
+ base::Unretained(listener_))); |
+ return; |
+ } else if (type == SELECT_FOLDER || type == SELECT_UPLOAD_FOLDER) { |
+ base::string16 title_string = title; |
+ if (type == SELECT_UPLOAD_FOLDER && title_string.empty()) { |
+ // If it's for uploading don't use default dialog title to |
+ // make sure we clearly tell it's for uploading. |
+ title_string = l10n_util::GetStringUTF16( |
+ IDS_SELECT_UPLOAD_FOLDER_DIALOG_TITLE); |
+ } |
+ win8::MetroViewerProcessHost::HandleSelectFolder( |
+ title_string, |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelected, |
+ base::Unretained(listener_)), |
+ base::Bind(&ui::SelectFileDialog::Listener::FileSelectionCanceled, |
+ base::Unretained(listener_))); |
+ return; |
+ } |
+ } |
HWND owner = owning_window && owning_window->GetRootWindow() |
? owning_window->GetHost()->GetAcceleratedWidget() : NULL; |