Handle invalid paths better in MSW wxDirDialog
When setting a path including an invalid drive in IFileDialog-based wxDirDialog, Windows returned ERROR_INVALID_DRIVE error. wxWidgets treated this as an error and reverted to showing the old ShowSHBrowseForFolder()-based dialog. However, it is better to just ignore any errors produced when attempting to set the default folder (as the code already did for ERROR_FILE_NOT_FOUND) and show IFileDialog-based dialog anyway. Closes https://github.com/wxWidgets/wxWidgets/pull/2356
This commit is contained in:
@@ -360,25 +360,14 @@ bool InitIFileOpenDialog(const wxString& message, const wxString& defaultPath,
|
|||||||
wxIID_PPV_ARGS(IShellItem,
|
wxIID_PPV_ARGS(IShellItem,
|
||||||
&folder));
|
&folder));
|
||||||
|
|
||||||
// Failing to parse the folder name is not really an error, we'll just
|
// Failing to parse the folder name or set it is not really an error,
|
||||||
// ignore the initial directory in this case, but we should still show
|
// we'll just ignore the initial directory in this case, but we should
|
||||||
// the dialog.
|
// still show the dialog.
|
||||||
if ( FAILED(hr) )
|
if ( SUCCEEDED(hr) )
|
||||||
{
|
|
||||||
if ( hr != HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) )
|
|
||||||
{
|
|
||||||
wxLogApiError(wxS("SHCreateItemFromParsingName"), hr);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else // The folder was parsed correctly.
|
|
||||||
{
|
{
|
||||||
hr = dlg->SetFolder(folder);
|
hr = dlg->SetFolder(folder);
|
||||||
if ( FAILED(hr) )
|
if ( FAILED(hr) )
|
||||||
{
|
|
||||||
wxLogApiError(wxS("IFileOpenDialog::SetFolder"), hr);
|
wxLogApiError(wxS("IFileOpenDialog::SetFolder"), hr);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user