Always fall back to OpenFolderViaShell when trying to reveal a file
We should always fallback to OpenFolderViaShell when revealing a file fails, since this API seems to be highly subject to Random Bad Things happening to you.
This commit is contained in:
parent
d195cc3796
commit
05aeceeb52
1 changed files with 10 additions and 4 deletions
|
@ -238,7 +238,7 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
||||||
(GetProcAddress(shell32_base, "SHOpenFolderAndSelectItems"));
|
(GetProcAddress(shell32_base, "SHOpenFolderAndSelectItems"));
|
||||||
}
|
}
|
||||||
if (!open_folder_and_select_itemsPtr) {
|
if (!open_folder_and_select_itemsPtr) {
|
||||||
ShellExecute(NULL, L"open", dir.value().c_str(), NULL, NULL, SW_SHOW);
|
ui::win::OpenFolderViaShell(dir);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,15 +251,19 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
||||||
hr = desktop->ParseDisplayName(NULL, NULL,
|
hr = desktop->ParseDisplayName(NULL, NULL,
|
||||||
const_cast<wchar_t *>(dir.value().c_str()),
|
const_cast<wchar_t *>(dir.value().c_str()),
|
||||||
NULL, &dir_item, NULL);
|
NULL, &dir_item, NULL);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr)) {
|
||||||
|
ui::win::OpenFolderViaShell(dir);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
base::win::ScopedCoMem<ITEMIDLIST> file_item;
|
base::win::ScopedCoMem<ITEMIDLIST> file_item;
|
||||||
hr = desktop->ParseDisplayName(NULL, NULL,
|
hr = desktop->ParseDisplayName(NULL, NULL,
|
||||||
const_cast<wchar_t *>(full_path.value().c_str()),
|
const_cast<wchar_t *>(full_path.value().c_str()),
|
||||||
NULL, &file_item, NULL);
|
NULL, &file_item, NULL);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr)) {
|
||||||
|
ui::win::OpenFolderViaShell(dir);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const ITEMIDLIST* highlight[] = { file_item };
|
const ITEMIDLIST* highlight[] = { file_item };
|
||||||
|
|
||||||
|
@ -271,7 +275,7 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
||||||
// found" even though the file is there. In these cases, ShellExecute()
|
// found" even though the file is there. In these cases, ShellExecute()
|
||||||
// seems to work as a fallback (although it won't select the file).
|
// seems to work as a fallback (although it won't select the file).
|
||||||
if (hr == ERROR_FILE_NOT_FOUND) {
|
if (hr == ERROR_FILE_NOT_FOUND) {
|
||||||
ShellExecute(NULL, L"open", dir.value().c_str(), NULL, NULL, SW_SHOW);
|
ui::win::OpenFolderViaShell(dir);
|
||||||
} else {
|
} else {
|
||||||
LPTSTR message = NULL;
|
LPTSTR message = NULL;
|
||||||
DWORD message_length = FormatMessage(
|
DWORD message_length = FormatMessage(
|
||||||
|
@ -284,6 +288,8 @@ void ShowItemInFolder(const base::FilePath& full_path) {
|
||||||
<< " " << reinterpret_cast<LPTSTR>(&message);
|
<< " " << reinterpret_cast<LPTSTR>(&message);
|
||||||
if (message)
|
if (message)
|
||||||
LocalFree(message);
|
LocalFree(message);
|
||||||
|
|
||||||
|
ui::win::OpenFolderViaShell(dir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue