In wxComboPopupEvtHandler::OnMouseEvent(), when need to relay event to drop-down button, call HandleButtonMouseEvent() directly, if possible. This is less confusing for the platform-specific wxComboCtrl implementations, and fixes issue where the drop-down button could remain in pressed state after the mouse button was lifted.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64457 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jaakko Salli 2010-06-01 15:01:59 +00:00
parent 063155781d
commit db3d75435a
2 changed files with 13 additions and 4 deletions

View File

@ -142,6 +142,7 @@ struct wxComboCtrlFeatures
class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxControl
{
friend class wxComboPopup;
friend class wxComboPopupEvtHandler;
public:
// ctors and such
wxComboCtrlBase() : wxControl() { Init(); }

View File

@ -760,6 +760,12 @@ void wxComboPopupEvtHandler::OnMouseEvent( wxMouseEvent& event )
// block this one)
m_blockEventsToPopup = false;
event.Skip(false);
// Also, this button press was (probably) used to display
// the popup, so relay it back to the drop-down button
// (which supposedly originated it). This is necessary to
// refresh it properly.
relayToButton = true;
}
}
else if ( m_blockEventsToPopup )
@ -789,12 +795,14 @@ void wxComboPopupEvtHandler::OnMouseEvent( wxMouseEvent& event )
if ( relayToButton )
{
wxWindow* eventSink = m_combo;
wxWindow* btn = m_combo->GetButton();
if ( btn )
eventSink = btn;
eventSink->GetEventHandler()->ProcessEvent(event);
btn->GetEventHandler()->ProcessEvent(event);
else
// Bypass the event handling mechanism. Using it would be
// confusing for the platform-specific wxComboCtrl
// implementations.
m_combo->HandleButtonMouseEvent(event, 0);
}
}