LPBC pbc,
LPOLESTR lpszDisplayName,
DWORD *pchEaten,
- LPITEMIDLIST *ppidl,
+ PIDLIST_RELATIVE *ppidl,
DWORD *pdwAttributes)
{
WCHAR szElement[MAX_PATH];
/**************************************************************************
* CDesktopFolder::EnumObjects
*/
-HRESULT WINAPI CDesktopFolder::EnumObjects(
- HWND hwndOwner,
- DWORD dwFlags,
- LPENUMIDLIST *ppEnumIDList)
+HRESULT WINAPI CDesktopFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
{
- CComObject<CDesktopFolderEnum> *theEnumerator;
- CComPtr<IEnumIDList> result;
- HRESULT hResult;
-
- TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", this, hwndOwner, dwFlags, ppEnumIDList);
-
- if (ppEnumIDList == NULL)
- return E_POINTER;
- *ppEnumIDList = NULL;
-
- ATLTRY (theEnumerator = new CComObject<CDesktopFolderEnum>);
-
- if (theEnumerator == NULL)
- return E_OUTOFMEMORY;
-
- hResult = theEnumerator->QueryInterface(IID_PPV_ARG(IEnumIDList, &result));
- if (FAILED (hResult))
- {
- delete theEnumerator;
- return hResult;
- }
-
- hResult = theEnumerator->Initialize (this, hwndOwner, dwFlags);
- if (FAILED (hResult))
- return hResult;
- *ppEnumIDList = result.Detach ();
-
- TRACE ("-- (%p)->(new ID List: %p)\n", this, *ppEnumIDList);
-
- return S_OK;
+ return ShellObjectCreatorInit<CDesktopFolderEnum>(this, hwndOwner, dwFlags, IID_IEnumIDList, ppEnumIDList);
}
/**************************************************************************
* CDesktopFolder::BindToObject
*/
HRESULT WINAPI CDesktopFolder::BindToObject(
- LPCITEMIDLIST pidl,
+ PCUIDLIST_RELATIVE pidl,
LPBC pbcReserved,
REFIID riid,
LPVOID *ppvOut)
* CDesktopFolder::BindToStorage
*/
HRESULT WINAPI CDesktopFolder::BindToStorage(
- LPCITEMIDLIST pidl,
+ PCUIDLIST_RELATIVE pidl,
LPBC pbcReserved,
REFIID riid,
LPVOID *ppvOut)
/**************************************************************************
* CDesktopFolder::CompareIDs
*/
-HRESULT WINAPI CDesktopFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
+HRESULT WINAPI CDesktopFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
{
int nReturn;
*/
HRESULT WINAPI CDesktopFolder::GetAttributesOf(
UINT cidl,
- LPCITEMIDLIST *apidl,
+ PCUITEMID_CHILD_ARRAY apidl,
DWORD *rgfInOut)
{
HRESULT hr = S_OK;
HRESULT WINAPI CDesktopFolder::GetUIObjectOf(
HWND hwndOwner,
UINT cidl,
- LPCITEMIDLIST *apidl,
+ PCUITEMID_CHILD_ARRAY apidl,
REFIID riid,
UINT *prgfInOut,
LPVOID *ppvOut)
else if (IsEqualIID (riid, IID_IExtractIconA) && (cidl == 1))
{
pidl = ILCombine (pidlRoot, apidl[0]);
- pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl);
+ pObj = IExtractIconA_Constructor (pidl);
SHFree (pidl);
hr = S_OK;
}
else if (IsEqualIID (riid, IID_IExtractIconW) && (cidl == 1))
{
pidl = ILCombine (pidlRoot, apidl[0]);
- pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl);
+ pObj = IExtractIconW_Constructor (pidl);
SHFree (pidl);
hr = S_OK;
}
else if (IsEqualIID (riid, IID_IDropTarget))
{
/* only interested in attempting to bind to shell folders, not files, semicolon intentionate */
- if (cidl == 1 && SUCCEEDED(hr = this->_GetDropTarget(apidl[0], (LPVOID*)&pObj)));
- else
- hr = this->QueryInterface(IID_IDropTarget, (LPVOID*)&pObj);
+ if (cidl != 1 || FAILED(hr = this->_GetDropTarget(apidl[0], (LPVOID*) &pObj)))
+ {
+ IDropTarget * pDt = NULL;
+ hr = this->QueryInterface(IID_PPV_ARG(IDropTarget, &pDt));
+ pObj = pDt;
+ }
}
else if ((IsEqualIID(riid, IID_IShellLinkW) ||
IsEqualIID(riid, IID_IShellLinkA)) && (cidl == 1))
* NOTES
* special case: pidl = null gives desktop-name back
*/
-HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet)
+HRESULT WINAPI CDesktopFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet)
{
HRESULT hr = S_OK;
LPWSTR pszPath;
if ((clsid = _ILGetGUIDPointer (pidl)))
{
- if (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)
+ if (GET_SHGDN_FOR (dwFlags) == SHGDN_FORPARSING)
{
int bWantsForParsing;
*/
HRESULT WINAPI CDesktopFolder::SetNameOf(
HWND hwndOwner,
- LPCITEMIDLIST pidl, /* simple pidl */
+ PCUITEMID_CHILD pidl, /* simple pidl */
LPCOLESTR lpName,
DWORD dwFlags,
- LPITEMIDLIST *pPidlOut)
+ PITEMID_CHILD *pPidlOut)
{
CComPtr<IShellFolder2> psf;
HRESULT hr;
}
HRESULT WINAPI CDesktopFolder::GetDetailsEx(
- LPCITEMIDLIST pidl,
+ PCUITEMID_CHILD pidl,
const SHCOLUMNID *pscid,
VARIANT *pv)
{
}
HRESULT WINAPI CDesktopFolder::GetDetailsOf(
- LPCITEMIDLIST pidl,
+ PCUITEMID_CHILD pidl,
UINT iColumn,
SHELLDETAILS *psd)
{
if (SUCCEEDED(hr))
{
- IDropTarget *pDT;
- hr = this->BindToObject(pidl, NULL, IID_IDropTarget, (LPVOID*)&pDT);
+ CComPtr<IDropTarget> pDT;
+ hr = this->BindToObject(pidl, NULL, IID_PPV_ARG(IDropTarget, &pDT));
CoTaskMemFree(pidl);
if (SUCCEEDED(hr))
SHSimulateDrop(pDT, pDataObject, dwKeyState, NULL, pdwEffect);
if (SUCCEEDED(hr))
{
- IShellFolder *psf;
- hr = this->BindToObject(pidlNext, NULL, IID_IShellFolder, (LPVOID*)&psf);
+ CComPtr<IShellFolder> psf;
+ hr = this->BindToObject(pidlNext, NULL, IID_PPV_ARG(IShellFolder, &psf));
CoTaskMemFree(pidlNext);
if (SUCCEEDED(hr))
{
hr = psf->GetUIObjectOf(NULL, 1, &pidl, IID_IDropTarget, NULL, ppvOut);
- psf->Release();
if (FAILED(hr))
ERR("FS GetUIObjectOf failed: %x\n", hr);
}