if (m_SFToolbar)
delete m_SFToolbar;
+
+ if (m_hmenu)
+ DestroyMenu(m_hmenu);
}
HRESULT STDMETHODCALLTYPE CMenuBand::Initialize(
BOOL created = FALSE;
+ if (m_hmenu)
+ {
+ DestroyMenu(m_hmenu);
+ m_hmenu = NULL;
+ }
+
if (m_staticToolbar == NULL)
{
m_staticToolbar = new CMenuStaticToolbar(this);
return S_OK;
}
- HRESULT hr = punkClient->QueryInterface(IID_PPV_ARG(IMenuPopup, &m_subMenuChild));
-
- return hr;
+ return punkClient->QueryInterface(IID_PPV_ARG(IMenuPopup, &m_subMenuChild));
}
HRESULT STDMETHODCALLTYPE CMenuBand::GetClient(IUnknown **ppunkClient)
{
// HACK, so I can test for a submenu in the DeskBar
- if (ppunkClient)
+ if (!ppunkClient)
+ return E_POINTER;
+ *ppunkClient = NULL;
+
+ if (m_subMenuChild)
{
- if (m_subMenuChild)
- *ppunkClient = m_subMenuChild;
- else
- *ppunkClient = NULL;
+ m_subMenuChild->AddRef();
+ *ppunkClient = m_subMenuChild;
}
+
return S_OK;
}
HRESULT CMenuBand::_MenuItemHotTrack(DWORD changeType)
{
+ CComPtr<CMenuBand> safeThis = this;
HRESULT hr;
if (m_dwFlags & SMINIT_VERTICAL)
switch (changeType)
{
case MPOS_EXECUTE:
+ {
+ CMenuToolbarBase * tb = m_hotBar;
+ int item = m_hotItem;
+ tb->PrepareExecuteItem(item);
if (m_subMenuParent)
{
m_subMenuParent->OnSelect(changeType);
}
- m_hotBar->ExecuteItem(m_hotItem);
+ TRACE("Menu closed, executing item...\n");
+ tb->ExecuteItem();
break;
-
+ }
case MPOS_SELECTLEFT:
if (m_parentBand && m_parentBand->_IsPopup()==S_FALSE)
return m_parentBand->_MenuItemHotTrack(VK_LEFT);