Author: gadamopoulos Date: Tue Dec 9 22:49:54 2014 New Revision: 65600 URL: http://svn.reactos.org/svn/reactos?rev=65600&view=rev Log: [EXPLORER] * Simplify CreateStartMenu. Use CComPtr and IUnknown_SetSite.
Modified: trunk/reactos/base/shell/explorer/startmnu.cpp Modified: trunk/reactos/base/shell/explorer/startmnu.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/explorer/startmnu.cpp?rev=65600&r1=65599&r2=65600&view=diff ============================================================================== --- trunk/reactos/base/shell/explorer/startmnu.cpp [iso-8859-1] (original) +++ trunk/reactos/base/shell/explorer/startmnu.cpp [iso-8859-1] Tue Dec 9 22:49:54 2014 @@ -47,13 +47,12 @@ IN BOOL bSmallIcons) { HRESULT hr; - IObjectWithSite *pOws = NULL; - IMenuPopup *pMp = NULL; - IUnknown *pSms = NULL; - IMenuBand *pMb = NULL; - IInitializeObject *pIo; - IUnknown *pUnk = NULL; - IBandSite *pBs = NULL; + CComPtr<IMenuPopup> pMp; + CComPtr<IUnknown> pSms; + CComPtr<IMenuBand> pMb; + CComPtr<IInitializeObject> pIo; + CComPtr<IUnknown> pUnk; + CComPtr<IBandSite> pBs; DWORD dwBandId = 0; hr = CreateStartMenuSite(Tray, IID_PPV_ARG(IUnknown, &pSms)); @@ -70,95 +69,47 @@ hr = _CStartMenu_Constructor(IID_PPV_ARG(IMenuPopup, &pMp)); #endif if (FAILED_UNEXPECTEDLY(hr)) - { - 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; - } + return NULL; /* Set the menu site so we can handle messages */ - hr = pOws->SetSite(pSms); + hr = IUnknown_SetSite(pMp, pSms); if (FAILED_UNEXPECTEDLY(hr)) - { - TRACE("IObjectWithSite_SetSite failed: %x\n", hr); - goto cleanup; - } + return NULL; /* Initialize the menu object */ hr = pMp->QueryInterface(IID_PPV_ARG(IInitializeObject, &pIo)); if (SUCCEEDED(hr)) - { hr = pIo->Initialize(); - pIo->Release(); - } else hr = S_OK; /* Everything is initialized now. Let's get the IMenuBand interface. */ if (FAILED_UNEXPECTEDLY(hr)) - { - TRACE("IMenuPopup_QueryInterface failed: %x\n", hr); - goto cleanup; - } + return NULL; hr = pMp->GetClient(&pUnk); if (FAILED_UNEXPECTEDLY(hr)) - { - TRACE("IMenuPopup_GetClient failed: %x\n", hr); - goto cleanup; - } + return NULL; hr = pUnk->QueryInterface(IID_PPV_ARG(IBandSite, &pBs)); if (FAILED_UNEXPECTEDLY(hr)) - { - TRACE("IUnknown_QueryInterface pBs failed: %x\n", hr); - goto cleanup; - } + return NULL; /* Finally we have the IBandSite interface, there's only one band in it that apparently provides the IMenuBand interface */ hr = pBs->EnumBands(0, &dwBandId); if (FAILED_UNEXPECTEDLY(hr)) - { - TRACE("IBandSite_EnumBands failed: %x\n", hr); - goto cleanup; - } + return NULL; hr = pBs->GetBandObject(dwBandId, IID_PPV_ARG(IMenuBand, &pMb)); if (FAILED_UNEXPECTEDLY(hr)) - { - TRACE("IBandSite_GetBandObject failed: %x\n", hr); - goto cleanup; - } + return NULL; UpdateStartMenu(pMp, hbmBanner, bSmallIcons); -cleanup: - if (SUCCEEDED(hr)) - *ppMenuBand = pMb; - else if (pMb != NULL) - pMb->Release(); + *ppMenuBand = pMb.Detach(); - if (pBs != NULL) - 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; + return pMp.Detach(); }