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

Side by Side Diff: ui/base/dialogs/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, 4 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
« no previous file with comments | « ui/base/dialogs/gtk/select_file_dialog_impl_gtk.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ui/base/dialogs/select_file_dialog_win.h" 5 #include "ui/base/dialogs/select_file_dialog_win.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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 NOTREACHED(); 68 NOTREACHED();
69 return false; 69 return false;
70 } 70 }
71 71
72 return metro_get_save_file_name(ofn) == TRUE; 72 return metro_get_save_file_name(ofn) == TRUE;
73 } else { 73 } else {
74 return GetSaveFileName(ofn) == TRUE; 74 return GetSaveFileName(ofn) == TRUE;
75 } 75 }
76 } 76 }
77 77
78 // Distinguish directories from regular files.
79 bool IsDirectory(const FilePath& path) {
80 base::PlatformFileInfo file_info;
81 return file_util::GetFileInfo(path, &file_info) ?
82 file_info.is_directory : file_util::EndsWithSeparator(path);
83 }
84
78 // Get the file type description from the registry. This will be "Text Document" 85 // Get the file type description from the registry. This will be "Text Document"
79 // for .txt files, "JPEG Image" for .jpg files, etc. If the registry doesn't 86 // for .txt files, "JPEG Image" for .jpg files, etc. If the registry doesn't
80 // have an entry for the file type, we return false, true if the description was 87 // have an entry for the file type, we return false, true if the description was
81 // found. 'file_ext' must be in form ".txt". 88 // found. 'file_ext' must be in form ".txt".
82 static bool GetRegistryDescriptionFromExtension(const std::wstring& file_ext, 89 static bool GetRegistryDescriptionFromExtension(const std::wstring& file_ext,
83 std::wstring* reg_description) { 90 std::wstring* reg_description) {
84 DCHECK(reg_description); 91 DCHECK(reg_description);
85 base::win::RegKey reg_ext(HKEY_CLASSES_ROOT, file_ext.c_str(), KEY_READ); 92 base::win::RegKey reg_ext(HKEY_CLASSES_ROOT, file_ext.c_str(), KEY_READ);
86 std::wstring reg_app; 93 std::wstring reg_app;
87 if (reg_ext.ReadValue(NULL, &reg_app) == ERROR_SUCCESS && !reg_app.empty()) { 94 if (reg_ext.ReadValue(NULL, &reg_app) == ERROR_SUCCESS && !reg_app.empty()) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 save_as.lpstrCustomFilter = NULL; 286 save_as.lpstrCustomFilter = NULL;
280 save_as.nMaxCustFilter = 0; 287 save_as.nMaxCustFilter = 0;
281 save_as.nFilterIndex = *index; 288 save_as.nFilterIndex = *index;
282 save_as.lpstrFile = file_name; 289 save_as.lpstrFile = file_name;
283 save_as.nMaxFile = arraysize(file_name); 290 save_as.nMaxFile = arraysize(file_name);
284 save_as.lpstrFileTitle = NULL; 291 save_as.lpstrFileTitle = NULL;
285 save_as.nMaxFileTitle = 0; 292 save_as.nMaxFileTitle = 0;
286 293
287 // Set up the initial directory for the dialog. 294 // Set up the initial directory for the dialog.
288 std::wstring directory; 295 std::wstring directory;
289 if (!suggested_name.empty()) 296 if (!suggested_name.empty()) {
290 directory = suggested_path.DirName().value(); 297 if (IsDirectory(suggested_path)) {
298 directory = suggested_path.value();
299 file_part.clear();
300 } else {
301 directory = suggested_path.DirName().value();
302 }
303 }
291 304
292 save_as.lpstrInitialDir = directory.c_str(); 305 save_as.lpstrInitialDir = directory.c_str();
293 save_as.lpstrTitle = NULL; 306 save_as.lpstrTitle = NULL;
294 save_as.Flags = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ENABLESIZING | 307 save_as.Flags = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ENABLESIZING |
295 OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST; 308 OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
296 save_as.lpstrDefExt = &def_ext[0]; 309 save_as.lpstrDefExt = &def_ext[0];
297 save_as.lCustData = NULL; 310 save_as.lCustData = NULL;
298 311
299 if (base::win::GetVersion() < base::win::VERSION_VISTA) { 312 if (base::win::GetVersion() < base::win::VERSION_VISTA) {
300 // The save as on Windows XP remembers its last position, 313 // The save as on Windows XP remembers its last position,
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 wchar_t filename[MAX_PATH]; 721 wchar_t filename[MAX_PATH];
709 // According to http://support.microsoft.com/?scid=kb;en-us;222003&x=8&y=12, 722 // According to http://support.microsoft.com/?scid=kb;en-us;222003&x=8&y=12,
710 // The lpstrFile Buffer MUST be NULL Terminated. 723 // The lpstrFile Buffer MUST be NULL Terminated.
711 filename[0] = 0; 724 filename[0] = 0;
712 // Define the dir in here to keep the string buffer pointer pointed to 725 // Define the dir in here to keep the string buffer pointer pointed to
713 // ofn.lpstrInitialDir available during the period of running the 726 // ofn.lpstrInitialDir available during the period of running the
714 // GetOpenFileName. 727 // GetOpenFileName.
715 FilePath dir; 728 FilePath dir;
716 // Use lpstrInitialDir to specify the initial directory 729 // Use lpstrInitialDir to specify the initial directory
717 if (!path->empty()) { 730 if (!path->empty()) {
718 bool is_dir; 731 if (IsDirectory(*path)) {
719 base::PlatformFileInfo file_info;
720 if (file_util::GetFileInfo(*path, &file_info))
721 is_dir = file_info.is_directory;
722 else
723 is_dir = file_util::EndsWithSeparator(*path);
724 if (is_dir) {
725 ofn.lpstrInitialDir = path->value().c_str(); 732 ofn.lpstrInitialDir = path->value().c_str();
726 } else { 733 } else {
727 dir = path->DirName(); 734 dir = path->DirName();
728 ofn.lpstrInitialDir = dir.value().c_str(); 735 ofn.lpstrInitialDir = dir.value().c_str();
729 // Only pure filename can be put in lpstrFile field. 736 // Only pure filename can be put in lpstrFile field.
730 base::wcslcpy(filename, path->BaseName().value().c_str(), 737 base::wcslcpy(filename, path->BaseName().value().c_str(),
731 arraysize(filename)); 738 arraysize(filename));
732 } 739 }
733 } 740 }
734 741
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 return return_value; 854 return return_value;
848 } 855 }
849 856
850 SelectFileDialog* CreateWinSelectFileDialog( 857 SelectFileDialog* CreateWinSelectFileDialog(
851 SelectFileDialog::Listener* listener, 858 SelectFileDialog::Listener* listener,
852 SelectFilePolicy* policy) { 859 SelectFilePolicy* policy) {
853 return new SelectFileDialogImpl(listener, policy); 860 return new SelectFileDialogImpl(listener, policy);
854 } 861 }
855 862
856 } // namespace ui 863 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/dialogs/gtk/select_file_dialog_impl_gtk.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698