[SHELL32]

* Another batch of interface pointers converted to CComPtr.

svn path=/branches/shell-experiments/; revision=63909
This commit is contained in:
David Quintana 2014-08-20 12:25:09 +00:00
parent ef04ff090e
commit 117eba9bd5
12 changed files with 94 additions and 119 deletions

View file

@ -177,8 +177,9 @@ static void InitializeTreeView( browse_info *info )
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;
@ -232,12 +233,10 @@ static void InitializeTreeView( browse_info *info )
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;
@ -247,8 +246,6 @@ static void InitializeTreeView( browse_info *info )
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;
@ -261,8 +258,6 @@ static void InitializeTreeView( browse_info *info )
ILFree(pidlChild);
ILFree(pidlParent);
lpsfRoot->Release();
lpsfParent->Release();
}
static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags)
@ -366,6 +361,7 @@ static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf,
tvi.lParam = (LPARAM)lptvid;
lpsf->AddRef();
pEnumIL->AddRef();
lptvid->lpsfParent = lpsf;
lptvid->lpi = ILClone(pidl);
lptvid->lpifq = pidlParent ? ILCombine(pidlParent, pidl) : ILClone(pidl);
@ -411,8 +407,8 @@ static void FillTreeView( browse_info *info, IShellFolder * lpsf,
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)
{
@ -426,11 +422,9 @@ static void FillTreeView( browse_info *info, IShellFolder * lpsf,
if ((pEnumIL->Skip(1) != S_OK) ||
FAILED(pEnumIL->Reset()))
{
pEnumIL->Release();
pEnumIL = NULL;
}
}
pSFChild->Release();
}
}
@ -508,7 +502,7 @@ static LRESULT BrsFolder_Treeview_Delete( browse_info *info, NMTREEVIEWW *pnmtv
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;

View file

@ -308,7 +308,7 @@ HasClipboardData()
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);
@ -933,15 +933,13 @@ NotifyShellViewWindow(LPCMINVOKECOMMANDINFO lpcmi, BOOL bRefresh)
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;
}

View file

@ -241,11 +241,11 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
{
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))
@ -262,13 +262,6 @@ IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
} 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))

View file

@ -544,12 +544,7 @@ HRESULT STDMETHODCALLTYPE CNewMenu::SetSite(IUnknown *pUnkSite)
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
@ -596,8 +591,8 @@ 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 */

View file

@ -54,7 +54,7 @@ private:
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;

View file

@ -71,7 +71,7 @@ static BOOL ILGetDisplayNameExA(IShellFolder * psf, LPCITEMIDLIST pidl, LPSTR pa
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;
@ -133,8 +133,6 @@ BOOL WINAPI ILGetDisplayNameExW(IShellFolder * psf, LPCITEMIDLIST pidl, LPWSTR p
TRACE("%p %p %s\n", psf, pidl, debugstr_w(path));
if (!psf)
lsf->Release();
return SUCCEEDED(ret);
}

View file

@ -76,7 +76,7 @@ private:
BOOL bDirty;
INT iIdOpen; /* id of the "Open" entry in the context menu */
CComPtr<IUnknown> site;
IDropTarget *mDropTarget;
CComPtr<IDropTarget> mDropTarget;
public:
CShellLink();
~CShellLink();

View file

@ -2275,10 +2275,11 @@ EXTERN_C HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv)
/* 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;

View file

@ -1274,8 +1274,8 @@ static HKEY ShellExecute_GetClassKey(const SHELLEXECUTEINFOW *sei)
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;
@ -1303,15 +1303,13 @@ static IDataObject *shellex_get_dataobj( LPSHELLEXECUTEINFOW sei )
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];
@ -1374,13 +1372,12 @@ static HRESULT shellex_run_context_menu_default(IShellExtInit *obj,
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;

View file

@ -204,7 +204,7 @@ static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
LPCITEMIDLIST pidlChild, REFCLSID clsid, LPVOID * ppvOut)
{
HRESULT hr;
IShellFolder* pShellFolder = NULL;
CComPtr<IShellFolder> pShellFolder;
TRACE ("%p %s %p\n", pidlRoot, debugstr_w(pathRoot), pidlChild);
@ -250,7 +250,7 @@ static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
ILFree (pidlAbsolute);
}
*ppvOut = pShellFolder;
*ppvOut = pShellFolder.Detach();
TRACE ("-- (%p) ret=0x%08x\n", *ppvOut, hr);
@ -490,12 +490,11 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWO
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();
}
}
}

View file

@ -114,7 +114,9 @@ static LPFMINFO FM_SetMenuParameter(
*
*/
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;
@ -129,23 +131,23 @@ static int FM_InitMenuPopup(HMENU hmenu, LPCITEMIDLIST pAlternatePidl)
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;
@ -154,73 +156,70 @@ static int FM_InitMenuPopup(HMENU hmenu, LPCITEMIDLIST pAlternatePidl)
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 )))
if (SUCCEEDED(lpsf->BindToObject(pidl, 0, IID_PPV_ARG(IShellFolder, &lpsf2))))
{
CComPtr<IEnumIDList> lpe;
LPITEMIDLIST pidlTemp = NULL;
ULONG ulFetched;
if (SUCCEEDED(lpsf2->EnumObjects(0, uEnumFlags, &lpe)))
{
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();
LPITEMIDLIST pidlTemp = NULL;
ULONG ulFetched;
lpFmMi = (LPFMINFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMINFO));
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->pidl = ILCombine(pidl, pidlTemp);
lpFmMi->uEnumFlags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS;
lpFmMi = (LPFMINFO) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMINFO));
MenuInfo.cbSize = sizeof(MENUINFO);
MenuInfo.fMask = MIM_MENUDATA;
MenuInfo.dwMenuData = (ULONG_PTR) lpFmMi;
SetMenuInfo (hMenuPopup, &MenuInfo);
lpFmMi->pidl = ILCombine(pidl, pidlTemp);
lpFmMi->uEnumFlags = SHCONTF_FOLDERS | SHCONTF_NONFOLDERS;
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);
}
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++;
}
}
}
if (lpfnCallback)
{
TRACE("enter callback\n");
lpfnCallback ( pidl, pidlTemp);
TRACE("leave callback\n");
}
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;
@ -228,6 +227,7 @@ static int FM_InitMenuPopup(HMENU hmenu, LPCITEMIDLIST pAlternatePidl)
return NumberOfItems;
}
/*************************************************************************
* FileMenu_Create [SHELL32.114]
*

View file

@ -1761,7 +1761,7 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
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)))
{