X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9e565667d0f29605c948ad6e742310798e3b2d0d..e6a277032d99841a845192cddd62a2c6810122f2:/src/generic/spinctlg.cpp diff --git a/src/generic/spinctlg.cpp b/src/generic/spinctlg.cpp index 52e28ff5f7..f602d8ded5 100644 --- a/src/generic/spinctlg.cpp +++ b/src/generic/spinctlg.cpp @@ -65,7 +65,11 @@ class wxSpinCtrlTextGeneric : public wxTextCtrl public: wxSpinCtrlTextGeneric(wxSpinCtrlGenericBase *spin, const wxString& value, long style=0) : wxTextCtrl(spin->GetParent(), wxID_ANY, value, wxDefaultPosition, wxDefaultSize, - style & wxALIGN_MASK) + // This is tricky: we want to honour any alignment flags + // but not wxALIGN_CENTER_VERTICAL because it's the same + // as wxTE_PASSWORD and we definitely don't want to show + // asterisks in spin control. + style & (wxALIGN_MASK | wxTE_PROCESS_ENTER) & ~wxTE_PASSWORD) { m_spin = spin; @@ -73,7 +77,7 @@ public: SetSizeHints(wxDefaultCoord, wxDefaultCoord); } - virtual ~wxSpinCtrlTextGeneric() + virtual ~wxSpinCtrlTextGeneric() wxNOEXCEPT { // MSW sends extra kill focus event on destroy if (m_spin) @@ -84,8 +88,16 @@ public: void OnChar( wxKeyEvent &event ) { - if (m_spin) - m_spin->ProcessWindowEvent(event); + if ( !m_spin->ProcessWindowEvent(event) ) + event.Skip(); + } + + void OnTextEvent(wxCommandEvent& event) + { + wxCommandEvent eventCopy(event); + eventCopy.SetEventObject(m_spin); + eventCopy.SetId(m_spin->GetId()); + m_spin->ProcessWindowEvent(eventCopy); } void OnKillFocus(wxFocusEvent& event) @@ -105,6 +117,15 @@ private: BEGIN_EVENT_TABLE(wxSpinCtrlTextGeneric, wxTextCtrl) EVT_CHAR(wxSpinCtrlTextGeneric::OnChar) + // Forward the text events to wxSpinCtrl itself adjusting them slightly in + // the process. + EVT_TEXT(wxID_ANY, wxSpinCtrlTextGeneric::OnTextEvent) + + // And we need to forward this one too as wxSpinCtrl is supposed to + // generate it if wxTE_PROCESS_ENTER is used with it (and if it isn't, + // we're never going to get EVT_TEXT_ENTER in the first place). + EVT_TEXT_ENTER(wxID_ANY, wxSpinCtrlTextGeneric::OnTextEvent) + EVT_KILL_FOCUS(wxSpinCtrlTextGeneric::OnKillFocus) END_EVENT_TABLE()