[SHELL32]

- CAdminToolsFolder: return proper attributes when no items are specified. (This is fine for reg folders but doesn't work for fs folders).
- CFontsFolder: fix GetAttributesOf as above. Fix Initialize method to return success. All shell folders should support this method.
- CNetFolder: Return the name of the folder when asked.
- CPrinterFolder: It doesn't have subfolders so it doesn't make sense to implement BindToObject.

svn path=/trunk/; revision=68728
This commit is contained in:
Giannis Adamopoulos 2015-08-17 11:28:20 +00:00
parent 8037625c04
commit ef89f318da
4 changed files with 73 additions and 9 deletions

View file

@ -114,7 +114,31 @@ HRESULT WINAPI CAdminToolsFolder::CreateViewObject(HWND hwndOwner, REFIID riid,
HRESULT WINAPI CAdminToolsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
{
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
static const DWORD dwAdminToolsAttributes =
SFGAO_STORAGE | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR |
SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
if(cidl)
{
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
}
else
{
if (!rgfInOut)
return E_INVALIDARG;
if (cidl && !apidl)
return E_INVALIDARG;
if (*rgfInOut == 0)
*rgfInOut = ~0;
*rgfInOut &= dwAdminToolsAttributes;
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
return S_OK;
}
}
HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,

View file

@ -111,7 +111,31 @@ HRESULT WINAPI CFontsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOI
HRESULT WINAPI CFontsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
{
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
static const DWORD dwFontsAttributes =
SFGAO_STORAGE | SFGAO_STORAGEANCESTOR | SFGAO_FILESYSANCESTOR |
SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
if(cidl)
{
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
}
else
{
if (!rgfInOut)
return E_INVALIDARG;
if (cidl && !apidl)
return E_INVALIDARG;
if (*rgfInOut == 0)
*rgfInOut = ~0;
*rgfInOut &= dwFontsAttributes;
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
return S_OK;
}
}
HRESULT WINAPI CFontsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
@ -222,7 +246,7 @@ HRESULT WINAPI CFontsFolder::Initialize(LPCITEMIDLIST pidl)
{
TRACE ("(%p)->(%p)\n", this, pidl);
return E_NOTIMPL;
return S_OK;
}
/**************************************************************************

View file

@ -279,12 +279,31 @@ HRESULT WINAPI CNetFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CH
*/
HRESULT WINAPI CNetFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
{
FIXME("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
pdump(pidl);
LPWSTR pszName;
TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", this, pidl, dwFlags, strRet);
pdump (pidl);
if (!strRet)
return E_INVALIDARG;
if (!pidl->mkid.cb)
{
pszName = (LPWSTR)CoTaskMemAlloc(MAX_PATH * sizeof(WCHAR));
if (!pszName)
return E_OUTOFMEMORY;
if (LoadStringW(shell32_hInstance, IDS_NETWORKPLACE, pszName, MAX_PATH))
{
pszName[MAX_PATH-1] = L'\0';
strRet->uType = STRRET_WSTR;
strRet->pOleStr = pszName;
return S_OK;
}
CoTaskMemFree(pszName);
return E_FAIL;
}
return E_NOTIMPL;
}

View file

@ -370,10 +370,7 @@ HRESULT WINAPI CPrinterFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUM
*/
HRESULT WINAPI CPrinterFolder::BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
{
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", this,
pidl, pbcReserved, shdebugstr_guid (&riid), ppvOut);
return SHELL32_BindToChild(pidlRoot, NULL, pidl, riid, ppvOut);
return E_NOTIMPL;
}
/**************************************************************************