diff --git a/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp b/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp index 5793d765077..18141c261ad 100644 --- a/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CControlPanelFolder.cpp @@ -335,8 +335,14 @@ HRESULT WINAPI CControlPanelFolder::ParseDisplayName( else { if (pdwAttributes && *pdwAttributes) - hr = SHELL32_GetItemAttributes(this, - pidlTemp, pdwAttributes); + { + if (_ILIsCPanelStruct(pidlTemp)) + *pdwAttributes &= SFGAO_CANLINK; + else if (_ILIsSpecialFolder(pidlTemp)) + SHELL32_GetGuidItemAttributes(this, pidlTemp, pdwAttributes); + else + ERR("Got an unkown pidl here!\n"); + } } } diff --git a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp index ea139e3653a..5059ea6f2ef 100644 --- a/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CDesktopFolder.cpp @@ -72,6 +72,17 @@ static const shvheader DesktopSFHeader[] = { #define DESKTOPSHELLVIEWCOLUMNS 5 +static const DWORD dwDesktopAttributes = + SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR | + SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE | SFGAO_CANLINK; +static const DWORD dwMyComputerAttributes = + SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK; +static DWORD dwMyNetPlacesAttributes = + SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK; + + CDesktopFolderEnum::CDesktopFolderEnum() { } @@ -392,8 +403,16 @@ HRESULT WINAPI CDesktopFolder::ParseDisplayName( else { if (pdwAttributes && *pdwAttributes) - hr = SHELL32_GetItemAttributes((IShellFolder *)this, - pidlTemp, pdwAttributes); + { + if (_ILIsMyComputer(pidlTemp)) + *pdwAttributes &= dwMyComputerAttributes; + else if (_ILIsNetHood(pidlTemp)) + *pdwAttributes &= dwMyNetPlacesAttributes; + else if (_ILIsSpecialFolder(pidlTemp)) + SHELL32_GetGuidItemAttributes(this, pidlTemp, pdwAttributes); + else if(_ILIsFolder(pidlTemp) || _ILIsValue(pidlTemp)) + SHELL32_GetFSItemAttributes(this, pidlTemp, pdwAttributes); + } } } @@ -504,15 +523,6 @@ HRESULT WINAPI CDesktopFolder::GetAttributesOf( DWORD *rgfInOut) { HRESULT hr = S_OK; - static const DWORD dwDesktopAttributes = - SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR | - SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE | SFGAO_CANLINK; - static const DWORD dwMyComputerAttributes = - SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | - SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK; - static DWORD dwMyNetPlacesAttributes = - SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET | SFGAO_DROPTARGET | - SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_CANLINK; TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", this, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); @@ -540,7 +550,7 @@ HRESULT WINAPI CDesktopFolder::GetAttributesOf( else if (_ILIsSpecialFolder(apidl[i])) SHELL32_GetGuidItemAttributes(this, apidl[i], rgfInOut); else if(_ILIsFolder(apidl[i]) || _ILIsValue(apidl[i])) - SHELL32_GetItemAttributes(this, apidl[i], rgfInOut); + SHELL32_GetFSItemAttributes(this, apidl[i], rgfInOut); else ERR("Got an unknown pidl type!!!\n"); } diff --git a/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp b/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp index 176bffe543a..39c8a5ed495 100644 --- a/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp +++ b/reactos/dll/win32/shell32/folders/CDrivesFolder.cpp @@ -234,10 +234,16 @@ HRESULT WINAPI CDrivesFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLEST } else { - if (pdwAttributes && *pdwAttributes) - SHELL32_GetItemAttributes (this, - pidlTemp, pdwAttributes); hr = S_OK; + if (pdwAttributes && *pdwAttributes) + { + if (_ILIsCPanelStruct(pidlTemp)) + *pdwAttributes &= SFGAO_CANLINK; + else if (_ILIsSpecialFolder(pidlTemp)) + SHELL32_GetGuidItemAttributes(this, pidlTemp, pdwAttributes); + else + ERR("Got an unkown pidl here!\n"); + } } *ppidl = pidlTemp; diff --git a/reactos/dll/win32/shell32/shfldr.h b/reactos/dll/win32/shell32/shfldr.h index b470a0e8600..7463753e6d6 100644 --- a/reactos/dll/win32/shell32/shfldr.h +++ b/reactos/dll/win32/shell32/shfldr.h @@ -39,7 +39,6 @@ typedef struct { LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut); HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut, LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes); -HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes); HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut, DWORD dwOutLen); diff --git a/reactos/dll/win32/shell32/shlfolder.cpp b/reactos/dll/win32/shell32/shlfolder.cpp index b205c0385f3..f2ecbe7e35f 100644 --- a/reactos/dll/win32/shell32/shlfolder.cpp +++ b/reactos/dll/win32/shell32/shlfolder.cpp @@ -588,35 +588,6 @@ HRESULT SHELL32_GetFSItemAttributes(IShellFolder * psf, LPCITEMIDLIST pidl, LPDW return S_OK; } -HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes) -{ - TRACE ("0x%08x\n", *pdwAttributes); - - if (*pdwAttributes & ~dwSupportedAttr) - { - WARN ("attributes 0x%08x not implemented\n", (*pdwAttributes & ~dwSupportedAttr)); - *pdwAttributes &= dwSupportedAttr; - } - - if (_ILIsSpecialFolder(pidl)) - { - return SHELL32_GetGuidItemAttributes(psf, pidl, pdwAttributes); - } - else if(_ILIsFolder(pidl) || _ILIsValue(pidl)) - { - return SHELL32_GetFSItemAttributes(psf, pidl, pdwAttributes); - } - else - { - /* Set common attributes */ - ERR("We got a pidl that is neither a guid or an FS item!!! Type=0x%x\n",pidl->mkid.abID[0]); - *pdwAttributes &= SFGAO_CANLINK; - } - - TRACE ("-- 0x%08x\n", *pdwAttributes); - return S_OK; -} - /*********************************************************************** * SHELL32_CompareIDs */