[SHELL32]

- Remove SHELL32_GetItemAttributes for good. It is never a good idea to have one function that handles many types of pidls.

svn path=/trunk/; revision=68873
This commit is contained in:
Giannis Adamopoulos 2015-08-30 14:28:07 +00:00
parent 65caa6e448
commit dc515c2a97
5 changed files with 39 additions and 47 deletions

View file

@ -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");
}
}
}

View file

@ -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");
}

View file

@ -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;

View file

@ -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);

View file

@ -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
*/