JBR-1258 CommonItemDialog ignores directory to open
Ported from JDK11
diff --git a/src/windows/native/sun/windows/awt_FileDialog.cpp b/src/windows/native/sun/windows/awt_FileDialog.cpp
index 42bf9ec..cadb09c 100644
--- a/src/windows/native/sun/windows/awt_FileDialog.cpp
+++ b/src/windows/native/sun/windows/awt_FileDialog.cpp
@@ -554,7 +554,7 @@
OLE_RETURN_HR
}
-HRESULT CreateShellItem(LPTSTR path, IShellItem *shellItem) {
+HRESULT CreateShellItem(LPTSTR path, IShellItemPtr& shellItem) {
size_t pathLength = _tcslen(path);
for (size_t index = 0; index < pathLength; index++) {
if (path[index] == _T('/'))
@@ -598,7 +598,7 @@
IFileDialogEventsPtr pfde;
IShellItemPtr psiResult;
FileDialogData data;
- DWORD dwCookie;
+ DWORD dwCookie = OLE_BAD_COOKIE;
OPENFILENAME ofn;
memset(&ofn, 0, sizeof(ofn));
@@ -716,9 +716,11 @@
OLE_HRT(pfd->SetFileTypeIndex(1));
IShellItemPtr directoryItem;
- if (SUCCEEDED(CreateShellItem(directoryBuffer, directoryItem))) {
- pfd->SetFolder(directoryItem);
- }
+ OLE_NEXT_TRY
+ OLE_HRT(CreateShellItem(directoryBuffer, directoryItem));
+ OLE_HRT(pfd->SetFolder(directoryItem));
+ OLE_CATCH
+
CoTaskStringHolder shortName = GetShortName(fileBuffer);
if (shortName) {
OLE_HRT(pfd->SetFileName(shortName));
@@ -817,7 +819,7 @@
} catch (...) {
if (useCommonItemDialog) {
- if (pfd) {
+ if (pfd && dwCookie != OLE_BAD_COOKIE) {
pfd->Unadvise(dwCookie);
}
}
@@ -837,7 +839,7 @@
}
if (useCommonItemDialog) {
- if (pfd) {
+ if (pfd && dwCookie != OLE_BAD_COOKIE) {
pfd->Unadvise(dwCookie);
}
}