Reset hover item when mouse leaves wxAuiToolBar.

The hover item was not reset properly in some circumstances, do it now.

Also check for the item being disabled in SetHoverItem() itself instead of
doing it several times before calling it.

Closes #14189.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71210 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-04-16 14:33:35 +00:00
parent 365d11bec3
commit c22118113a

View File

@@ -1406,6 +1406,9 @@ bool wxAuiToolBar::SetFont(const wxFont& font)
void wxAuiToolBar::SetHoverItem(wxAuiToolBarItem* pitem)
{
if (pitem && (pitem->m_state & wxAUI_BUTTON_STATE_DISABLED))
pitem = NULL;
wxAuiToolBarItem* former_hover = NULL;
size_t i, count;
@@ -2580,6 +2583,11 @@ void wxAuiToolBar::OnLeftDown(wxMouseEvent& evt)
if(!GetEventHandler()->ProcessEvent(e) || e.GetSkipped())
CaptureMouse();
// Ensure hovered item is really ok, as mouse may have moved during
// event processing
wxPoint cursor_pos_after_evt = ScreenToClient(wxGetMousePosition());
SetHoverItem(FindToolByPosition(cursor_pos_after_evt.x, cursor_pos_after_evt.y));
DoIdleUpdate();
}
}
@@ -2591,11 +2599,9 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt)
SetPressedItem(NULL);
wxAuiToolBarItem* hitItem = FindToolByPosition(evt.GetX(), evt.GetY());
if (hitItem && !(hitItem->m_state & wxAUI_BUTTON_STATE_DISABLED))
{
SetHoverItem(hitItem);
}
wxAuiToolBarItem* hitItem;
hitItem = FindToolByPosition(evt.GetX(), evt.GetY());
SetHoverItem(hitItem);
if (m_dragging)
{
@@ -2636,6 +2642,12 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt)
ReleaseMouse();
GetEventHandler()->ProcessEvent(e);
// Ensure hovered item is really ok, as mouse may have moved during
// event processing
wxPoint cursor_pos_after_evt = ScreenToClient(wxGetMousePosition());
SetHoverItem(FindToolByPosition(cursor_pos_after_evt.x, cursor_pos_after_evt.y));
DoIdleUpdate();
}
else
@@ -2808,10 +2820,7 @@ void wxAuiToolBar::OnMotion(wxMouseEvent& evt)
}
else
{
if (hitItem && (hitItem->m_state & wxAUI_BUTTON_STATE_DISABLED))
SetHoverItem(NULL);
else
SetHoverItem(hitItem);
SetHoverItem(hitItem);
// tooltips handling
wxAuiToolBarItem* packingHitItem;