diff --git a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp index 870b2c9d350..7a81c9f71e1 100644 --- a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -64,12 +64,14 @@ int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hI static const shvheader DesktopSFHeader[] = { {IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15}, - {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10}, {IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}, + {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, {IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 12}, + {IDS_SHV_COLUMN_ATTRIBUTES, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10} }; -#define DESKTOPSHELLVIEWCOLUMNS 4 +#define DESKTOPSHELLVIEWCOLUMNS 6 static const DWORD dwDesktopAttributes = SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR | diff --git a/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp b/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp index 80f55cfb75c..2280cfbed9c 100644 --- a/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp @@ -183,12 +183,13 @@ class CDrivesFolderEnum : static const shvheader MyComputerSFHeader[] = { {IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15}, + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10}, {IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}, {IDS_SHV_COLUMN_DISK_CAPACITY, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, {IDS_SHV_COLUMN_DISK_AVAILABLE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, }; -#define MYCOMPUTERSHELLVIEWCOLUMNS 4 +#define MYCOMPUTERSHELLVIEWCOLUMNS 5 static const DWORD dwComputerAttributes = SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | @@ -460,13 +461,16 @@ HRESULT WINAPI CDrivesFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1 hres = MAKE_COMPARE_HRESULT(result); break; } - case 1: /* Type */ + case 1: /* comments */ + hres = MAKE_COMPARE_HRESULT(0); + break; + case 2: /* Type */ { /* We want to return immediately because SHELL32_CompareDetails also compares children. */ return SHELL32_CompareDetails(this, lParam, pidl1, pidl2); } - case 2: /* Size */ - case 3: /* Size Available */ + case 3: /* Size */ + case 4: /* Size Available */ { ULARGE_INTEGER Drive1Available, Drive1Total, Drive2Available, Drive2Total; @@ -481,7 +485,7 @@ HRESULT WINAPI CDrivesFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1 Drive2Available.QuadPart = Drive2Total.QuadPart = 0; LARGE_INTEGER Diff; - if (lParam == 2) /* Size */ + if (lParam == 3) /* Size */ Diff.QuadPart = Drive1Total.QuadPart - Drive2Total.QuadPart; else /* Size available */ Diff.QuadPart = Drive1Available.QuadPart - Drive2Available.QuadPart; @@ -842,11 +846,14 @@ HRESULT WINAPI CDrivesFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, S case 0: /* name */ hr = GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); break; - case 1: /* type */ + case 1: /* FIXME: comments */ + hr = SHSetStrRet(&psd->str, ""); + break; + case 2: /* type */ hr = SHSetStrRet(&psd->str, iDriveTypeIds[DriveType]); break; - case 2: /* total size */ - case 3: /* free size */ + case 3: /* total size */ + case 4: /* free size */ psd->str.cStr[0] = 0x00; psd->str.uType = STRRET_CSTR; if (GetVolumeInformationA(pszDrive, NULL, 0, NULL, NULL, NULL, NULL, 0)) diff --git a/reactos/dll/win32/shell32/folders/CFSFolder.cpp b/reactos/dll/win32/shell32/folders/CFSFolder.cpp index c82f5131fac..e4487cad1d4 100644 --- a/reactos/dll/win32/shell32/folders/CFSFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CFSFolder.cpp @@ -81,13 +81,14 @@ CFSFolder::~CFSFolder() static const shvheader GenericSFHeader[] = { {IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15}, - {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 0}, {IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}, + {IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, {IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 12}, {IDS_SHV_COLUMN_ATTRIBUTES, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10} }; -#define GENERICSHELLVIEWCOLUMNS 5 +#define GENERICSHELLVIEWCOLUMNS 6 /************************************************************************** * SHELL32_CreatePidlFromBindCtx [internal] @@ -328,20 +329,23 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam, case 0: /* Name */ result = wcsicmp(pDataW1->wszName, pDataW2->wszName); break; + case 1: /* Comments */ + result = 0; + break; case 2: /* Type */ pExtension1 = PathFindExtensionW(pDataW1->wszName); pExtension2 = PathFindExtensionW(pDataW2->wszName); result = wcsicmp(pExtension1, pExtension2); break; - case 1: /* Size */ + case 3: /* Size */ result = pData1->u.file.dwFileSize - pData2->u.file.dwFileSize; break; - case 3: /* Modified */ + case 4: /* Modified */ result = pData1->u.file.uFileDate - pData2->u.file.uFileDate; if (result == 0) result = pData1->u.file.uFileTime - pData2->u.file.uFileTime; break; - case 4: /* Attributes */ + case 5: /* Attributes */ return SHELL32_CompareDetails(this, lParam, pidl1, pidl2); } @@ -825,19 +829,21 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl, switch (iColumn) { case 0: /* name */ - hr = GetDisplayNameOf (pidl, - SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + hr = GetDisplayNameOf (pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); break; - case 1: /* size */ - _ILGetFileSize(pidl, psd->str.cStr, MAX_PATH); + case 1: /* FIXME: comments */ + psd->str.cStr[0] = 0; break; case 2: /* type */ _ILGetFileType(pidl, psd->str.cStr, MAX_PATH); break; - case 3: /* date */ + case 3: /* size */ + _ILGetFileSize(pidl, psd->str.cStr, MAX_PATH); + break; + case 4: /* date */ _ILGetFileDate(pidl, psd->str.cStr, MAX_PATH); break; - case 4: /* attributes */ + case 5: /* attributes */ _ILGetFileAttributes(pidl, psd->str.cStr, MAX_PATH); break; } diff --git a/reactos/dll/win32/shell32/folders/CRegFolder.cpp b/reactos/dll/win32/shell32/folders/CRegFolder.cpp index 55d4fa84f5e..99bdef27021 100644 --- a/reactos/dll/win32/shell32/folders/CRegFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CRegFolder.cpp @@ -637,7 +637,7 @@ HRESULT WINAPI CRegFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID * HRESULT WINAPI CRegFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) { - if (!psd || iColumn >= 2) + if (!psd) return E_INVALIDARG; GUID const *clsid = _ILGetGUIDPointer (pidl); @@ -648,20 +648,31 @@ HRESULT WINAPI CRegFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHEL return E_INVALIDARG; } + if (iColumn >= 3) + { + /* Return an empty string when we area asked for a column we don't support. + Only the regfolder is supposed to do this as it supports less columns compared to other folder + and its contents are supposed to be presented alongside items that support more columns. */ + return SHSetStrRet(&psd->str, ""); + } + switch(iColumn) { case 0: /* name */ return GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); - case 1: /* comment */ + case 1: /* comments */ HKEY hKey; - if (HCR_RegOpenClassIDKey(*clsid, &hKey)) - { - psd->str.cStr[0] = 0x00; - psd->str.uType = STRRET_CSTR; - RegLoadMUIStringA(hKey, "InfoTip", psd->str.cStr, MAX_PATH, NULL, 0, NULL); - RegCloseKey(hKey); - return S_OK; - } + if (!HCR_RegOpenClassIDKey(*clsid, &hKey)) + return SHSetStrRet(&psd->str, ""); + + psd->str.cStr[0] = 0x00; + psd->str.uType = STRRET_CSTR; + RegLoadMUIStringA(hKey, "InfoTip", psd->str.cStr, MAX_PATH, NULL, 0, NULL); + RegCloseKey(hKey); + return S_OK; + case 2: /* type */ + //return SHSetStrRet(&psd->str, resource_id); /* FIXME: translate */ + return SHSetStrRet(&psd->str, "System Folder"); } return E_FAIL; }