mirror of
https://github.com/reactos/reactos.git
synced 2025-06-05 09:20:30 +00:00
[SHELL32]
- Add a helper HCR_GetClassName function to load the name of a reg folder to a STRRET - Further simplify CAdminToolsFolder, CFontsFolder and CMyDocsFolder svn path=/trunk/; revision=69319
This commit is contained in:
parent
49b29b7594
commit
0ea9ff44f2
8 changed files with 137 additions and 309 deletions
|
@ -23,43 +23,22 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL (shell);
|
WINE_DEFAULT_DEBUG_CHANNEL (shell);
|
||||||
|
|
||||||
/*
|
|
||||||
This folder should not exist. It is just a file system folder...
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* List shortcuts of
|
|
||||||
* CSIDL_COMMON_ADMINTOOLS
|
|
||||||
* Note: CSIDL_ADMINTOOLS is ignored, tested with Window XP SP3+
|
|
||||||
*/
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* AdminTools folder implementation
|
|
||||||
*/
|
|
||||||
|
|
||||||
CAdminToolsFolder::CAdminToolsFolder()
|
CAdminToolsFolder::CAdminToolsFolder()
|
||||||
{
|
{
|
||||||
m_pisfInner = NULL;
|
m_pisfInner = NULL;
|
||||||
m_pisf2Inner = NULL;
|
|
||||||
|
|
||||||
szTarget = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CAdminToolsFolder::~CAdminToolsFolder()
|
CAdminToolsFolder::~CAdminToolsFolder()
|
||||||
{
|
{
|
||||||
HeapFree(GetProcessHeap(), 0, szTarget);
|
|
||||||
m_pisfInner.Release();
|
m_pisfInner.Release();
|
||||||
m_pisf2Inner.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::FinalConstruct()
|
HRESULT WINAPI CAdminToolsFolder::FinalConstruct()
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
CComPtr<IPersistFolder3> ppf3;
|
CComPtr<IPersistFolder3> ppf3;
|
||||||
hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder, &m_pisfInner));
|
|
||||||
if (FAILED(hr))
|
|
||||||
return hr;
|
|
||||||
|
|
||||||
hr = m_pisfInner->QueryInterface(IID_PPV_ARG(IShellFolder2, &m_pisf2Inner));
|
hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder2, &m_pisfInner));
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
@ -67,18 +46,16 @@ HRESULT WINAPI CAdminToolsFolder::FinalConstruct()
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
LPITEMIDLIST pidlRoot = _ILCreateAdminTools();
|
||||||
|
|
||||||
PERSIST_FOLDER_TARGET_INFO info;
|
PERSIST_FOLDER_TARGET_INFO info;
|
||||||
ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO));
|
ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO));
|
||||||
info.csidl = CSIDL_COMMON_ADMINTOOLS;
|
info.csidl = CSIDL_COMMON_ADMINTOOLS;
|
||||||
hr = ppf3->InitializeEx(NULL, _ILCreateAdminTools(), &info);
|
hr = ppf3->InitializeEx(NULL, pidlRoot, &info);
|
||||||
|
|
||||||
szTarget = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
|
SHFree(pidlRoot);
|
||||||
if (szTarget == NULL)
|
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
if (!SHGetSpecialFolderPathW(NULL, szTarget, CSIDL_COMMON_ADMINTOOLS, FALSE))
|
|
||||||
return E_FAIL;
|
|
||||||
|
|
||||||
return S_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
HRESULT WINAPI CAdminToolsFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName,
|
||||||
|
@ -119,14 +96,9 @@ HRESULT WINAPI CAdminToolsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARR
|
||||||
SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
|
SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
|
||||||
|
|
||||||
if(cidl)
|
if(cidl)
|
||||||
{
|
|
||||||
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
|
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
|
||||||
}
|
|
||||||
else
|
if (!rgfInOut || !apidl)
|
||||||
{
|
|
||||||
if (!rgfInOut)
|
|
||||||
return E_INVALIDARG;
|
|
||||||
if (cidl && !apidl)
|
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (*rgfInOut == 0)
|
if (*rgfInOut == 0)
|
||||||
|
@ -138,7 +110,6 @@ HRESULT WINAPI CAdminToolsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARR
|
||||||
*rgfInOut &= ~SFGAO_VALIDATE;
|
*rgfInOut &= ~SFGAO_VALIDATE;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
|
HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
|
||||||
|
@ -149,43 +120,25 @@ HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUIT
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
HRESULT WINAPI CAdminToolsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
||||||
{
|
{
|
||||||
|
if (!strRet || !pidl)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
/* If we got an fs item just forward to the fs folder */
|
||||||
if (!_ILIsSpecialFolder(pidl))
|
if (!_ILIsSpecialFolder(pidl))
|
||||||
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
||||||
|
|
||||||
HRESULT hr = S_OK;
|
/* The caller wants our path. Let fs folder handle it */
|
||||||
LPWSTR pszPath;
|
|
||||||
|
|
||||||
TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
|
|
||||||
pdump (pidl);
|
|
||||||
|
|
||||||
if (!strRet)
|
|
||||||
return E_INVALIDARG;
|
|
||||||
|
|
||||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
|
|
||||||
if (!pszPath)
|
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
|
|
||||||
ZeroMemory(pszPath, (MAX_PATH + 1) * sizeof(WCHAR));
|
|
||||||
|
|
||||||
if (!pidl->mkid.cb)
|
|
||||||
{
|
|
||||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||||
wcscpy(pszPath, szTarget);
|
|
||||||
else if (!HCR_GetClassNameW(CLSID_AdminFolderShortcut, pszPath, MAX_PATH))
|
|
||||||
hr = E_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
|
||||||
{
|
{
|
||||||
strRet->uType = STRRET_WSTR;
|
/* Give an empty pidl to the fs folder to make it tell us its path */
|
||||||
strRet->pOleStr = pszPath;
|
if (pidl->mkid.cb)
|
||||||
TRACE ("-- (%p)->(%s,0x%08x)\n", this, debugstr_w(strRet->pOleStr), hr);
|
pidl = ILGetNext(pidl);
|
||||||
|
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
CoTaskMemFree(pszPath);
|
|
||||||
|
|
||||||
return hr;
|
/* Return the display name from the registry */
|
||||||
|
return HCR_GetClassName(CLSID_AdminFolderShortcut, strRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
|
HRESULT WINAPI CAdminToolsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
|
||||||
|
@ -196,66 +149,58 @@ HRESULT WINAPI CAdminToolsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetDefaultSearchGUID(GUID *pguid)
|
HRESULT WINAPI CAdminToolsFolder::GetDefaultSearchGUID(GUID *pguid)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultSearchGUID(pguid);
|
return m_pisfInner->GetDefaultSearchGUID(pguid);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
HRESULT WINAPI CAdminToolsFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->EnumSearches(ppenum);
|
return m_pisfInner->EnumSearches(ppenum);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
|
HRESULT WINAPI CAdminToolsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultColumn(dwRes, pSort, pDisplay);
|
return m_pisfInner->GetDefaultColumn(dwRes, pSort, pDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
HRESULT WINAPI CAdminToolsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultColumnState(iColumn, pcsFlags);
|
return m_pisfInner->GetDefaultColumnState(iColumn, pcsFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
HRESULT WINAPI CAdminToolsFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDetailsEx(pidl, pscid, pv);
|
return m_pisfInner->GetDetailsEx(pidl, pscid, pv);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
|
HRESULT WINAPI CAdminToolsFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDetailsOf(pidl, iColumn, psd);
|
return m_pisfInner->GetDetailsOf(pidl, iColumn, psd);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
|
HRESULT WINAPI CAdminToolsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->MapColumnToSCID(column, pscid);
|
return m_pisfInner->MapColumnToSCID(column, pscid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* CAdminToolsFolder::GetClassID
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetClassID(CLSID *lpClassId)
|
HRESULT WINAPI CAdminToolsFolder::GetClassID(CLSID *lpClassId)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)\n", this);
|
if (!lpClassId)
|
||||||
|
return E_POINTER;
|
||||||
|
|
||||||
memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID));
|
memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID));
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* CAdminToolsFolder::Initialize
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::Initialize(LPCITEMIDLIST pidl)
|
HRESULT WINAPI CAdminToolsFolder::Initialize(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* CAdminToolsFolder::GetCurFolder
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CAdminToolsFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
HRESULT WINAPI CAdminToolsFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
||||||
{
|
{
|
||||||
CComPtr<IPersistFolder2> ppf2;
|
if (!pidl)
|
||||||
m_pisfInner->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
|
return E_POINTER;
|
||||||
return ppf2->GetCurFolder(pidl);
|
*pidl = _ILCreateAdminTools();
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,9 +29,7 @@ class CAdminToolsFolder :
|
||||||
public IPersistFolder2
|
public IPersistFolder2
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
CComPtr<IShellFolder> m_pisfInner;
|
CComPtr<IShellFolder2> m_pisfInner;
|
||||||
CComPtr<IShellFolder2> m_pisf2Inner;
|
|
||||||
LPWSTR szTarget;
|
|
||||||
public:
|
public:
|
||||||
CAdminToolsFolder();
|
CAdminToolsFolder();
|
||||||
~CAdminToolsFolder();
|
~CAdminToolsFolder();
|
||||||
|
|
|
@ -23,46 +23,20 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL (shell);
|
WINE_DEFAULT_DEBUG_CHANNEL (shell);
|
||||||
|
|
||||||
/*
|
|
||||||
This folder should not exist. It is just a file system folder... The \windows\fonts
|
|
||||||
directory contains a hidden desktop.ini with a UIHandler entry that specifies a class
|
|
||||||
that lives in fontext.dll. The UI handler creates a custom view for the folder, which
|
|
||||||
is what we normally see. However, the folder is a perfectly normal CFSFolder.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* IShellFolder implementation
|
|
||||||
*/
|
|
||||||
|
|
||||||
CFontsFolder::CFontsFolder()
|
CFontsFolder::CFontsFolder()
|
||||||
{
|
{
|
||||||
m_pisfInner = NULL;
|
m_pisfInner = NULL;
|
||||||
m_pisf2Inner = NULL;
|
|
||||||
|
|
||||||
pidlRoot = NULL;
|
|
||||||
apidl = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CFontsFolder::~CFontsFolder()
|
CFontsFolder::~CFontsFolder()
|
||||||
{
|
{
|
||||||
TRACE("-- destroying IShellFolder(%p)\n", this);
|
|
||||||
SHFree(pidlRoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
static LPITEMIDLIST _ILCreateFont(void)
|
|
||||||
{
|
|
||||||
return _ILCreateGuid(PT_GUID, CLSID_FontsFolderShortcut);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::FinalConstruct()
|
HRESULT WINAPI CFontsFolder::FinalConstruct()
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
CComPtr<IPersistFolder3> ppf3;
|
CComPtr<IPersistFolder3> ppf3;
|
||||||
hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder, &m_pisfInner));
|
hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder2, &m_pisfInner));
|
||||||
if (FAILED(hr))
|
|
||||||
return hr;
|
|
||||||
|
|
||||||
hr = m_pisfInner->QueryInterface(IID_PPV_ARG(IShellFolder2, &m_pisf2Inner));
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
@ -70,10 +44,16 @@ HRESULT WINAPI CFontsFolder::FinalConstruct()
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
LPITEMIDLIST pidl = _ILCreateGuid(PT_GUID, CLSID_FontsFolderShortcut);
|
||||||
|
if (!pidl)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
PERSIST_FOLDER_TARGET_INFO info;
|
PERSIST_FOLDER_TARGET_INFO info;
|
||||||
ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO));
|
ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO));
|
||||||
info.csidl = CSIDL_FONTS;
|
info.csidl = CSIDL_FONTS;
|
||||||
hr = ppf3->InitializeEx(NULL, _ILCreateFont(), &info);
|
hr = ppf3->InitializeEx(NULL, pidl, &info);
|
||||||
|
|
||||||
|
ILFree(pidl);
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
@ -116,14 +96,9 @@ HRESULT WINAPI CFontsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY ap
|
||||||
SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
|
SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER;
|
||||||
|
|
||||||
if(cidl)
|
if(cidl)
|
||||||
{
|
|
||||||
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
|
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
|
||||||
}
|
|
||||||
else
|
if (!rgfInOut || !apidl)
|
||||||
{
|
|
||||||
if (!rgfInOut)
|
|
||||||
return E_INVALIDARG;
|
|
||||||
if (cidl && !apidl)
|
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (*rgfInOut == 0)
|
if (*rgfInOut == 0)
|
||||||
|
@ -135,7 +110,6 @@ HRESULT WINAPI CFontsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY ap
|
||||||
*rgfInOut &= ~SFGAO_VALIDATE;
|
*rgfInOut &= ~SFGAO_VALIDATE;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
|
HRESULT WINAPI CFontsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
|
||||||
|
@ -146,39 +120,26 @@ HRESULT WINAPI CFontsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
HRESULT WINAPI CFontsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
||||||
{
|
{
|
||||||
|
if (!strRet || !pidl)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
/* If we got an fs item just forward to the fs folder */
|
||||||
if (!_ILIsSpecialFolder(pidl))
|
if (!_ILIsSpecialFolder(pidl))
|
||||||
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
||||||
|
|
||||||
TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
|
/* The caller wants our path. Let fs folder handle it */
|
||||||
pdump (pidl);
|
|
||||||
|
|
||||||
if (!strRet)
|
|
||||||
return E_INVALIDARG;
|
|
||||||
|
|
||||||
if (!pidl->mkid.cb)
|
|
||||||
{
|
|
||||||
WCHAR wszPath[MAX_PATH];
|
|
||||||
|
|
||||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||||
{
|
{
|
||||||
if (!SHGetSpecialFolderPathW(NULL, wszPath, CSIDL_FONTS, FALSE))
|
/* Give an empty pidl to the fs folder to tell us its path */
|
||||||
return E_FAIL;
|
if (pidl->mkid.cb)
|
||||||
|
pidl = ILGetNext(pidl);
|
||||||
|
|
||||||
|
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
||||||
}
|
}
|
||||||
else if (!HCR_GetClassNameW(CLSID_FontsFolderShortcut, wszPath, MAX_PATH))
|
|
||||||
return E_FAIL;
|
|
||||||
|
|
||||||
strRet->pOleStr = (LPWSTR)CoTaskMemAlloc((wcslen(wszPath) + 1) * sizeof(WCHAR));
|
/* Return the display name from the registry */
|
||||||
if (!strRet->pOleStr)
|
return HCR_GetClassName(CLSID_FontsFolderShortcut, strRet);
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
|
|
||||||
wcscpy(strRet->pOleStr, wszPath);
|
|
||||||
strRet->uType = STRRET_WSTR;
|
|
||||||
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return E_INVALIDARG;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
|
HRESULT WINAPI CFontsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
|
||||||
|
@ -189,46 +150,41 @@ HRESULT WINAPI CFontsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl,
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetDefaultSearchGUID(GUID *pguid)
|
HRESULT WINAPI CFontsFolder::GetDefaultSearchGUID(GUID *pguid)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultSearchGUID(pguid);
|
return m_pisfInner->GetDefaultSearchGUID(pguid);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
HRESULT WINAPI CFontsFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->EnumSearches(ppenum);
|
return m_pisfInner->EnumSearches(ppenum);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
|
HRESULT WINAPI CFontsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultColumn(dwRes, pSort, pDisplay);
|
return m_pisfInner->GetDefaultColumn(dwRes, pSort, pDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
HRESULT WINAPI CFontsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultColumnState(iColumn, pcsFlags);
|
return m_pisfInner->GetDefaultColumnState(iColumn, pcsFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
HRESULT WINAPI CFontsFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDetailsEx(pidl, pscid, pv);
|
return m_pisfInner->GetDetailsEx(pidl, pscid, pv);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
|
HRESULT WINAPI CFontsFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDetailsOf(pidl, iColumn, psd);
|
return m_pisfInner->GetDetailsOf(pidl, iColumn, psd);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CFontsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
|
HRESULT WINAPI CFontsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->MapColumnToSCID(column, pscid);
|
return m_pisfInner->MapColumnToSCID(column, pscid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* CFontsFolder::GetClassID
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CFontsFolder::GetClassID(CLSID *lpClassId)
|
HRESULT WINAPI CFontsFolder::GetClassID(CLSID *lpClassId)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)\n", this);
|
|
||||||
|
|
||||||
if (!lpClassId)
|
if (!lpClassId)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
|
@ -237,29 +193,17 @@ HRESULT WINAPI CFontsFolder::GetClassID(CLSID *lpClassId)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
|
||||||
* CFontsFolder::Initialize
|
|
||||||
*
|
|
||||||
* NOTES: it makes no sense to change the pidl
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CFontsFolder::Initialize(LPCITEMIDLIST pidl)
|
HRESULT WINAPI CFontsFolder::Initialize(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)->(%p)\n", this, pidl);
|
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* CFontsFolder::GetCurFolder
|
|
||||||
*/
|
|
||||||
HRESULT WINAPI CFontsFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
HRESULT WINAPI CFontsFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)->(%p)\n", this, pidl);
|
|
||||||
|
|
||||||
if (!pidl)
|
if (!pidl)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
*pidl = ILClone(pidlRoot);
|
*pidl = _ILCreateGuid(PT_GUID, CLSID_FontsFolderShortcut);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,12 +29,7 @@ class CFontsFolder :
|
||||||
public IPersistFolder2
|
public IPersistFolder2
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
CComPtr<IShellFolder> m_pisfInner;
|
CComPtr<IShellFolder2> m_pisfInner;
|
||||||
CComPtr<IShellFolder2> m_pisf2Inner;
|
|
||||||
|
|
||||||
/* both paths are parsible from the desktop */
|
|
||||||
LPITEMIDLIST pidlRoot; /* absolute pidl */
|
|
||||||
LPCITEMIDLIST apidl; /* currently focused font item */
|
|
||||||
public:
|
public:
|
||||||
CFontsFolder();
|
CFontsFolder();
|
||||||
~CFontsFolder();
|
~CFontsFolder();
|
||||||
|
|
|
@ -23,55 +23,22 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL (mydocs);
|
WINE_DEFAULT_DEBUG_CHANNEL (mydocs);
|
||||||
|
|
||||||
/*
|
|
||||||
CFileSysEnumX should not exist. CMyDocsFolder should aggregate a CFSFolder which always
|
|
||||||
maps the contents of CSIDL_PERSONAL. Therefore, CMyDocsFolder::EnumObjects simply calls
|
|
||||||
CFSFolder::EnumObjects.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* MyDocumentsfolder implementation
|
|
||||||
*/
|
|
||||||
|
|
||||||
CMyDocsFolder::CMyDocsFolder()
|
CMyDocsFolder::CMyDocsFolder()
|
||||||
{
|
{
|
||||||
m_pisfInner = NULL;
|
m_pisfInner = NULL;
|
||||||
m_pisf2Inner = NULL;
|
|
||||||
pidlRoot = NULL;
|
|
||||||
sPathTarget = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CMyDocsFolder::~CMyDocsFolder()
|
CMyDocsFolder::~CMyDocsFolder()
|
||||||
{
|
{
|
||||||
SHFree(pidlRoot);
|
|
||||||
if (sPathTarget)
|
|
||||||
HeapFree(GetProcessHeap(), 0, sPathTarget);
|
|
||||||
m_pisfInner.Release();
|
m_pisfInner.Release();
|
||||||
m_pisf2Inner.Release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::FinalConstruct()
|
HRESULT WINAPI CMyDocsFolder::FinalConstruct()
|
||||||
{
|
{
|
||||||
WCHAR szMyPath[MAX_PATH];
|
|
||||||
|
|
||||||
if (!SHGetSpecialFolderPathW(0, szMyPath, CSIDL_PERSONAL, TRUE))
|
|
||||||
return E_UNEXPECTED;
|
|
||||||
|
|
||||||
pidlRoot = _ILCreateMyDocuments(); /* my qualified pidl */
|
|
||||||
sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR));
|
|
||||||
wcscpy(sPathTarget, szMyPath);
|
|
||||||
|
|
||||||
WCHAR szPath[MAX_PATH];
|
|
||||||
lstrcpynW(szPath, sPathTarget, MAX_PATH);
|
|
||||||
|
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
CComPtr<IPersistFolder3> ppf3;
|
CComPtr<IPersistFolder3> ppf3;
|
||||||
|
|
||||||
hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder, &m_pisfInner));
|
hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder2, &m_pisfInner));
|
||||||
if (FAILED(hr))
|
|
||||||
return hr;
|
|
||||||
|
|
||||||
hr = m_pisfInner->QueryInterface(IID_PPV_ARG(IShellFolder2, &m_pisf2Inner));
|
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
@ -79,11 +46,15 @@ HRESULT WINAPI CMyDocsFolder::FinalConstruct()
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
LPITEMIDLIST pidlRoot = _ILCreateMyDocuments();
|
||||||
|
|
||||||
PERSIST_FOLDER_TARGET_INFO info;
|
PERSIST_FOLDER_TARGET_INFO info;
|
||||||
ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO));
|
ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO));
|
||||||
info.csidl = CSIDL_PERSONAL;
|
info.csidl = CSIDL_PERSONAL;
|
||||||
hr = ppf3->InitializeEx(NULL, pidlRoot, &info);
|
hr = ppf3->InitializeEx(NULL, pidlRoot, &info);
|
||||||
|
|
||||||
|
SHFree(pidlRoot);
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,14 +96,9 @@ HRESULT WINAPI CMyDocsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY a
|
||||||
SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE;
|
SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM | SFGAO_HASSUBFOLDER | SFGAO_CANRENAME | SFGAO_CANDELETE;
|
||||||
|
|
||||||
if(cidl)
|
if(cidl)
|
||||||
{
|
|
||||||
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
|
return m_pisfInner->GetAttributesOf(cidl, apidl, rgfInOut);
|
||||||
}
|
|
||||||
else
|
if (!rgfInOut || !apidl)
|
||||||
{
|
|
||||||
if (!rgfInOut)
|
|
||||||
return E_INVALIDARG;
|
|
||||||
if (cidl && !apidl)
|
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (*rgfInOut == 0)
|
if (*rgfInOut == 0)
|
||||||
|
@ -144,7 +110,6 @@ HRESULT WINAPI CMyDocsFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY a
|
||||||
*rgfInOut &= ~SFGAO_VALIDATE;
|
*rgfInOut &= ~SFGAO_VALIDATE;
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
|
HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
|
||||||
|
@ -155,48 +120,25 @@ HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
HRESULT WINAPI CMyDocsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
||||||
{
|
{
|
||||||
|
if (!strRet || !pidl)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
/* If we got an fs item just forward to the fs folder */
|
||||||
if (!_ILIsSpecialFolder(pidl))
|
if (!_ILIsSpecialFolder(pidl))
|
||||||
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
||||||
|
|
||||||
HRESULT hr = S_OK;
|
/* The caller wants our path. Let fs folder handle it */
|
||||||
LPWSTR pszPath;
|
|
||||||
|
|
||||||
TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", this, pidl, dwFlags, strRet);
|
|
||||||
pdump (pidl);
|
|
||||||
|
|
||||||
if (!strRet)
|
|
||||||
return E_INVALIDARG;
|
|
||||||
|
|
||||||
pszPath = (LPWSTR)CoTaskMemAlloc((MAX_PATH + 1) * sizeof(WCHAR));
|
|
||||||
if (!pszPath)
|
|
||||||
return E_OUTOFMEMORY;
|
|
||||||
|
|
||||||
ZeroMemory(pszPath, (MAX_PATH + 1) * sizeof(WCHAR));
|
|
||||||
|
|
||||||
if (_ILIsMyDocuments (pidl) || !pidl->mkid.cb)
|
|
||||||
{
|
|
||||||
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
|
||||||
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
|
||||||
wcscpy(pszPath, sPathTarget);
|
|
||||||
else
|
|
||||||
HCR_GetClassNameW(CLSID_MyDocuments, pszPath, MAX_PATH);
|
|
||||||
TRACE("CP\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
hr = E_INVALIDARG;
|
/* Give an empty pidl to the fs folder to make it tell us its path */
|
||||||
|
if (pidl->mkid.cb)
|
||||||
|
pidl = ILGetNext(pidl);
|
||||||
|
return m_pisfInner->GetDisplayNameOf(pidl, dwFlags, strRet);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SUCCEEDED(hr))
|
/* Return the display name from the registry */
|
||||||
{
|
return HCR_GetClassName(CLSID_MyDocuments, strRet);
|
||||||
strRet->uType = STRRET_WSTR;
|
|
||||||
strRet->pOleStr = pszPath;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
CoTaskMemFree(pszPath);
|
|
||||||
|
|
||||||
TRACE ("-- (%p)->(%s,0x%08x)\n", this, debugstr_w(strRet->pOleStr), hr);
|
|
||||||
return hr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
|
HRESULT WINAPI CMyDocsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /* simple pidl */
|
||||||
|
@ -207,43 +149,41 @@ HRESULT WINAPI CMyDocsFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl,
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetDefaultSearchGUID(GUID *pguid)
|
HRESULT WINAPI CMyDocsFolder::GetDefaultSearchGUID(GUID *pguid)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultSearchGUID(pguid);
|
return m_pisfInner->GetDefaultSearchGUID(pguid);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
HRESULT WINAPI CMyDocsFolder::EnumSearches(IEnumExtraSearch ** ppenum)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->EnumSearches(ppenum);
|
return m_pisfInner->EnumSearches(ppenum);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
|
HRESULT WINAPI CMyDocsFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultColumn(dwRes, pSort, pDisplay);
|
return m_pisfInner->GetDefaultColumn(dwRes, pSort, pDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
HRESULT WINAPI CMyDocsFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDefaultColumnState(iColumn, pcsFlags);
|
return m_pisfInner->GetDefaultColumnState(iColumn, pcsFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
HRESULT WINAPI CMyDocsFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDetailsEx(pidl, pscid, pv);
|
return m_pisfInner->GetDetailsEx(pidl, pscid, pv);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
|
HRESULT WINAPI CMyDocsFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->GetDetailsOf(pidl, iColumn, psd);
|
return m_pisfInner->GetDetailsOf(pidl, iColumn, psd);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
|
HRESULT WINAPI CMyDocsFolder::MapColumnToSCID(UINT column, SHCOLUMNID *pscid)
|
||||||
{
|
{
|
||||||
return m_pisf2Inner->MapColumnToSCID(column, pscid);
|
return m_pisfInner->MapColumnToSCID(column, pscid);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetClassID(CLSID *lpClassId)
|
HRESULT WINAPI CMyDocsFolder::GetClassID(CLSID *lpClassId)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)\n", this);
|
|
||||||
|
|
||||||
if (!lpClassId)
|
if (!lpClassId)
|
||||||
return E_POINTER;
|
return E_POINTER;
|
||||||
|
|
||||||
|
@ -254,16 +194,13 @@ HRESULT WINAPI CMyDocsFolder::GetClassID(CLSID *lpClassId)
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::Initialize(LPCITEMIDLIST pidl)
|
HRESULT WINAPI CMyDocsFolder::Initialize(LPCITEMIDLIST pidl)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)->(%p)\n", this, pidl);
|
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WINAPI CMyDocsFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
HRESULT WINAPI CMyDocsFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
||||||
{
|
{
|
||||||
TRACE ("(%p)->(%p)\n", this, pidl);
|
if (!pidl)
|
||||||
|
return E_POINTER;
|
||||||
if (!pidl) return E_POINTER;
|
*pidl = _ILCreateMyDocuments();
|
||||||
*pidl = ILClone (pidlRoot);
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,12 +29,7 @@ class CMyDocsFolder :
|
||||||
public IPersistFolder2
|
public IPersistFolder2
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
CComPtr<IShellFolder> m_pisfInner;
|
CComPtr<IShellFolder2> m_pisfInner;
|
||||||
CComPtr<IShellFolder2> m_pisf2Inner;
|
|
||||||
|
|
||||||
/* both paths are parsible from the MyDocuments */
|
|
||||||
LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
|
|
||||||
LPITEMIDLIST pidlRoot; /* absolute pidl */
|
|
||||||
public:
|
public:
|
||||||
CMyDocsFolder();
|
CMyDocsFolder();
|
||||||
~CMyDocsFolder();
|
~CMyDocsFolder();
|
||||||
|
|
|
@ -39,6 +39,9 @@ typedef struct {
|
||||||
LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut);
|
LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut);
|
||||||
HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut,
|
HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut,
|
||||||
LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes);
|
LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes);
|
||||||
|
|
||||||
|
HRESULT HCR_GetClassName(REFIID riid, LPSTRRET strRet);
|
||||||
|
|
||||||
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet);
|
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet);
|
||||||
|
|
||||||
HRESULT SHELL32_BindToFS (LPCITEMIDLIST pidlRoot,
|
HRESULT SHELL32_BindToFS (LPCITEMIDLIST pidlRoot,
|
||||||
|
|
|
@ -376,6 +376,17 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT HCR_GetClassName(REFIID riid, LPSTRRET strRet)
|
||||||
|
{
|
||||||
|
BOOL bRet;
|
||||||
|
WCHAR wstrName[MAX_PATH+1];
|
||||||
|
bRet = HCR_GetClassNameW(CLSID_MyDocuments, wstrName, MAX_PATH);
|
||||||
|
if (!bRet)
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
return SHSetStrRet(strRet, wstrName);
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT SHELL32_GetDisplayNameOfGUIDItem(IShellFolder2* psf, LPCWSTR pszFolderPath, PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
HRESULT SHELL32_GetDisplayNameOfGUIDItem(IShellFolder2* psf, LPCWSTR pszFolderPath, PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
Loading…
Reference in a new issue