[SHELL32] Don't show error when closing disk prop sheet (#144)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Sat, 25 Nov 2017 09:27:20 +0000 (18:27 +0900)
committerGiannis Adamopoulos <johnyadams@outlook.com>
Sat, 25 Nov 2017 09:27:20 +0000 (11:27 +0200)
CORE-14035

dll/win32/shell32/dialogs/drive.cpp
dll/win32/shell32/dialogs/fprop.cpp
dll/win32/shell32/folders/CDrivesFolder.cpp
dll/win32/shell32/wine/shell32_main.h

index a5919f0..3afbe80 100644 (file)
@@ -2,6 +2,7 @@
  *                 Shell Library Functions
  *
  * Copyright 2005 Johannes Anderwald
+ * Copyright 2017 Katayama Hirofumi MZ
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -127,7 +128,7 @@ typedef struct _DRIVE_PROP_PAGE
     UINT DriveType;
 } DRIVE_PROP_PAGE;
 
-BOOL
+HRESULT
 SH_ShowDriveProperties(WCHAR *pwszDrive, LPCITEMIDLIST pidlFolder, PCUITEMID_CHILD_ARRAY apidl)
 {
     HPSXA hpsx = NULL;
@@ -145,7 +146,7 @@ SH_ShowDriveProperties(WCHAR *pwszDrive, LPCITEMIDLIST pidlFolder, PCUITEMID_CHI
 
     LPITEMIDLIST completePidl = ILCombine(pidlFolder, apidl[0]);
     if (!completePidl)
-        return FALSE;
+        return E_OUTOFMEMORY;
 
     if (ILGetDisplayNameExW(NULL, completePidl, wszName, ILGDN_NORMAL))
     {
@@ -179,16 +180,19 @@ SH_ShowDriveProperties(WCHAR *pwszDrive, LPCITEMIDLIST pidlFolder, PCUITEMID_CHI
             SHAddFromPropSheetExtArray(hpsx, (LPFNADDPROPSHEETPAGE)AddPropSheetPageCallback, (LPARAM)&psh);
     }
 
-    HWND hwnd = (HWND)PropertySheetW(&psh);
+    // NOTE: Currently property sheet is modal. If we make it modeless, then it returns HWND.
+    INT_PTR ret = PropertySheetW(&psh);
 
     if (hpsx)
         SHDestroyPropSheetExtArray(hpsx);
     if (pDrvDefExt)
         pDrvDefExt->Release();
 
-    if (!hwnd)
-        return FALSE;
-    return TRUE;
+    if (ret > 0)
+        return S_OK;
+    if (ret == 0)
+        return S_FALSE;
+    return E_FAIL;
 }
 
 static VOID
index ede236f..989a9ce 100644 (file)
@@ -3,6 +3,7 @@
  *
  * Copyright 2005 Johannes Anderwald
  * Copyright 2012 Rafal Harabien
+ * Copyright 2017 Katayama Hirofumi MZ
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -117,7 +118,7 @@ SH_ShowPropertiesDialog(LPCWSTR pwszPath, LPCITEMIDLIST pidlFolder, PCUITEMID_CH
 
     /* Handle drives */
     if (PathIsRootW(wszPath))
-        return SH_ShowDriveProperties(wszPath, pidlFolder, apidl);
+        return SUCCEEDED(SH_ShowDriveProperties(wszPath, pidlFolder, apidl));
 
     /* Handle files and folders */
     PROPSHEETHEADERW Header;
index 701a106..1961655 100644 (file)
@@ -215,9 +215,9 @@ HRESULT CALLBACK DrivesContextMenuCallback(IShellFolder *psf,
 
         if (wParam == DFM_CMD_PROPERTIES)
         {
-            if (!SH_ShowDriveProperties(wszBuf, pidlFolder, apidl))
+            hr = SH_ShowDriveProperties(wszBuf, pidlFolder, apidl);
+            if (FAILED(hr))
             {
-                hr = E_FAIL;
                 dwError = ERROR_CAN_NOT_COMPLETE;
                 nStringID = IDS_CANTSHOWPROPERTIES;
             }
index 8e17caf..170d844 100644 (file)
@@ -184,7 +184,7 @@ BOOL SHELL_IsShortcut(LPCITEMIDLIST) DECLSPEC_HIDDEN;
 INT_PTR CALLBACK SH_FileGeneralDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
 INT_PTR CALLBACK SH_FileVersionDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
 HPROPSHEETPAGE SH_CreatePropertySheetPage(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle);
-BOOL SH_ShowDriveProperties(WCHAR *drive, LPCITEMIDLIST pidlFolder, PCUITEMID_CHILD_ARRAY apidl);
+HRESULT SH_ShowDriveProperties(WCHAR *drive, LPCITEMIDLIST pidlFolder, PCUITEMID_CHILD_ARRAY apidl);
 BOOL SH_ShowRecycleBinProperties(WCHAR sDrive);
 BOOL SH_ShowPropertiesDialog(LPCWSTR pwszPath, LPCITEMIDLIST pidlFolder, PCUITEMID_CHILD_ARRAY apidl);
 LPWSTR SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf);