Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: chrome/browser/ui/views/select_file_dialog_win.cc

Issue 10697010: Make saving files from flash less annoying. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/select_file_dialog.h" 5 #include "chrome/browser/ui/select_file_dialog.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <commdlg.h> 8 #include <commdlg.h>
9 #include <shlobj.h> 9 #include <shlobj.h>
10 10
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 NOTREACHED(); 70 NOTREACHED();
71 return false; 71 return false;
72 } 72 }
73 73
74 return metro_get_save_file_name(ofn) == TRUE; 74 return metro_get_save_file_name(ofn) == TRUE;
75 } else { 75 } else {
76 return GetSaveFileName(ofn) == TRUE; 76 return GetSaveFileName(ofn) == TRUE;
77 } 77 }
78 } 78 }
79 79
80 // Distinguish directories from regular files.
81 bool IsDirectory(const FilePath& path) {
82 base::PlatformFileInfo file_info;
83 return file_util::GetFileInfo(path, &file_info) ?
84 file_info.is_directory : file_util::EndsWithSeparator(path);
85 }
86
80 } // namespace 87 } // namespace
81 88
82 // This function takes the output of a SaveAs dialog: a filename, a filter and 89 // This function takes the output of a SaveAs dialog: a filename, a filter and
83 // the extension originally suggested to the user (shown in the dialog box) and 90 // the extension originally suggested to the user (shown in the dialog box) and
84 // returns back the filename with the appropriate extension tacked on. If the 91 // returns back the filename with the appropriate extension tacked on. If the
85 // user requests an unknown extension and is not using the 'All files' filter, 92 // user requests an unknown extension and is not using the 'All files' filter,
86 // the suggested extension will be appended, otherwise we will leave the 93 // the suggested extension will be appended, otherwise we will leave the
87 // filename unmodified. |filename| should contain the filename selected in the 94 // filename unmodified. |filename| should contain the filename selected in the
88 // SaveAs dialog box and may include the path, |filter_selected| should be 95 // SaveAs dialog box and may include the path, |filter_selected| should be
89 // '*.something', for example '*.*' or it can be blank (which is treated as 96 // '*.something', for example '*.*' or it can be blank (which is treated as
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 save_as.lpstrCustomFilter = NULL; 332 save_as.lpstrCustomFilter = NULL;
326 save_as.nMaxCustFilter = 0; 333 save_as.nMaxCustFilter = 0;
327 save_as.nFilterIndex = *index; 334 save_as.nFilterIndex = *index;
328 save_as.lpstrFile = file_name; 335 save_as.lpstrFile = file_name;
329 save_as.nMaxFile = arraysize(file_name); 336 save_as.nMaxFile = arraysize(file_name);
330 save_as.lpstrFileTitle = NULL; 337 save_as.lpstrFileTitle = NULL;
331 save_as.nMaxFileTitle = 0; 338 save_as.nMaxFileTitle = 0;
332 339
333 // Set up the initial directory for the dialog. 340 // Set up the initial directory for the dialog.
334 std::wstring directory; 341 std::wstring directory;
335 if (!suggested_name.empty()) 342 if (!suggested_name.empty()) {
336 directory = suggested_path.DirName().value(); 343 if (IsDirectory(suggested_path)) {
344 directory = suggested_path.value();
345 file_part.clear();
346 } else {
347 directory = suggested_path.DirName().value();
348 }
349 }
337 350
338 save_as.lpstrInitialDir = directory.c_str(); 351 save_as.lpstrInitialDir = directory.c_str();
339 save_as.lpstrTitle = NULL; 352 save_as.lpstrTitle = NULL;
340 save_as.Flags = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ENABLESIZING | 353 save_as.Flags = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ENABLESIZING |
341 OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST; 354 OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
342 save_as.lpstrDefExt = &def_ext[0]; 355 save_as.lpstrDefExt = &def_ext[0];
343 save_as.lCustData = NULL; 356 save_as.lCustData = NULL;
344 357
345 if (base::win::GetVersion() < base::win::VERSION_VISTA) { 358 if (base::win::GetVersion() < base::win::VERSION_VISTA) {
346 // The save as on Windows XP remembers its last position, 359 // The save as on Windows XP remembers its last position,
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 wchar_t filename[MAX_PATH]; 768 wchar_t filename[MAX_PATH];
756 // According to http://support.microsoft.com/?scid=kb;en-us;222003&x=8&y=12, 769 // According to http://support.microsoft.com/?scid=kb;en-us;222003&x=8&y=12,
757 // The lpstrFile Buffer MUST be NULL Terminated. 770 // The lpstrFile Buffer MUST be NULL Terminated.
758 filename[0] = 0; 771 filename[0] = 0;
759 // Define the dir in here to keep the string buffer pointer pointed to 772 // Define the dir in here to keep the string buffer pointer pointed to
760 // ofn.lpstrInitialDir available during the period of running the 773 // ofn.lpstrInitialDir available during the period of running the
761 // GetOpenFileName. 774 // GetOpenFileName.
762 FilePath dir; 775 FilePath dir;
763 // Use lpstrInitialDir to specify the initial directory 776 // Use lpstrInitialDir to specify the initial directory
764 if (!path->empty()) { 777 if (!path->empty()) {
765 bool is_dir; 778 if (IsDirectory(*path)) {
766 base::PlatformFileInfo file_info;
767 if (file_util::GetFileInfo(*path, &file_info))
768 is_dir = file_info.is_directory;
769 else
770 is_dir = file_util::EndsWithSeparator(*path);
771 if (is_dir) {
772 ofn.lpstrInitialDir = path->value().c_str(); 779 ofn.lpstrInitialDir = path->value().c_str();
773 } else { 780 } else {
774 dir = path->DirName(); 781 dir = path->DirName();
775 ofn.lpstrInitialDir = dir.value().c_str(); 782 ofn.lpstrInitialDir = dir.value().c_str();
776 // Only pure filename can be put in lpstrFile field. 783 // Only pure filename can be put in lpstrFile field.
777 base::wcslcpy(filename, path->BaseName().value().c_str(), 784 base::wcslcpy(filename, path->BaseName().value().c_str(),
778 arraysize(filename)); 785 arraysize(filename));
779 } 786 }
780 } 787 }
781 788
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 } 853 }
847 } 854 }
848 } 855 }
849 return success; 856 return success;
850 } 857 }
851 858
852 // static 859 // static
853 SelectFileDialog* SelectFileDialog::Create(Listener* listener) { 860 SelectFileDialog* SelectFileDialog::Create(Listener* listener) {
854 return new SelectFileDialogImpl(listener); 861 return new SelectFileDialogImpl(listener);
855 } 862 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698