BEGIN_EVENT_TABLE(wxComboPopupWindowEvtHandler, wxEvtHandler)
EVT_KEY_DOWN(wxComboPopupWindowEvtHandler::OnKeyEvent)
EVT_KEY_UP(wxComboPopupWindowEvtHandler::OnKeyEvent)
+ EVT_CHAR(wxComboPopupWindowEvtHandler::OnKeyEvent)
#if USES_GENERICTLW
EVT_ACTIVATE(wxComboPopupWindowEvtHandler::OnActivate)
#endif
wxWindowList children = m_combo->GetPopupWindow()->GetChildren();
wxWindowList::iterator node = children.begin();
wxWindow* child = (wxWindow*)*node;
- child->GetEventHandler()->AddPendingEvent(event);
+ child->GetEventHandler()->ProcessEvent(event);
}
#if USES_GENERICTLW
event.Skip();
}
+void wxComboPopup::OnComboCharEvent( wxKeyEvent& event )
+{
+ event.Skip();
+}
+
void wxComboPopup::OnComboDoubleClick()
{
}
EVT_IDLE(wxComboCtrlBase::OnIdleEvent)
//EVT_BUTTON(wxID_ANY,wxComboCtrlBase::OnButtonClickEvent)
EVT_KEY_DOWN(wxComboCtrlBase::OnKeyEvent)
+ EVT_CHAR(wxComboCtrlBase::OnCharEvent)
EVT_TEXT_ENTER(wxID_ANY,wxComboCtrlBase::OnTextCtrlEvent)
EVT_SYS_COLOUR_CHANGED(wxComboCtrlBase::OnSysColourChanged)
END_EVENT_TABLE()
}
}
}
- else
- if ( IsPopupShown() )
+ else if ( evtType == wxEVT_MOUSEWHEEL )
{
- // relay (some) mouse events to the popup
- if ( evtType == wxEVT_MOUSEWHEEL )
- m_popup->GetEventHandler()->AddPendingEvent(event);
+ if ( IsPopupShown() )
+ {
+ // relay (some) mouse events to the popup
+ m_popup->GetEventHandler()->ProcessEvent(event);
+ }
+ else if ( event.GetWheelAxis() == 0 &&
+ event.GetWheelRotation() != 0 &&
+ event.GetModifiers() == 0 )
+ {
+ // Translate mousewheel actions into key up/down. This is
+ // the simplest way of getting native behaviour: scrolling the
+ // wheel moves selection up/down by one item.
+ wxKeyEvent kevent(wxEVT_KEY_DOWN);
+ kevent.m_keyCode = event.GetWheelRotation() > 0
+ ? WXK_UP
+ : WXK_DOWN;
+ GetEventHandler()->ProcessEvent(kevent);
+ }
+ else
+ {
+ event.Skip();
+ }
}
else if ( evtType )
+ {
event.Skip();
+ }
}
void wxComboCtrlBase::OnKeyEvent(wxKeyEvent& event)
if ( IsPopupShown() )
{
// pass it to the popped up control
- GetPopupControl()->GetControl()->GetEventHandler()->AddPendingEvent(event);
+ GetPopupControl()->GetControl()->GetEventHandler()->ProcessEvent(event);
}
else // no popup
{
}
}
+void wxComboCtrlBase::OnCharEvent(wxKeyEvent& event)
+{
+ if ( IsPopupShown() )
+ {
+ // pass it to the popped up control
+ GetPopupControl()->GetControl()->GetEventHandler()->ProcessEvent(event);
+ }
+ else // no popup
+ {
+ wxComboPopup* popupInterface = GetPopupControl();
+ if ( popupInterface )
+ {
+ popupInterface->OnComboCharEvent(event);
+ }
+ else
+ {
+ event.Skip();
+ }
+ }
+}
+
void wxComboCtrlBase::OnFocusEvent( wxFocusEvent& event )
{
if ( event.GetEventType() == wxEVT_SET_FOCUS )