[SHELL32]

* Stop using the C defines LPSHELLFOLDER, LPSHELLVIEW and LPUNKNOWN, and use the respective C++ interfaces instead.
* Change one batch of COM interface pointers into CComPtr-based pointers, and remove associated Release calls (including at least one that was not supposed to be there at all).
* Remove a couple (repeated multiple times) pointless casts.

svn path=/branches/shell-experiments/; revision=63908
This commit is contained in:
David Quintana 2014-08-20 00:39:40 +00:00
parent a5ce7500a1
commit ef04ff090e
23 changed files with 145 additions and 186 deletions

View file

@ -116,7 +116,7 @@ HRESULT STDMETHODCALLTYPE CMenuDeskBar::QueryService(
return S_OK;
}
HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnFocusChangeIS(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus)
HRESULT STDMETHODCALLTYPE CMenuDeskBar::OnFocusChangeIS(THIS_ IUnknown * lpUnknown, BOOL bFocus)
{
return S_OK;
}

View file

@ -46,7 +46,7 @@ typedef struct tagbrowse_info
typedef struct tagTV_ITEMDATA
{
LPSHELLFOLDER lpsfParent; /* IShellFolder of the parent */
IShellFolder* lpsfParent; /* IShellFolder of the parent */
LPITEMIDLIST lpi; /* PIDL relative to parent */
LPITEMIDLIST lpifq; /* Fully qualified PIDL */
IEnumIDList* pEnumIL; /* Children iterator */
@ -81,9 +81,9 @@ static const LAYOUT_INFO g_layout_info[] =
BIF_NEWDIALOGSTYLE | \
BIF_BROWSEINCLUDEFILES)
static void FillTreeView(browse_info*, LPSHELLFOLDER,
static void FillTreeView(browse_info*, IShellFolder*,
LPITEMIDLIST, HTREEITEM, IEnumIDList*);
static HTREEITEM InsertTreeViewItem( browse_info*, IShellFolder *,
static HTREEITEM InsertTreeViewItem( browse_info*, IShellFolder*,
LPCITEMIDLIST, LPCITEMIDLIST, IEnumIDList*, HTREEITEM);
static const WCHAR szBrowseFolderInfo[] = L"__WINE_BRSFOLDERDLG_INFO";
@ -206,10 +206,11 @@ static void InitializeTreeView( browse_info *info )
ILRemoveLastID(pidlParent);
pidlChild = ILClone(ILFindLastID(root));
if (_ILIsDesktop(pidlParent)) {
if (_ILIsDesktop(pidlParent))
{
hr = SHGetDesktopFolder(&lpsfParent);
} else {
IShellFolder *lpsfDesktop;
CComPtr<IShellFolder> lpsfDesktop;
hr = SHGetDesktopFolder(&lpsfDesktop);
if (FAILED(hr)) {
WARN("SHGetDesktopFolder failed! hr = %08x\n", hr);
@ -218,7 +219,6 @@ static void InitializeTreeView( browse_info *info )
return;
}
hr = lpsfDesktop->BindToObject(pidlParent, 0, IID_PPV_ARG(IShellFolder, &lpsfParent));
lpsfDesktop->Release();
}
if (FAILED(hr)) {
@ -310,7 +310,7 @@ static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM)
* Success: TRUE
* Failure: FALSE
*/
static BOOL GetName(LPSHELLFOLDER lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName)
static BOOL GetName(IShellFolder * lpsf, LPCITEMIDLIST lpi, DWORD dwFlags, LPWSTR lpFriendlyName)
{
BOOL bSuccess=TRUE;
STRRET str;
@ -714,8 +714,9 @@ static HRESULT BrsFolder_Rename(browse_info *info, HTREEITEM rename)
static HRESULT BrsFolder_NewFolder(browse_info *info)
{
DWORD flags = BrowseFlagsToSHCONTF(info->lpBrowseInfo->ulFlags);
IShellFolder *desktop, *cur;
ISFHelper *sfhelper;
CComPtr<IShellFolder> desktop;
CComPtr<IShellFolder> cur;
CComPtr<ISFHelper> sfhelper;
WCHAR name[MAX_PATH];
HTREEITEM parent, added;
LPTV_ITEMDATA item_data;
@ -734,7 +735,6 @@ static HRESULT BrsFolder_NewFolder(browse_info *info)
if(FAILED(hr))
return hr;
hr = desktop->BindToObject(info->pidlRet, 0, IID_PPV_ARG(IShellFolder, &cur));
desktop->Release();
if(FAILED(hr))
return hr;
@ -750,7 +750,6 @@ static HRESULT BrsFolder_NewFolder(browse_info *info)
if(len<MAX_PATH)
name[len++] = '\\';
hr = sfhelper->GetUniqueName(&name[len], MAX_PATH-len);
sfhelper->Release();
if(FAILED(hr))
goto cleanup;
@ -792,7 +791,6 @@ static HRESULT BrsFolder_NewFolder(browse_info *info)
goto cleanup;
added = InsertTreeViewItem(info, cur, new_item, item_data->lpifq, NULL, parent);
cur->Release();
SHFree(new_item);
SendMessageW(info->hwndTreeView, TVM_SORTCHILDREN, FALSE, (LPARAM)parent);
@ -842,7 +840,7 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection,
/* If 'selection' is a string, convert to a Shell ID List. */
if (is_str) {
IShellFolder *psfDesktop;
CComPtr<IShellFolder> psfDesktop;
HRESULT hr;
hr = SHGetDesktopFolder(&psfDesktop);
@ -851,7 +849,6 @@ static BOOL BrsFolder_OnSetExpanded(browse_info *info, LPVOID selection,
hr = psfDesktop->ParseDisplayName(NULL, NULL, (LPOLESTR)selection,
NULL, &pidlSelection, NULL);
psfDesktop->Release();
if (FAILED(hr))
goto done;
}

View file

@ -37,10 +37,10 @@ class CDefaultContextMenu :
public IContextMenu2
{
private:
IShellFolder *m_psf;
CComPtr<IShellFolder> m_psf;
UINT m_cidl;
PCUITEMID_CHILD_ARRAY m_apidl;
IDataObject *m_pDataObj;
CComPtr<IDataObject> m_pDataObj;
PIDLIST_ABSOLUTE m_pidlFolder;
DWORD m_bGroupPolicyActive;
PDynamicShellEntry m_pDynamicEntries; /* first dynamic shell extension entry */
@ -135,16 +135,12 @@ CDefaultContextMenu::~CDefaultContextMenu()
if (m_pidlFolder)
CoTaskMemFree(m_pidlFolder);
if (m_pDataObj)
m_pDataObj->Release();
_ILFreeaPidl(const_cast<PITEMID_CHILD *>(m_apidl), m_cidl);
if (m_psf)
m_psf->Release();
}
HRESULT WINAPI CDefaultContextMenu::Initialize(const DEFCONTEXTMENU *pdcm)
{
IDataObject *pDataObj;
CComPtr<IDataObject> pDataObj;
TRACE("cidl %u\n", pdcm->cidl);
@ -153,7 +149,6 @@ HRESULT WINAPI CDefaultContextMenu::Initialize(const DEFCONTEXTMENU *pdcm)
if (m_cidl && !m_apidl)
return E_OUTOFMEMORY;
m_psf = pdcm->psf;
m_psf->AddRef();
if (SUCCEEDED(SHCreateDataObject(pdcm->pidlFolder, pdcm->cidl, pdcm->apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
m_pDataObj = pDataObj;
@ -164,12 +159,11 @@ HRESULT WINAPI CDefaultContextMenu::Initialize(const DEFCONTEXTMENU *pdcm)
}
else
{
IPersistFolder2 *pf = NULL;
CComPtr<IPersistFolder2> pf = NULL;
if (SUCCEEDED(m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf))))
{
if (FAILED(pf->GetCurFolder(reinterpret_cast<LPITEMIDLIST*>(&m_pidlFolder))))
ERR("GetCurFolder failed\n");
pf->Release();
}
TRACE("pidlFolder %p\n", m_pidlFolder);
}
@ -307,7 +301,7 @@ BOOL
HasClipboardData()
{
BOOL bRet = FALSE;
IDataObject *pDataObj;
CComPtr<IDataObject> pDataObj;
if(SUCCEEDED(OleGetClipboard(&pDataObj)))
{
@ -323,8 +317,6 @@ HasClipboardData()
bRet = TRUE;
ReleaseStgMedium(&medium);
}
pDataObj->Release();
}
return bRet;
@ -369,7 +361,7 @@ CDefaultContextMenu::LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *pclsi
if (IsShellExtensionAlreadyLoaded(pclsid))
return S_OK;
IContextMenu *pcm;
CComPtr<IContextMenu> pcm;
hr = SHCoCreateInstance(NULL, pclsid, NULL, IID_PPV_ARG(IContextMenu, &pcm));
if (hr != S_OK)
{
@ -377,28 +369,24 @@ CDefaultContextMenu::LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *pclsi
return hr;
}
IShellExtInit *pExtInit;
CComPtr<IShellExtInit> pExtInit;
hr = pcm->QueryInterface(IID_PPV_ARG(IShellExtInit, &pExtInit));
if (hr != S_OK)
{
ERR("Failed to query for interface IID_IShellExtInit hr %x pclsid %s\n", hr, wine_dbgstr_guid(pclsid));
pcm->Release();
return hr;
}
hr = pExtInit->Initialize(m_pidlFolder, m_pDataObj, hKey);
pExtInit->Release();
if (hr != S_OK)
{
TRACE("Failed to initialize shell extension error %x pclsid %s\n", hr, wine_dbgstr_guid(pclsid));
pcm->Release();
return hr;
}
PDynamicShellEntry pEntry = (DynamicShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(DynamicShellEntry));
if (!pEntry)
{
pcm->Release();
return E_OUTOFMEMORY;
}
@ -945,7 +933,7 @@ NotifyShellViewWindow(LPCMINVOKECOMMANDINFO lpcmi, BOOL bRefresh)
if (!lpSB)
return E_FAIL;
LPSHELLVIEW lpSV = NULL;
IShellView * lpSV = NULL;
if (FAILED(lpSB->QueryActiveShellView(&lpSV)))
return E_FAIL;
@ -1060,7 +1048,7 @@ CDefaultContextMenu::DoPaste(
dwKey = MK_CONTROL|MK_SHIFT;
}
IDropTarget *pdrop;
CComPtr<IDropTarget> pdrop;
hr = psfTarget->QueryInterface(IID_PPV_ARG(IDropTarget, &pdrop));
if (FAILED(hr))
{
@ -1086,8 +1074,8 @@ HRESULT
CDefaultContextMenu::DoCreateLink(
LPCMINVOKECOMMANDINFO lpcmi)
{
LPDATAOBJECT pDataObj;
IDropTarget *pDT;
CComPtr<IDataObject> pDataObj;
CComPtr<IDropTarget> pDT;
HRESULT hr;
CComPtr<IPersistFolder2> ppf2 = NULL;
LPITEMIDLIST pidl;
@ -1143,13 +1131,11 @@ CDefaultContextMenu::DoCreateLink(
HRESULT CDefaultContextMenu::DoDelete(LPCMINVOKECOMMANDINFO lpcmi) {
TRACE("(%p) Deleting\n", this);
LPDATAOBJECT pDataObj;
CComPtr<IDataObject> pDataObj;
if (SUCCEEDED(SHCreateDataObject(m_pidlFolder, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
{
pDataObj->AddRef();
SHCreateThread(DoDeleteThreadProc, pDataObj, NULL, NULL);
pDataObj->Release();
}
else
return E_FAIL;
@ -1162,7 +1148,7 @@ CDefaultContextMenu::DoCopyOrCut(
LPCMINVOKECOMMANDINFO lpcmi,
BOOL bCopy)
{
LPDATAOBJECT pDataObj;
CComPtr<IDataObject> pDataObj;
HRESULT hr;
if (SUCCEEDED(SHCreateDataObject(m_pidlFolder, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
@ -1181,7 +1167,6 @@ CDefaultContextMenu::DoCopyOrCut(
}
hr = OleSetClipboard(pDataObj);
pDataObj->Release();
return hr;
}
@ -1193,7 +1178,7 @@ CDefaultContextMenu::DoCopyOrCut(
return E_FAIL;
}
LPSHELLVIEW lpSV;
CComPtr<IShellView> lpSV;
hr = lpSB->QueryActiveShellView(&lpSV);
if (FAILED(hr))
{
@ -1211,7 +1196,6 @@ CDefaultContextMenu::DoCopyOrCut(
} else
ERR("failed to get item object\n");
lpSV->Release();
return hr;
}
@ -1236,7 +1220,7 @@ CDefaultContextMenu::DoRename(
(void)TreeView_EditLabel(hwnd, hItem);
}
LPSHELLVIEW lpSV;
CComPtr<IShellView> lpSV;
HRESULT hr = lpSB->QueryActiveShellView(&lpSV);
if (FAILED(hr))
{
@ -1244,9 +1228,8 @@ CDefaultContextMenu::DoRename(
return hr;
}
lpSV->SelectItem(m_apidl[0],
SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
lpSV->Release();
SVSIF selFlags = SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT;
lpSV->SelectItem(m_apidl[0], selFlags);
return S_OK;
}
@ -1259,13 +1242,12 @@ CDefaultContextMenu::DoProperties(
if (!pidlParent)
{
IPersistFolder2 *pf;
CComPtr<IPersistFolder2> pf;
/* pidlFolder is optional */
if (SUCCEEDED(m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf))))
{
pf->GetCurFolder((_ITEMIDLIST**)&pidlParent);
pf->Release();
}
}

View file

@ -45,7 +45,7 @@ private:
HWND hWndDesktopListView;
CComPtr<IShellDesktopTray> ShellDesk;
CComPtr<IShellView> DesktopView;
IShellBrowser *DefaultShellBrowser;
CComPtr<IShellBrowser> DefaultShellBrowser;
LPITEMIDLIST pidlDesktopDirectory;
LPITEMIDLIST pidlDesktop;
public:
@ -159,7 +159,7 @@ HRESULT CDesktopBrowser::Initialize(HWND hWndx, IShellDesktopTray *ShellDeskx)
static CDesktopBrowser *SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct)
{
IShellDesktopTray *ShellDesk;
CComPtr<IShellDesktopTray> ShellDesk;
CComObject<CDesktopBrowser> *pThis;
HRESULT hRet;

View file

@ -96,7 +96,6 @@ void InitIconOverlays(void)
WCHAR szName[MAX_PATH];
WCHAR szValue[100];
CLSID clsid;
IShellIconOverlayIdentifier * Overlay;
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
return;
@ -131,12 +130,13 @@ void InitIconOverlays(void)
dwSize = sizeof(szValue) / sizeof(WCHAR);
if (RegGetValueW(hKey, szName, NULL, RRF_RT_REG_SZ, NULL, szValue, &dwSize) == ERROR_SUCCESS)
{
CComPtr<IShellIconOverlayIdentifier> Overlay;
CLSIDFromString(szValue, &clsid);
dwResult = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IShellIconOverlayIdentifier, &Overlay));
if (dwResult == S_OK)
{
Handlers[NumIconOverlayHandlers] = Overlay;
Handlers[NumIconOverlayHandlers] = Overlay.Detach();
NumIconOverlayHandlers++;
}
}
@ -200,7 +200,7 @@ GetIconOverlay(LPCITEMIDLIST pidl, WCHAR * wTemp, int* pIndex)
IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
{
CComPtr<IDefaultExtractIconInit> initIcon;
IExtractIconW *extractIcon;
CComPtr<IExtractIconW> extractIcon;
GUID const * riid;
int icon_idx;
UINT flags;
@ -418,7 +418,7 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
initIcon->SetNormalIcon(wTemp, icon_idx);
}
return extractIcon;
return extractIcon.Detach();
}
/**************************************************************************
@ -426,8 +426,8 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
*/
IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl)
{
IExtractIconW *extractIconW;
IExtractIconA *extractIconA;
CComPtr<IExtractIconW> extractIconW;
CComPtr<IExtractIconA> extractIconA;
HRESULT hr;
extractIconW = IExtractIconW_Constructor(pidl);
@ -435,8 +435,7 @@ IExtractIconA* IExtractIconA_Constructor(LPCITEMIDLIST pidl)
return NULL;
hr = extractIconW->QueryInterface(IID_PPV_ARG(IExtractIconA, &extractIconA));
extractIconW->Release();
if (FAILED(hr))
return NULL;
return extractIconA;
return extractIconA.Detach();
}

View file

@ -316,14 +316,14 @@ HRESULT WINAPI CAdminToolsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCIT
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;
}

View file

@ -547,12 +547,12 @@ HRESULT WINAPI CControlPanelFolder::GetUIObjectOf(HWND hwndOwner,
hr = IDataObject_Constructor(hwndOwner, pidlRoot, apidl, cidl, (IDataObject **)&pObj);
} 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_IShellLinkW) || IsEqualIID(riid, IID_IShellLinkA))

View file

@ -637,14 +637,14 @@ HRESULT WINAPI CDesktopFolder::GetUIObjectOf(
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;
}
@ -1476,7 +1476,7 @@ HRESULT WINAPI CDesktopFolder::Drop(IDataObject *pDataObject,
if (SUCCEEDED(hr))
{
IDropTarget *pDT;
CComPtr<IDropTarget> pDT;
hr = this->BindToObject(pidl, NULL, IID_PPV_ARG(IDropTarget, &pDT));
CoTaskMemFree(pidl);
if (SUCCEEDED(hr))
@ -1517,13 +1517,12 @@ HRESULT WINAPI CDesktopFolder::_GetDropTarget(LPCITEMIDLIST pidl, LPVOID *ppvOut
if (SUCCEEDED(hr))
{
IShellFolder *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);
}

View file

@ -409,14 +409,14 @@ HRESULT WINAPI CFontsFolder::GetUIObjectOf(
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;
}

View file

@ -350,7 +350,7 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam,
HRESULT WINAPI CFSFolder::CreateViewObject(HWND hwndOwner,
REFIID riid, LPVOID * ppvOut)
{
LPSHELLVIEW pShellView;
CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE ("(%p)->(hwnd=%p,%s,%p)\n", this, hwndOwner, shdebugstr_guid (&riid),
@ -373,7 +373,6 @@ HRESULT WINAPI CFSFolder::CreateViewObject(HWND hwndOwner,
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppvOut);
pShellView->Release();
}
}
}
@ -494,14 +493,14 @@ HRESULT WINAPI CFSFolder::GetUIObjectOf(HWND hwndOwner,
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;
}
@ -862,7 +861,7 @@ HRESULT WINAPI CFSFolder::MapColumnToSCID (UINT column,
HRESULT WINAPI CFSFolder::GetUniqueName(LPWSTR pwszName, UINT uLen)
{
IEnumIDList *penum;
CComPtr<IEnumIDList> penum;
HRESULT hr;
WCHAR wszText[MAX_PATH];
WCHAR wszNewFolder[25];
@ -900,8 +899,6 @@ next:
goto next;
}
}
penum->Release();
}
return hr;
}
@ -1749,8 +1746,8 @@ HRESULT WINAPI CFSFolder::_DoDrop(IDataObject *pDataObject,
DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) {
CoInitialize(NULL);
_DoDropData *data = static_cast<_DoDropData*>(lpParameter);
IDataObject *pDataObject;
HRESULT hr = CoGetInterfaceAndReleaseStream (data->pStream, IID_IDataObject, (void**) &pDataObject);
CComPtr<IDataObject> pDataObject;
HRESULT hr = CoGetInterfaceAndReleaseStream (data->pStream, IID_PPV_ARG(IDataObject, &pDataObject));
if (SUCCEEDED(hr))
{
@ -1760,7 +1757,6 @@ DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) {
{
pAsyncOperation->EndOperation(hr, NULL, data->pdwEffect);
}
pDataObject->Release();
}
//Release the CFSFolder and data object holds in the copying thread.
data->This->Release();
@ -1861,7 +1857,7 @@ HRESULT WINAPI CFSFolder::_LoadDynamicDropTargetHandler(const CLSID *pclsid, LPC
TRACE("CFSFolder::_LoadDynamicDropTargetHandler entered\n");
HRESULT hr;
IPersistFile *pp;
CComPtr<IPersistFile> pp;
hr = SHCoCreateInstance(NULL, pclsid, NULL, IID_PPV_ARG(IPersistFile, &pp));
if (hr != S_OK)
{
@ -1875,6 +1871,5 @@ HRESULT WINAPI CFSFolder::_LoadDynamicDropTargetHandler(const CLSID *pclsid, LPC
ERR("Failed to query for interface IID_IShellExtInit hr %x pclsid %s\n", hr, wine_dbgstr_guid(pclsid));
return hr;
}
pp->Release();
return hr;
}

View file

@ -326,7 +326,7 @@ HRESULT WINAPI CDrivesFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPC
*/
HRESULT WINAPI CDrivesFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID * ppvOut)
{
LPSHELLVIEW pShellView;
CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,
@ -353,7 +353,6 @@ HRESULT WINAPI CDrivesFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVO
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppvOut);
pShellView->Release();
}
}
TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
@ -449,14 +448,14 @@ HRESULT WINAPI CDrivesFolder::GetUIObjectOf(HWND hwndOwner,
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;
}

View file

@ -283,7 +283,7 @@ HRESULT WINAPI CMyDocsFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPC
*/
HRESULT WINAPI CMyDocsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
{
LPSHELLVIEW pShellView;
CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE ("(%p)->(hwnd=%p,%s,%p)\n",
@ -309,7 +309,6 @@ HRESULT WINAPI CMyDocsFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVO
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppvOut);
pShellView->Release();
}
}
TRACE ("-- (%p)->(interface=%p)\n", this, ppvOut);
@ -401,14 +400,14 @@ HRESULT WINAPI CMyDocsFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMID
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;
}

View file

@ -140,7 +140,7 @@ HRESULT WINAPI CNetFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITE
*/
HRESULT WINAPI CNetFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
{
LPSHELLVIEW pShellView;
CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,
@ -167,7 +167,6 @@ HRESULT WINAPI CNetFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppvOut);
pShellView->Release();
}
}
TRACE("-- (%p)->(interface=%p)\n", this, ppvOut);
@ -257,14 +256,14 @@ HRESULT WINAPI CNetFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, LPCITEMIDLIS
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;
}

View file

@ -448,7 +448,7 @@ HRESULT WINAPI CPrinterFolder::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LP
*/
HRESULT WINAPI CPrinterFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID * ppvOut)
{
LPSHELLVIEW pShellView;
CComPtr<IShellView> pShellView;
HRESULT hr = E_INVALIDARG;
TRACE("(%p)->(hwnd=%p,%s,%p)\n", this,

View file

@ -560,7 +560,7 @@ HRESULT WINAPI CRecycleBin::CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCIT
HRESULT WINAPI CRecycleBin::CreateViewObject(HWND hwndOwner, REFIID riid, void **ppv)
{
LPSHELLVIEW pShellView;
CComPtr<IShellView> pShellView;
HRESULT hr = E_NOINTERFACE;
TRACE("(%p, %p, %s, %p)\n", this, hwndOwner, debugstr_guid(&riid), ppv);
@ -584,7 +584,6 @@ HRESULT WINAPI CRecycleBin::CreateViewObject(HWND hwndOwner, REFIID riid, void *
if (pShellView)
{
hr = pShellView->QueryInterface(riid, ppv);
pShellView->Release();
}
}
else
@ -855,7 +854,7 @@ HRESULT WINAPI CRecycleBin::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
{
HRESULT hr;
LPSHELLBROWSER lpSB;
LPSHELLVIEW lpSV = NULL;
IShellView * lpSV = NULL;
TRACE("%p %p verb %p\n", this, lpcmi, lpcmi->lpVerb);

View file

@ -51,7 +51,7 @@ static LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl);
* RETURNS
* True if the display name could be retrieved successfully, False otherwise
*/
static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
static BOOL ILGetDisplayNameExA(IShellFolder * psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type)
{
BOOL ret = FALSE;
WCHAR wPath[MAX_PATH];
@ -68,10 +68,10 @@ static BOOL ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR pat
return ret;
}
BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
{
CComPtr<IShellFolder> psfParent;
LPSHELLFOLDER lsf = psf;
IShellFolder * lsf = psf;
HRESULT ret = NO_ERROR;
LPCITEMIDLIST pidllast;
STRRET strret;
@ -141,7 +141,7 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
/*************************************************************************
* ILGetDisplayNameEx [SHELL32.186]
*/
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
BOOL WINAPI ILGetDisplayNameEx(IShellFolder * psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
{
TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
@ -681,7 +681,7 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
*
* NOTES
*/
HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
HRESULT WINAPI SHGetRealIDL(IShellFolder * lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST *pidlReal)
{
CComPtr<IDataObject> pDataObj;
HRESULT hr;
@ -1063,7 +1063,7 @@ EXTERN_C LPITEMIDLIST WINAPI SHSimpleIDListFromPathAW(LPCVOID lpszPath)
* the pidl can be a simple one. since we can't get the path out of the pidl
* we have to take all data from the pidl
*/
HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
HRESULT WINAPI SHGetDataFromIDListA(IShellFolder * psf, LPCITEMIDLIST pidl,
int nFormat, LPVOID dest, int len)
{
LPSTR filename, shortname;
@ -1121,7 +1121,7 @@ HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
* SHGetDataFromIDListW [SHELL32.248]
*
*/
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl,
HRESULT WINAPI SHGetDataFromIDListW(IShellFolder * psf, LPCITEMIDLIST pidl,
int nFormat, LPVOID dest, int len)
{
LPSTR filename, shortname;

View file

@ -244,7 +244,7 @@ HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST pidlParent,
IShellFolder *psfParent, LPCITEMIDLIST pidl, IShellItem **ppsi)
{
HRESULT hr;
IShellItem *newShellItem;
CComPtr<IShellItem> newShellItem;
LPITEMIDLIST new_pidl;
CComPtr<IPersistIDList> newPersistIDList;
@ -308,6 +308,8 @@ HRESULT WINAPI SHCreateShellItem(LPCITEMIDLIST pidlParent,
return hr;
}
ILFree(new_pidl);
*ppsi = newShellItem;
*ppsi = newShellItem.Detach();
return hr;
}

View file

@ -2173,7 +2173,7 @@ HRESULT WINAPI CShellLink::DragEnter(IDataObject *pDataObject,
{
TRACE("(%p)->(DataObject=%p)\n", this, pDataObject);
LPCITEMIDLIST pidlLast;
IShellFolder *psf;
CComPtr<IShellFolder> psf;
HRESULT hr = SHBindToParent(pPidl, IID_PPV_ARG(IShellFolder, &psf), &pidlLast);
@ -2185,8 +2185,6 @@ HRESULT WINAPI CShellLink::DragEnter(IDataObject *pDataObject,
hr = mDropTarget->DragEnter(pDataObject, dwKeyState, pt, pdwEffect);
else
*pdwEffect = DROPEFFECT_NONE;
psf->Release();
}
else
*pdwEffect = DROPEFFECT_NONE;

View file

@ -68,7 +68,7 @@ DWORD WINAPI __SHGUIDToStringW (REFGUID guid, LPWSTR str)
HRESULT WINAPI SHCoCreateInstance(
LPCWSTR aclsid,
const CLSID *clsid,
LPUNKNOWN pUnkOuter,
IUnknown * pUnkOuter,
REFIID refiid,
LPVOID *ppv)
{
@ -314,7 +314,7 @@ public:
HRESULT Initialize(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, const IID *riidInstx);
// IClassFactory
virtual HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
virtual HRESULT WINAPI CreateInstance(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppvObject);
virtual HRESULT WINAPI LockServer(BOOL fLock);
BEGIN_COM_MAP(IDefClFImpl)
@ -346,7 +346,7 @@ HRESULT IDefClFImpl::Initialize(LPFNCREATEINSTANCE lpfnCIx, PLONG pcRefDllx, con
/******************************************************************************
* IDefClF_fnCreateInstance
*/
HRESULT WINAPI IDefClFImpl::CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
HRESULT WINAPI IDefClFImpl::CreateInstance(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppvObject)
{
TRACE("%p->(%p,%s,%p)\n", this, pUnkOuter, shdebugstr_guid(&riid), ppvObject);

View file

@ -484,13 +484,13 @@ HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
*/
HRESULT WINAPI SHDoDragDrop(
HWND hWnd,
LPDATAOBJECT lpDataObject,
IDataObject * lpDataObject,
LPDROPSOURCE lpDropSource,
DWORD dwOKEffect,
LPDWORD pdwEffect)
{
FIXME("(%p %p %p 0x%08x %p):stub.\n",
hWnd, lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
hWnd, lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
return DoDragDrop(lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
}
@ -1015,7 +1015,7 @@ HRESULT WINAPI SHCreateShellFolderViewEx(
LPCSFV psvcbi, /* [in] shelltemplate struct */
IShellView **ppv) /* [out] IShellView pointer */
{
IShellView *psf;
CComPtr<IShellView> psf;
HRESULT hRes;
TRACE("sf=%p pidl=%p cb=%p mode=0x%08x parm=%p\n",
@ -1028,7 +1028,6 @@ HRESULT WINAPI SHCreateShellFolderViewEx(
return hRes;
hRes = psf->QueryInterface(IID_PPV_ARG(IShellView, ppv));
psf->Release();
return hRes;
}
@ -1050,14 +1049,14 @@ EXTERN_C BOOL WINAPI SHRunControlPanel (LPCWSTR lpcszCmdLine, HWND hwndMsgParent
return 0;
}
static LPUNKNOWN SHELL32_IExplorerInterface=0;
static IUnknown * SHELL32_IExplorerInterface=0;
/*************************************************************************
* SHSetInstanceExplorer [SHELL32.176]
*
* NOTES
* Sets the interface
*/
VOID WINAPI SHSetInstanceExplorer (LPUNKNOWN lpUnknown)
VOID WINAPI SHSetInstanceExplorer (IUnknown * lpUnknown)
{ TRACE("%p\n", lpUnknown);
SHELL32_IExplorerInterface = lpUnknown;
}
@ -1897,7 +1896,7 @@ HRESULT WINAPI SHCreateStdEnumFmtEtc(
const FORMATETC *lpFormats,
LPENUMFORMATETC *ppenumFormatetc)
{
IEnumFORMATETC *pef;
CComPtr<IEnumFORMATETC> pef;
HRESULT hRes;
TRACE("cf=%d fe=%p pef=%p\n", cFormats, lpFormats, ppenumFormatetc);
@ -1907,7 +1906,6 @@ HRESULT WINAPI SHCreateStdEnumFmtEtc(
pef->AddRef();
hRes = pef->QueryInterface(IID_PPV_ARG(IEnumFORMATETC, ppenumFormatetc));
pef->Release();
return hRes;
}
@ -1918,7 +1916,7 @@ HRESULT WINAPI SHCreateStdEnumFmtEtc(
*/
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
{
IShellView *psf;
CComPtr<IShellView> psf;
HRESULT hRes;
*ppsv = NULL;
@ -1933,7 +1931,6 @@ HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **pps
return hRes;
hRes = psf->QueryInterface(IID_PPV_ARG(IShellView, ppsv));
psf->Release();
return hRes;
}

View file

@ -404,7 +404,7 @@ static BOOL SHELL_ArgifyW(WCHAR* out, DWORD len, const WCHAR* fmt, const WCHAR*
static HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR pszPath, UINT uOutSize)
{
STRRET strret;
IShellFolder *desktop;
CComPtr<IShellFolder> desktop;
HRESULT hr = SHGetDesktopFolder(&desktop);
@ -414,8 +414,6 @@ static HRESULT SHELL_GetPathFromIDListForExecuteW(LPCITEMIDLIST pidl, LPWSTR psz
if (SUCCEEDED(hr))
StrRetToStrNW(pszPath, uOutSize, &strret, pidl);
desktop->Release();
}
return hr;
@ -1782,7 +1780,7 @@ static BOOL SHELL_execute(LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc)
/* process the IDList */
if (sei_tmp.fMask & SEE_MASK_IDLIST)
{
IShellExecuteHookW* pSEH;
CComPtr<IShellExecuteHookW> pSEH;
HRESULT hr = SHBindToParent((LPCITEMIDLIST)sei_tmp.lpIDList, IID_PPV_ARG(IShellExecuteHookW, &pSEH), NULL);
@ -1790,8 +1788,6 @@ static BOOL SHELL_execute(LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfunc)
{
hr = pSEH->Execute(&sei_tmp);
pSEH->Release();
if (hr == S_OK)
{
HeapFree(GetProcessHeap(), 0, wszApplicationName);

View file

@ -212,11 +212,11 @@ static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
if (SUCCEEDED (hr))
{
LPITEMIDLIST pidlAbsolute = ILCombine (pidlRoot, pidlChild);
IPersistFolder *pPF;
IPersistFolder3 *ppf;
CComPtr<IPersistFolder> ppf;
CComPtr<IPersistFolder3> ppf3;
if (_ILIsFolder(pidlChild) &&
SUCCEEDED(pShellFolder->QueryInterface(IID_PPV_ARG(IPersistFolder3, &ppf))))
SUCCEEDED(pShellFolder->QueryInterface(IID_PPV_ARG(IPersistFolder3, &ppf3))))
{
PERSIST_FOLDER_TARGET_INFO ppfti;
@ -241,13 +241,11 @@ static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
hr = E_INVALIDARG;
}
ppf->InitializeEx(NULL, pidlAbsolute, &ppfti);
ppf->Release();
ppf3->InitializeEx(NULL, pidlAbsolute, &ppfti);
}
else if (SUCCEEDED((hr = pShellFolder->QueryInterface(IID_PPV_ARG(IPersistFolder, &pPF)))))
else if (SUCCEEDED((hr = pShellFolder->QueryInterface(IID_PPV_ARG(IPersistFolder, &ppf)))))
{
pPF->Initialize(pidlAbsolute);
pPF->Release();
ppf->Initialize(pidlAbsolute);
}
ILFree (pidlAbsolute);
}
@ -280,7 +278,7 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
LPCWSTR pathRoot, LPCITEMIDLIST pidlComplete, REFIID riid, LPVOID * ppvOut)
{
GUID const *clsid;
IShellFolder *pSF;
CComPtr<IShellFolder> pSF;
HRESULT hr;
LPITEMIDLIST pidlChild;
@ -325,7 +323,6 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
/* go deeper */
hr = pSF->BindToObject(ILGetNext (pidlComplete), NULL, riid, ppvOut);
}
pSF->Release();
}
TRACE ("-- returning (%p) %08x\n", *ppvOut, hr);
@ -359,7 +356,7 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
pidlFirst = ILCloneFirst(pidl);
if (pidlFirst)
{
IShellFolder *psfChild;
CComPtr<IShellFolder> psfChild;
hr = psf->BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
if (SUCCEEDED (hr))
@ -373,7 +370,6 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
if(!StrRetToStrNW (szOut, dwOutLen, &strTemp, pidlNext))
hr = E_FAIL;
}
psfChild->Release();
}
ILFree (pidlFirst);
} else
@ -491,7 +487,7 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWO
if (SFGAO_HASSUBFOLDER & *pdwAttributes)
{
IShellFolder *psf2;
CComPtr<IShellFolder> psf2;
if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &psf2))))
{
IEnumIDList *pEnumIL = NULL;
@ -501,7 +497,6 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWO
*pdwAttributes &= ~SFGAO_HASSUBFOLDER;
pEnumIL->Release();
}
psf2->Release();
}
}
} else
@ -514,68 +509,73 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWO
/***********************************************************************
* SHELL32_CompareIDs
*/
HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
HRESULT SHELL32_CompareIDs(IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
{
int type1,
type2;
type2;
char szTemp1[MAX_PATH];
char szTemp2[MAX_PATH];
HRESULT nReturn;
LPITEMIDLIST firstpidl,
nextpidl1,
nextpidl2;
IShellFolder *psf;
LPITEMIDLIST firstpidl;
LPITEMIDLIST nextpidl1;
LPITEMIDLIST nextpidl2;
CComPtr<IShellFolder> psf;
/* test for empty pidls */
BOOL isEmpty1 = _ILIsDesktop (pidl1);
BOOL isEmpty2 = _ILIsDesktop (pidl2);
BOOL isEmpty1 = _ILIsDesktop(pidl1);
BOOL isEmpty2 = _ILIsDesktop(pidl2);
if (isEmpty1 && isEmpty2)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 0 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0);
if (isEmpty1)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (WORD) -1);
if (isEmpty2)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 1);
/* test for different types. Sort order is the PT_* constant */
type1 = _ILGetDataPointer (pidl1)->type;
type2 = _ILGetDataPointer (pidl2)->type;
type1 = _ILGetDataPointer(pidl1)->type;
type2 = _ILGetDataPointer(pidl2)->type;
if (type1 < type2)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (WORD) -1);
else if (type1 > type2)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 1);
/* test for name of pidl */
_ILSimpleGetText (pidl1, szTemp1, MAX_PATH);
_ILSimpleGetText (pidl2, szTemp2, MAX_PATH);
nReturn = lstrcmpiA (szTemp1, szTemp2);
_ILSimpleGetText(pidl1, szTemp1, MAX_PATH);
_ILSimpleGetText(pidl2, szTemp2, MAX_PATH);
nReturn = lstrcmpiA(szTemp1, szTemp2);
if (nReturn < 0)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (WORD) -1);
else if (nReturn > 0)
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 1);
/* test of complex pidls */
firstpidl = ILCloneFirst (pidl1);
nextpidl1 = ILGetNext (pidl1);
nextpidl2 = ILGetNext (pidl2);
firstpidl = ILCloneFirst(pidl1);
nextpidl1 = ILGetNext(pidl1);
nextpidl2 = ILGetNext(pidl2);
/* optimizing: test special cases and bind not deeper */
/* the deeper shellfolder would do the same */
isEmpty1 = _ILIsDesktop (nextpidl1);
isEmpty2 = _ILIsDesktop (nextpidl2);
isEmpty1 = _ILIsDesktop(nextpidl1);
isEmpty2 = _ILIsDesktop(nextpidl2);
if (isEmpty1 && isEmpty2) {
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 0 );
} else if (isEmpty1) {
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, (WORD)-1 );
} else if (isEmpty2) {
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, 1 );
/* optimizing end */
} else if (SUCCEEDED (iface->BindToObject(firstpidl, NULL, IID_PPV_ARG(IShellFolder, &psf)))) {
nReturn = psf->CompareIDs(lParam, nextpidl1, nextpidl2);
psf->Release();
if (isEmpty1 && isEmpty2)
{
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0);
}
ILFree (firstpidl);
else if (isEmpty1)
{
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (WORD) -1);
}
else if (isEmpty2)
{
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 1);
/* optimizing end */
}
else if (SUCCEEDED(iface->BindToObject(firstpidl, NULL, IID_PPV_ARG(IShellFolder, &psf)))) {
nReturn = psf->CompareIDs(lParam, nextpidl1, nextpidl2);
}
ILFree(firstpidl);
return nReturn;
}
@ -584,10 +584,10 @@ HRESULT SHELL32_CompareIDs (IShellFolder * iface, LPARAM lParam, LPCITEMIDLIST p
*
* Undocumented.
*/
HRESULT WINAPI SHCreateLinks( HWND hWnd, LPCSTR lpszDir, LPDATAOBJECT lpDataObject,
HRESULT WINAPI SHCreateLinks( HWND hWnd, LPCSTR lpszDir, IDataObject * lpDataObject,
UINT uFlags, LPITEMIDLIST *lppidlLinks)
{
FIXME("%p %s %p %08x %p\n",hWnd,lpszDir,lpDataObject,uFlags,lppidlLinks);
FIXME("%p %s %p %08x %p\n", hWnd, lpszDir, lpDataObject, uFlags, lppidlLinks);
return E_NOTIMPL;
}

View file

@ -1755,7 +1755,7 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
if (GetSelections())
{
IDataObject * pda;
CComPtr<IDataObject> pda;
DWORD dwAttributes = SFGAO_CANLINK;
DWORD dwEffect = DROPEFFECT_COPY | DROPEFFECT_MOVE;
@ -1775,14 +1775,12 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
if (SUCCEEDED(pda->QueryInterface(IID_PPV_ARG(IAsyncOperation, &piaso))))
{
piaso->SetAsyncMode(TRUE);
piaso->Release();
}
if (pds)
{ DWORD dwEffect2;
DoDragDrop(pda, pds, dwEffect, &dwEffect2);
}
pda->Release();
}
}
break;