mirror of
https://github.com/reactos/reactos.git
synced 2025-07-05 03:41:21 +00:00
[RSHELL]
* CMenuBand: Send timer notifications for all items, so we can hide a previous submenu when the user hovers an item without submenu. * CMenuBand: Avoid a stack overflow in some versions of windows by relying on the stored value instead of asking for it in the middle of a changed event. CORE-7881 svn path=/branches/shell-experiments/; revision=62303
This commit is contained in:
parent
dcbd65feca
commit
d0f3e72c8e
1 changed files with 13 additions and 11 deletions
|
@ -676,9 +676,14 @@ LRESULT CMenuToolbarBase::SubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||||
case WM_TIMER:
|
case WM_TIMER:
|
||||||
if (wParam == TIMERID_HOTTRACK)
|
if (wParam == TIMERID_HOTTRACK)
|
||||||
{
|
{
|
||||||
m_menuBand->_OnPopupSubMenu(NULL, NULL, NULL);
|
|
||||||
PopupItem(m_hotItem);
|
|
||||||
KillTimer(hWnd, TIMERID_HOTTRACK);
|
KillTimer(hWnd, TIMERID_HOTTRACK);
|
||||||
|
|
||||||
|
m_menuBand->_OnPopupSubMenu(NULL, NULL, NULL);
|
||||||
|
|
||||||
|
if (HasSubMenu(m_hotItem) == S_OK)
|
||||||
|
{
|
||||||
|
PopupItem(m_hotItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,13 +700,10 @@ HRESULT CMenuToolbarBase::OnHotItemChange(const NMTBHOTITEM * hot)
|
||||||
m_menuBand->_MenuItemHotTrack(MPOS_CHILDTRACKING);
|
m_menuBand->_MenuItemHotTrack(MPOS_CHILDTRACKING);
|
||||||
}
|
}
|
||||||
else if (m_hotItem != hot->idNew)
|
else if (m_hotItem != hot->idNew)
|
||||||
{
|
|
||||||
if (HasSubMenu(hot->idNew) == S_OK)
|
|
||||||
{
|
{
|
||||||
DWORD elapsed = 0;
|
DWORD elapsed = 0;
|
||||||
SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &elapsed, 0);
|
SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &elapsed, 0);
|
||||||
SetTimer(m_hwnd, TIMERID_HOTTRACK, elapsed, NULL);
|
SetTimer(m_hwnd, TIMERID_HOTTRACK, elapsed, NULL);
|
||||||
}
|
|
||||||
|
|
||||||
m_hotItem = hot->idNew;
|
m_hotItem = hot->idNew;
|
||||||
m_menuBand->_OnHotItemChanged(this, m_hotItem);
|
m_menuBand->_OnHotItemChanged(this, m_hotItem);
|
||||||
|
@ -838,7 +840,7 @@ HRESULT CMenuToolbarBase::OnCommand(WPARAM wParam, LPARAM lParam, LRESULT *theRe
|
||||||
|
|
||||||
HRESULT CMenuToolbarBase::ChangeHotItem(DWORD dwSelectType)
|
HRESULT CMenuToolbarBase::ChangeHotItem(DWORD dwSelectType)
|
||||||
{
|
{
|
||||||
int prev = SendMessage(m_hwnd, TB_GETHOTITEM, 0, 0);
|
int prev = m_hotItem;
|
||||||
int index = -1;
|
int index = -1;
|
||||||
|
|
||||||
if (dwSelectType != 0xFFFFFFFF)
|
if (dwSelectType != 0xFFFFFFFF)
|
||||||
|
@ -896,7 +898,7 @@ HRESULT CMenuToolbarBase::ChangeHotItem(DWORD dwSelectType)
|
||||||
if (btn.dwData)
|
if (btn.dwData)
|
||||||
{
|
{
|
||||||
m_hotItem = btn.idCommand;
|
m_hotItem = btn.idCommand;
|
||||||
if (prev != index)
|
if (prev != m_hotItem)
|
||||||
{
|
{
|
||||||
SendMessage(m_hwnd, TB_SETHOTITEM, index, 0);
|
SendMessage(m_hwnd, TB_SETHOTITEM, index, 0);
|
||||||
return m_menuBand->_OnHotItemChanged(this, m_hotItem);
|
return m_menuBand->_OnHotItemChanged(this, m_hotItem);
|
||||||
|
@ -916,7 +918,7 @@ HRESULT CMenuToolbarBase::ChangeHotItem(DWORD dwSelectType)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_hotItem = -1;
|
m_hotItem = -1;
|
||||||
if (prev != index)
|
if (prev != m_hotItem)
|
||||||
{
|
{
|
||||||
SendMessage(m_hwnd, TB_SETHOTITEM, -1, 0);
|
SendMessage(m_hwnd, TB_SETHOTITEM, -1, 0);
|
||||||
m_menuBand->_OnHotItemChanged(NULL, -1);
|
m_menuBand->_OnHotItemChanged(NULL, -1);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue