* Another batch of interface pointers converted to CComPtr.
svn path=/branches/shell-experiments/; revision=63909
LPITEMIDLIST pidlParent, pidlChild;
HIMAGELIST hImageList;
HRESULT hr;
- IShellFolder *lpsfParent, *lpsfRoot;
- IEnumIDList * pEnumChildren = NULL;
+ CComPtr<IShellFolder> lpsfParent;
+ CComPtr<IShellFolder> lpsfRoot;
+ CComPtr<IEnumIDList> pEnumChildren;
HTREEITEM item;
DWORD flags;
LPCITEMIDLIST root = info->lpBrowseInfo->pidlRoot;
hr = lpsfParent->BindToObject(pidlChild, 0, IID_PPV_ARG(IShellFolder, &lpsfRoot));
} else {
lpsfRoot = lpsfParent;
- hr = lpsfParent->AddRef();
}
if (FAILED(hr)) {
WARN("Could not bind to root shell folder! hr = %08x\n", hr);
- lpsfParent->Release();
ILFree(pidlChild);
ILFree(pidlParent);
return;
hr = lpsfRoot->EnumObjects(info->hWnd, flags, &pEnumChildren );
if (FAILED(hr)) {
WARN("Could not get child iterator! hr = %08x\n", hr);
- lpsfParent->Release();
- lpsfRoot->Release();
ILFree(pidlChild);
ILFree(pidlParent);
return;
ILFree(pidlChild);
ILFree(pidlParent);
- lpsfRoot->Release();
- lpsfParent->Release();
}
static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags)
tvi.lParam = (LPARAM)lptvid;
lpsf->AddRef();
+ pEnumIL->AddRef();
lptvid->lpsfParent = lpsf;
lptvid->lpi = ILClone(pidl);
lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl);
while (S_OK == lpe->Next(1,&pidlTemp,&ulFetched))
{
ULONG ulAttrs = SFGAO_HASSUBFOLDER | SFGAO_FOLDER;
- IEnumIDList* pEnumIL = NULL;
- IShellFolder* pSFChild = NULL;
+ CComPtr<IEnumIDList> pEnumIL;
+ CComPtr<IShellFolder> pSFChild;
lpsf->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &ulAttrs);
if (ulAttrs & SFGAO_FOLDER)
{
if ((pEnumIL->Skip(1) != S_OK) ||
FAILED(pEnumIL->Reset()))
{
- pEnumIL->Release();
pEnumIL = NULL;
}
}
- pSFChild->Release();
}
}
static LRESULT BrsFolder_Treeview_Expand( browse_info *info, NMTREEVIEWW *pnmtv )
{
- IShellFolder *lpsf2 = NULL;
+ CComPtr<IShellFolder> lpsf2;
LPTV_ITEMDATA lptvid = (LPTV_ITEMDATA) pnmtv->itemNew.lParam;
HRESULT r;
STGMEDIUM medium;
FORMATETC formatetc;
- TRACE("pDataObj=%p\n", pDataObj);
+ TRACE("pDataObj=%p\n", pDataObj.p);
/* Set the FORMATETC structure*/
InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
if (!lpSB)
return E_FAIL;
- IShellView * lpSV = NULL;
+ CComPtr<IShellView> lpSV;
if (FAILED(lpSB->QueryActiveShellView(&lpSV)))
return E_FAIL;
HWND hwndSV = NULL;
if (SUCCEEDED(lpSV->GetWindow(&hwndSV)))
SendMessageW(hwndSV, WM_COMMAND, MAKEWPARAM(LOWORD(lpcmi->lpVerb), 0), 0);
-
- lpSV->Release();
return S_OK;
}
{
static const WCHAR szFull[] = {'F','u','l','l',0};
static const WCHAR szEmpty[] = {'E','m','p','t','y',0};
- IEnumIDList *EnumIDList = NULL;
+ CComPtr<IEnumIDList> EnumIDList;
CoInitialize(NULL);
- IShellFolder2 *psfRecycleBin = NULL;
- IShellFolder *psfDesktop = NULL;
+ CComPtr<IShellFolder2> psfRecycleBin;
+ CComPtr<IShellFolder> psfDesktop;
hr = SHGetDesktopFolder(&psfDesktop);
if (SUCCEEDED(hr))
} else {
iconname = szEmpty;
}
-
- if (psfDesktop)
- psfDesktop->Release();
- if (psfRecycleBin)
- psfRecycleBin->Release();
- if (EnumIDList)
- EnumIDList->Release();
}
if (HCR_GetIconW(xriid, wTemp, iconname, MAX_PATH, &icon_idx))
HRESULT STDMETHODCALLTYPE CNewMenu::GetSite(REFIID riid, void **ppvSite)
{
- if (ppvSite == NULL)
- return E_POINTER;
- *ppvSite = m_pSite;
- if (m_pSite != NULL)
- m_pSite->AddRef();
- return S_OK;
+ return m_pSite->QueryInterface(riid, ppvSite);
}
HRESULT
WINAPI
CNewMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
{
- IShellBrowser *lpSB = NULL;
- CComPtr<IShellView> lpSV = NULL;
+ CComPtr<IShellBrowser> lpSB;
+ CComPtr<IShellView> lpSV;
HRESULT hr = E_FAIL;
/* Note: CWM_GETISHELLBROWSER returns shell browser without adding reference */
LPWSTR m_wszPath;
SHELLNEW_ITEM *m_pItems;
SHELLNEW_ITEM *m_pLinkItem;
- IUnknown *m_pSite;
+ CComPtr<IUnknown> m_pSite;
HMENU m_hSubMenu;
HBITMAP m_hbmFolder, m_hbmLink;
BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
{
CComPtr<IShellFolder> psfParent;
- IShellFolder * lsf = psf;
+ CComPtr<IShellFolder> lsf = psf;
HRESULT ret = NO_ERROR;
LPCITEMIDLIST pidllast;
STRRET strret;
TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
- if (!psf)
- lsf->Release();
return SUCCEEDED(ret);
}
BOOL bDirty;
INT iIdOpen; /* id of the "Open" entry in the context menu */
CComPtr<IUnknown> site;
- IDropTarget *mDropTarget;
+ CComPtr<IDropTarget> mDropTarget;
public:
CShellLink();
~CShellLink();
/* Get the interface for the new image list */
if (hNew)
{
- IImageList *imageList = (IImageList*) hNew;
+ IImageList *imageList = reinterpret_cast<IImageList*>(hNew);
ret = imageList->QueryInterface(riid, ppv);
- ImageList_Destroy(hNew);
+ // Since we are not duplicating, destroying makes no sense.
+ /* ImageList_Destroy(hNew); */
}
return ret;
static IDataObject *shellex_get_dataobj( LPSHELLEXECUTEINFOW sei )
{
LPCITEMIDLIST pidllast = NULL;
- IDataObject *dataobj = NULL;
- IShellFolder *shf = NULL;
+ CComPtr<IDataObject> dataobj;
+ CComPtr<IShellFolder> shf;
LPITEMIDLIST pidl = NULL;
HRESULT r;
end:
if (pidl != sei->lpIDList)
ILFree(pidl);
- if (shf)
- shf->Release();
- return dataobj;
+ return dataobj.Detach();
}
static HRESULT shellex_run_context_menu_default(IShellExtInit *obj,
LPSHELLEXECUTEINFOW sei)
{
- IContextMenu *cm = NULL;
+ CComPtr<IContextMenu> cm = NULL;
CMINVOKECOMMANDINFOEX ici;
MENUITEMINFOW info;
WCHAR string[0x80];
end:
if (hmenu)
DestroyMenu( hmenu );
- if (cm)
- cm->Release();
return r;
}
static HRESULT shellex_load_object_and_run(HKEY hkey, LPCGUID guid, LPSHELLEXECUTEINFOW sei)
{
+ // Can not use CComPtr here because of CoUninitialize at the end, before the destructors would run.
IDataObject *dataobj = NULL;
IObjectWithSite *ows = NULL;
IShellExtInit *obj = NULL;
LPCITEMIDLIST pidlChild, REFCLSID clsid, LPVOID * ppvOut)
{
HRESULT hr;
- IShellFolder* pShellFolder = NULL;
+ CComPtr<IShellFolder> pShellFolder;
TRACE ("%p %s %p\n", pidlRoot, debugstr_w(pathRoot), pidlChild);
ILFree (pidlAbsolute);
}
- *ppvOut = pShellFolder;
+ *ppvOut = pShellFolder.Detach();
TRACE ("-- (%p) ret=0x%08x\n", *ppvOut, hr);
CComPtr<IShellFolder> psf2;
if (SUCCEEDED(psf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &psf2))))
{
- IEnumIDList *pEnumIL = NULL;
+ CComPtr<IEnumIDList> pEnumIL;
if (SUCCEEDED(psf2->EnumObjects(0, SHCONTF_FOLDERS, &pEnumIL)))
{
if (pEnumIL->Skip(1) != S_OK)
*pdwAttributes &= ~SFGAO_HASSUBFOLDER;
- pEnumIL->Release();
}
}
}
*
*/
static int FM_InitMenuPopup(HMENU hmenu, LPCITEMIDLIST pAlternatePidl)
-{ IShellFolder *lpsf, *lpsf2;
+{
+ CComPtr<IShellFolder> lpsf;
+ CComPtr<IShellFolder> lpsf2;
ULONG ulItemAttr = SFGAO_FOLDER;
UINT uID, uEnumFlags;
LPFNFMCALLBACK lpfnCallback;
MenuInfo.cbSize = sizeof(MENUINFO);
MenuInfo.fMask = MIM_MENUDATA;
- if (! GetMenuInfo(hmenu, &MenuInfo))
- return FALSE;
+ if (!GetMenuInfo(hmenu, &MenuInfo))
+ return FALSE;
- menudata = (LPFMINFO)MenuInfo.dwMenuData;
+ menudata = (LPFMINFO) MenuInfo.dwMenuData;
if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO)))
{
- ERR("menudata corrupt: %p %u\n", menudata, MenuInfo.cbSize);
- return 0;
+ ERR("menudata corrupt: %p %u\n", menudata, MenuInfo.cbSize);
+ return 0;
}
if (menudata->bInitialized)
- return 0;
+ return 0;
- pidl = (pAlternatePidl? pAlternatePidl: menudata->pidl);
+ pidl = (pAlternatePidl ? pAlternatePidl : menudata->pidl);
if (!pidl)
- return 0;
+ return 0;
uID = menudata->uID;
uEnumFlags = menudata->uEnumFlags;
SetMenuInfo(hmenu, &MenuInfo);
- if (SUCCEEDED (SHGetDesktopFolder(&lpsf)))
+ if (SUCCEEDED(SHGetDesktopFolder(&lpsf)))
{
- if (SUCCEEDED(lpsf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &lpsf2))))
- {
- IEnumIDList *lpe = NULL;
-
- if (SUCCEEDED (lpsf2->EnumObjects(0, uEnumFlags, &lpe )))
- {
-
- LPITEMIDLIST pidlTemp = NULL;
- ULONG ulFetched;
-
- while ((!bAbortInit) && (S_OK == lpe->Next(1,&pidlTemp,&ulFetched)))
- {
- if (SUCCEEDED (lpsf->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlTemp, &ulItemAttr)))
- {
- ILGetDisplayNameExW(NULL, pidlTemp, sTemp, ILGDN_FORPARSING);
- if (! (PidlToSicIndex(lpsf, pidlTemp, FALSE, 0, &iIcon)))
- iIcon = FM_BLANK_ICON;
- if ( SFGAO_FOLDER & ulItemAttr)
- {
- LPFMINFO lpFmMi;
- MENUINFO MenuInfo;
- HMENU hMenuPopup = CreatePopupMenu();
-
- lpFmMi = (LPFMINFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMINFO));
-
- lpFmMi->pidl = ILCombine(pidl, pidlTemp);
- lpFmMi->uEnumFlags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS;
-
- MenuInfo.cbSize = sizeof(MENUINFO);
- MenuInfo.fMask = MIM_MENUDATA;
- MenuInfo.dwMenuData = (ULONG_PTR) lpFmMi;
- SetMenuInfo (hMenuPopup, &MenuInfo);
-
- FileMenu_AppendItemW (hmenu, sTemp, uID, iIcon, hMenuPopup, FM_DEFAULT_HEIGHT);
- }
- else
- {
- LPWSTR pExt = PathFindExtensionW(sTemp);
- if (pExt)
- *pExt = 0;
- FileMenu_AppendItemW (hmenu, sTemp, uID, iIcon, 0, FM_DEFAULT_HEIGHT);
- }
- }
-
- if (lpfnCallback)
+ if (SUCCEEDED(lpsf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &lpsf2))))
{
- TRACE("enter callback\n");
- lpfnCallback ( pidl, pidlTemp);
- TRACE("leave callback\n");
+ CComPtr<IEnumIDList> lpe;
+
+ if (SUCCEEDED(lpsf2->EnumObjects(0, uEnumFlags, &lpe)))
+ {
+
+ LPITEMIDLIST pidlTemp = NULL;
+ ULONG ulFetched;
+
+ while ((!bAbortInit) && (S_OK == lpe->Next(1, &pidlTemp, &ulFetched)))
+ {
+ if (SUCCEEDED(lpsf->GetAttributesOf(1, (LPCITEMIDLIST*) &pidlTemp, &ulItemAttr)))
+ {
+ ILGetDisplayNameExW(NULL, pidlTemp, sTemp, ILGDN_FORPARSING);
+ if (!(PidlToSicIndex(lpsf, pidlTemp, FALSE, 0, &iIcon)))
+ iIcon = FM_BLANK_ICON;
+ if (SFGAO_FOLDER & ulItemAttr)
+ {
+ LPFMINFO lpFmMi;
+ MENUINFO MenuInfo;
+ HMENU hMenuPopup = CreatePopupMenu();
+
+ lpFmMi = (LPFMINFO) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMINFO));
+
+ lpFmMi->pidl = ILCombine(pidl, pidlTemp);
+ lpFmMi->uEnumFlags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS;
+
+ MenuInfo.cbSize = sizeof(MENUINFO);
+ MenuInfo.fMask = MIM_MENUDATA;
+ MenuInfo.dwMenuData = (ULONG_PTR) lpFmMi;
+ SetMenuInfo(hMenuPopup, &MenuInfo);
+
+ FileMenu_AppendItemW(hmenu, sTemp, uID, iIcon, hMenuPopup, FM_DEFAULT_HEIGHT);
+ }
+ else
+ {
+ LPWSTR pExt = PathFindExtensionW(sTemp);
+ if (pExt)
+ *pExt = 0;
+ FileMenu_AppendItemW(hmenu, sTemp, uID, iIcon, 0, FM_DEFAULT_HEIGHT);
+ }
+ }
+
+ if (lpfnCallback)
+ {
+ TRACE("enter callback\n");
+ lpfnCallback(pidl, pidlTemp);
+ TRACE("leave callback\n");
+ }
+
+ NumberOfItems++;
+ }
+ }
}
-
- NumberOfItems++;
- }
- lpe->Release();
- }
- lpsf2->Release();
- }
- lpsf->Release();
}
- if ( GetMenuItemCount (hmenu) == 0 )
+ if (GetMenuItemCount(hmenu) == 0)
{
- static const WCHAR szEmpty[] = { '(','e','m','p','t','y',')',0 };
- FileMenu_AppendItemW (hmenu, szEmpty, uID, FM_BLANK_ICON, 0, FM_DEFAULT_HEIGHT);
- NumberOfItems++;
+ static const WCHAR szEmpty [] = { '(', 'e', 'm', 'p', 't', 'y', ')', 0 };
+ FileMenu_AppendItemW(hmenu, szEmpty, uID, FM_BLANK_ICON, 0, FM_DEFAULT_HEIGHT);
+ NumberOfItems++;
}
menudata->bInitialized = TRUE;
return NumberOfItems;
}
+
/*************************************************************************
* FileMenu_Create [SHELL32.114]
*
if (SUCCEEDED(m_pSFParent->GetUIObjectOf(m_hWnd, m_cidl, (LPCITEMIDLIST*)m_apidl, IID_NULL_PPV_ARG(IDataObject, &pda))))
{
- IDropSource * pds = (IDropSource *)this; /* own DropSource interface */
+ CComPtr<IDropSource> pds = static_cast<IDropSource *>(this); /* own DropSource interface */
if (SUCCEEDED(m_pSFParent->GetAttributesOf(m_cidl, (LPCITEMIDLIST*)m_apidl, &dwAttributes)))
{