mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 09:50:07 +00:00
[SHELL32]
- Correctly handle NULL callback in CMenuBand::GetMenuInfo - Add missing error handling in CMenuFocusManager::UpdateFocus Fixes crashes in shell32_apitest:menu CORE-9932 #resolve svn path=/trunk/; revision=68767
This commit is contained in:
parent
ed56601be6
commit
4436c96a25
|
@ -108,7 +108,8 @@ HRESULT STDMETHODCALLTYPE CMenuBand::GetMenuInfo(
|
|||
|
||||
if (ppsmc)
|
||||
{
|
||||
m_psmc->AddRef();
|
||||
if (m_psmc)
|
||||
m_psmc->AddRef();
|
||||
*ppsmc = m_psmc;
|
||||
}
|
||||
|
||||
|
|
|
@ -814,14 +814,22 @@ HRESULT CMenuFocusManager::UpdateFocus()
|
|||
CComPtr<IServiceProvider> bandSite;
|
||||
CComPtr<IOleWindow> deskBar;
|
||||
hr = topMenu->mb->GetSite(IID_PPV_ARG(IServiceProvider, &bandSite));
|
||||
if (FAILED(hr))
|
||||
goto NoCapture;
|
||||
hr = bandSite->QueryService(SID_SMenuPopup, IID_PPV_ARG(IOleWindow, &deskBar));
|
||||
if (FAILED(hr))
|
||||
goto NoCapture;
|
||||
|
||||
CComPtr<IOleWindow> deskBarSite;
|
||||
hr = IUnknown_GetSite(deskBar, IID_PPV_ARG(IOleWindow, &deskBarSite));
|
||||
if (FAILED(hr))
|
||||
goto NoCapture;
|
||||
|
||||
// FIXME: Find the correct place for this
|
||||
HWND hWndOwner;
|
||||
deskBarSite->GetWindow(&hWndOwner);
|
||||
hr = deskBarSite->GetWindow(&hWndOwner);
|
||||
if (FAILED(hr))
|
||||
goto NoCapture;
|
||||
|
||||
m_PreviousForeground = ::GetForegroundWindow();
|
||||
if (m_PreviousForeground != hWndOwner)
|
||||
|
@ -832,9 +840,11 @@ HRESULT CMenuFocusManager::UpdateFocus()
|
|||
// Get the HWND of the top-level window
|
||||
HWND hWndSite;
|
||||
hr = deskBar->GetWindow(&hWndSite);
|
||||
if (FAILED(hr))
|
||||
goto NoCapture;
|
||||
SetMenuCapture(hWndSite);
|
||||
|
||||
}
|
||||
NoCapture:
|
||||
|
||||
if (!m_parent || m_parent->type == MenuBarEntry)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue