[SHELL32] Fix detail view in My Computer showing Comment in 'Total Size' column (#5438) CORE-19000

Fixes the regression of 0.4.15-dev-5526-g 4c25af5b
This commit is contained in:
Doug Lyons 2023-07-15 11:14:35 -05:00 committed by GitHub
parent 4057264a19
commit 035790dda5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -572,8 +572,6 @@ static const shvheader MyComputerSFHeader[] = {
{IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10}, {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10},
}; };
#define MYCOMPUTERSHELLVIEWCOLUMNS 5
static const DWORD dwComputerAttributes = static const DWORD dwComputerAttributes =
SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET |
SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER; SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER;
@ -752,28 +750,29 @@ HRESULT WINAPI CDrivesFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1
if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2)) if (_ILIsSpecialFolder(pidl1) || _ILIsSpecialFolder(pidl2))
return m_regFolder->CompareIDs(lParam, pidl1, pidl2); return m_regFolder->CompareIDs(lParam, pidl1, pidl2);
if (!_ILIsDrive(pidl1) || !_ILIsDrive(pidl2) || LOWORD(lParam) >= MYCOMPUTERSHELLVIEWCOLUMNS) UINT iColumn = LOWORD(lParam);
if (!_ILIsDrive(pidl1) || !_ILIsDrive(pidl2) || iColumn >= _countof(MyComputerSFHeader))
return E_INVALIDARG; return E_INVALIDARG;
CHAR* pszDrive1 = _ILGetDataPointer(pidl1)->u.drive.szDriveName; CHAR* pszDrive1 = _ILGetDataPointer(pidl1)->u.drive.szDriveName;
CHAR* pszDrive2 = _ILGetDataPointer(pidl2)->u.drive.szDriveName; CHAR* pszDrive2 = _ILGetDataPointer(pidl2)->u.drive.szDriveName;
int result; int result;
switch(LOWORD(lParam)) switch (MyComputerSFHeader[iColumn].colnameid)
{ {
case 0: /* name */ case IDS_SHV_COLUMN_NAME:
{ {
result = stricmp(pszDrive1, pszDrive2); result = stricmp(pszDrive1, pszDrive2);
hres = MAKE_COMPARE_HRESULT(result); hres = MAKE_COMPARE_HRESULT(result);
break; break;
} }
case 1: /* Type */ case IDS_SHV_COLUMN_TYPE:
{ {
/* We want to return immediately because SHELL32_CompareDetails also compares children. */ /* We want to return immediately because SHELL32_CompareDetails also compares children. */
return SHELL32_CompareDetails(this, lParam, pidl1, pidl2); return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
} }
case 2: /* Size */ case IDS_SHV_COLUMN_DISK_CAPACITY:
case 3: /* Size Available */ case IDS_SHV_COLUMN_DISK_AVAILABLE:
{ {
ULARGE_INTEGER Drive1Available, Drive1Total, Drive2Available, Drive2Total; ULARGE_INTEGER Drive1Available, Drive1Total, Drive2Available, Drive2Total;
@ -796,11 +795,10 @@ HRESULT WINAPI CDrivesFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1
hres = MAKE_COMPARE_HRESULT(Diff.QuadPart); hres = MAKE_COMPARE_HRESULT(Diff.QuadPart);
break; break;
} }
case 4: /* comments */ case IDS_SHV_COLUMN_COMMENTS:
hres = MAKE_COMPARE_HRESULT(0); hres = MAKE_COMPARE_HRESULT(0);
break; break;
default: DEFAULT_UNREACHABLE;
return E_INVALIDARG;
} }
if (HRESULT_CODE(hres) == 0) if (HRESULT_CODE(hres) == 0)
@ -1117,7 +1115,7 @@ HRESULT WINAPI CDrivesFolder::GetDefaultColumnState(UINT iColumn, DWORD * pcsFla
{ {
TRACE ("(%p)\n", this); TRACE ("(%p)\n", this);
if (!pcsFlags || iColumn >= MYCOMPUTERSHELLVIEWCOLUMNS) if (!pcsFlags || iColumn >= _countof(MyComputerSFHeader))
return E_INVALIDARG; return E_INVALIDARG;
*pcsFlags = MyComputerSFHeader[iColumn].pcsFlags; *pcsFlags = MyComputerSFHeader[iColumn].pcsFlags;
return S_OK; return S_OK;
@ -1135,7 +1133,7 @@ HRESULT WINAPI CDrivesFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, S
TRACE ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd); TRACE ("(%p)->(%p %i %p)\n", this, pidl, iColumn, psd);
if (!psd || iColumn >= MYCOMPUTERSHELLVIEWCOLUMNS) if (!psd || iColumn >= _countof(MyComputerSFHeader))
return E_INVALIDARG; return E_INVALIDARG;
if (!pidl) if (!pidl)
@ -1146,7 +1144,18 @@ HRESULT WINAPI CDrivesFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, S
} }
else if (!_ILIsDrive(pidl)) else if (!_ILIsDrive(pidl))
{ {
return m_regFolder->GetDetailsOf(pidl, iColumn, psd); switch (MyComputerSFHeader[iColumn].colnameid)
{
case IDS_SHV_COLUMN_NAME:
case IDS_SHV_COLUMN_TYPE:
return m_regFolder->GetDetailsOf(pidl, iColumn, psd);
case IDS_SHV_COLUMN_DISK_CAPACITY:
case IDS_SHV_COLUMN_DISK_AVAILABLE:
return SHSetStrRet(&psd->str, ""); /* blank col */
case IDS_SHV_COLUMN_COMMENTS:
return m_regFolder->GetDetailsOf(pidl, 2, psd); /* 2 = comments */
DEFAULT_UNREACHABLE;
}
} }
else else
{ {
@ -1156,19 +1165,19 @@ HRESULT WINAPI CDrivesFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, S
if (DriveType > DRIVE_RAMDISK) if (DriveType > DRIVE_RAMDISK)
DriveType = DRIVE_FIXED; DriveType = DRIVE_FIXED;
switch (iColumn) switch (MyComputerSFHeader[iColumn].colnameid)
{ {
case 0: /* name */ case IDS_SHV_COLUMN_NAME:
hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
break; break;
case 1: /* type */ case IDS_SHV_COLUMN_TYPE:
if (DriveType == DRIVE_REMOVABLE && !IsDriveFloppyA(pszDrive)) if (DriveType == DRIVE_REMOVABLE && !IsDriveFloppyA(pszDrive))
hr = SHSetStrRet(&psd->str, IDS_DRIVE_REMOVABLE); hr = SHSetStrRet(&psd->str, IDS_DRIVE_REMOVABLE);
else else
hr = SHSetStrRet(&psd->str, iDriveTypeIds[DriveType]); hr = SHSetStrRet(&psd->str, iDriveTypeIds[DriveType]);
break; break;
case 2: /* total size */ case IDS_SHV_COLUMN_DISK_CAPACITY:
case 3: /* free size */ case IDS_SHV_COLUMN_DISK_AVAILABLE:
psd->str.cStr[0] = 0x00; psd->str.cStr[0] = 0x00;
psd->str.uType = STRRET_CSTR; psd->str.uType = STRRET_CSTR;
if (GetVolumeInformationA(pszDrive, NULL, 0, NULL, NULL, NULL, NULL, 0)) if (GetVolumeInformationA(pszDrive, NULL, 0, NULL, NULL, NULL, NULL, 0))
@ -1181,9 +1190,10 @@ HRESULT WINAPI CDrivesFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, S
} }
hr = S_OK; hr = S_OK;
break; break;
case 4: /* FIXME: comments */ case IDS_SHV_COLUMN_COMMENTS:
hr = SHSetStrRet(&psd->str, ""); hr = SHSetStrRet(&psd->str, ""); /* FIXME: comments */
break; break;
DEFAULT_UNREACHABLE;
} }
} }