mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
[EXPLORER]
* Simplify CreateStartMenu. Use CComPtr and IUnknown_SetSite. svn path=/trunk/; revision=65600
This commit is contained in:
parent
50d056ca73
commit
7427f826d0
1 changed files with 16 additions and 65 deletions
|
@ -47,13 +47,12 @@ CreateStartMenu(IN ITrayWindow *Tray,
|
||||||
IN BOOL bSmallIcons)
|
IN BOOL bSmallIcons)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
IObjectWithSite *pOws = NULL;
|
CComPtr<IMenuPopup> pMp;
|
||||||
IMenuPopup *pMp = NULL;
|
CComPtr<IUnknown> pSms;
|
||||||
IUnknown *pSms = NULL;
|
CComPtr<IMenuBand> pMb;
|
||||||
IMenuBand *pMb = NULL;
|
CComPtr<IInitializeObject> pIo;
|
||||||
IInitializeObject *pIo;
|
CComPtr<IUnknown> pUnk;
|
||||||
IUnknown *pUnk = NULL;
|
CComPtr<IBandSite> pBs;
|
||||||
IBandSite *pBs = NULL;
|
|
||||||
DWORD dwBandId = 0;
|
DWORD dwBandId = 0;
|
||||||
|
|
||||||
hr = CreateStartMenuSite(Tray, IID_PPV_ARG(IUnknown, &pSms));
|
hr = CreateStartMenuSite(Tray, IID_PPV_ARG(IUnknown, &pSms));
|
||||||
|
@ -70,95 +69,47 @@ CreateStartMenu(IN ITrayWindow *Tray,
|
||||||
hr = _CStartMenu_Constructor(IID_PPV_ARG(IMenuPopup, &pMp));
|
hr = _CStartMenu_Constructor(IID_PPV_ARG(IMenuPopup, &pMp));
|
||||||
#endif
|
#endif
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("CoCreateInstance failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = pMp->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pOws));
|
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
|
||||||
{
|
|
||||||
TRACE("IMenuPopup_QueryInterface failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the menu site so we can handle messages */
|
/* Set the menu site so we can handle messages */
|
||||||
hr = pOws->SetSite(pSms);
|
hr = IUnknown_SetSite(pMp, pSms);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("IObjectWithSite_SetSite failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize the menu object */
|
/* Initialize the menu object */
|
||||||
hr = pMp->QueryInterface(IID_PPV_ARG(IInitializeObject, &pIo));
|
hr = pMp->QueryInterface(IID_PPV_ARG(IInitializeObject, &pIo));
|
||||||
if (SUCCEEDED(hr))
|
if (SUCCEEDED(hr))
|
||||||
{
|
|
||||||
hr = pIo->Initialize();
|
hr = pIo->Initialize();
|
||||||
pIo->Release();
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
hr = S_OK;
|
hr = S_OK;
|
||||||
|
|
||||||
/* Everything is initialized now. Let's get the IMenuBand interface. */
|
/* Everything is initialized now. Let's get the IMenuBand interface. */
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("IMenuPopup_QueryInterface failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = pMp->GetClient(&pUnk);
|
hr = pMp->GetClient(&pUnk);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("IMenuPopup_GetClient failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = pUnk->QueryInterface(IID_PPV_ARG(IBandSite, &pBs));
|
hr = pUnk->QueryInterface(IID_PPV_ARG(IBandSite, &pBs));
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("IUnknown_QueryInterface pBs failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Finally we have the IBandSite interface, there's only one
|
/* Finally we have the IBandSite interface, there's only one
|
||||||
band in it that apparently provides the IMenuBand interface */
|
band in it that apparently provides the IMenuBand interface */
|
||||||
hr = pBs->EnumBands(0, &dwBandId);
|
hr = pBs->EnumBands(0, &dwBandId);
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("IBandSite_EnumBands failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
hr = pBs->GetBandObject(dwBandId, IID_PPV_ARG(IMenuBand, &pMb));
|
hr = pBs->GetBandObject(dwBandId, IID_PPV_ARG(IMenuBand, &pMb));
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED_UNEXPECTEDLY(hr))
|
||||||
{
|
return NULL;
|
||||||
TRACE("IBandSite_GetBandObject failed: %x\n", hr);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateStartMenu(pMp,
|
UpdateStartMenu(pMp,
|
||||||
hbmBanner,
|
hbmBanner,
|
||||||
bSmallIcons);
|
bSmallIcons);
|
||||||
|
|
||||||
cleanup:
|
*ppMenuBand = pMb.Detach();
|
||||||
if (SUCCEEDED(hr))
|
|
||||||
*ppMenuBand = pMb;
|
|
||||||
else if (pMb != NULL)
|
|
||||||
pMb->Release();
|
|
||||||
|
|
||||||
if (pBs != NULL)
|
return pMp.Detach();
|
||||||
pBs->Release();
|
|
||||||
if (pUnk != NULL)
|
|
||||||
pUnk->Release();
|
|
||||||
if (pOws != NULL)
|
|
||||||
pOws->Release();
|
|
||||||
if (pMp != NULL)
|
|
||||||
pMp->Release();
|
|
||||||
if (pSms != NULL)
|
|
||||||
pSms->Release();
|
|
||||||
|
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
|
||||||
return NULL;
|
|
||||||
return pMp;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue