X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d99937cdd8f235561c1f5358478878111826a317..7e99eddf643ae67d880de7a4dedf98b98c58dafe:/src/mac/carbon/combobox.cpp diff --git a/src/mac/carbon/combobox.cpp b/src/mac/carbon/combobox.cpp index a3de1918ca..22924613ea 100644 --- a/src/mac/carbon/combobox.cpp +++ b/src/mac/carbon/combobox.cpp @@ -14,6 +14,7 @@ #endif #include "wx/combobox.h" +#include "wx/button.h" #include "wx/menu.h" #include "wx/mac/uma.h" @@ -57,13 +58,63 @@ public: } protected: - void OnTextChange( wxCommandEvent& event ) + void OnChar( wxKeyEvent& event ) { - wxString s = GetValue(); + if ( event.KeyCode() == WXK_RETURN ) + { + wxString value = GetValue(); + + if ( m_cb->GetCount() == 0 ) + { + // make Enter generate "selected" event if there is only one item + // in the combobox - without it, it's impossible to select it at + // all! + wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() ); + event.SetInt( 0 ); + event.SetString( value ); + event.SetEventObject( m_cb ); + m_cb->GetEventHandler()->ProcessEvent( event ); + } + else + { + // add the item to the list if it's not there yet + if ( m_cb->FindString(value) == wxNOT_FOUND ) + { + m_cb->Append(value); + m_cb->SetStringSelection(value); + + // and generate the selected event for it + wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() ); + event.SetInt( m_cb->GetCount() - 1 ); + event.SetString( value ); + event.SetEventObject( m_cb ); + m_cb->GetEventHandler()->ProcessEvent( event ); + } + + // This will invoke the dialog default action, such + // as the clicking the default button. + + wxWindow *parent = GetParent(); + while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) { + parent = parent->GetParent() ; + } + if ( parent && parent->GetDefaultItem() ) + { + wxButton *def = wxDynamicCast(parent->GetDefaultItem(), + wxButton); + if ( def && def->IsEnabled() ) + { + wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() ); + event.SetEventObject(def); + def->Command(event); + return ; + } + } + + return; + } + } - if (!s.IsEmpty()) - m_cb->DelegateTextChanged( s ); - event.Skip(); } @@ -74,7 +125,7 @@ private: }; BEGIN_EVENT_TABLE(wxComboBoxText, wxTextCtrl) - EVT_TEXT(-1, wxComboBoxText::OnTextChange) + EVT_CHAR( wxComboBoxText::OnChar) END_EVENT_TABLE() class wxComboBoxChoice : public wxChoice @@ -92,6 +143,11 @@ protected: wxString s = e.GetString(); m_cb->DelegateChoice( s ); + wxCommandEvent event2(wxEVT_COMMAND_COMBOBOX_SELECTED, m_cb->GetId() ); + event2.SetInt(m_cb->GetSelection()); + event2.SetEventObject(m_cb); + event2.SetString(m_cb->GetStringSelection()); + m_cb->ProcessCommand(event2); } private: @@ -187,6 +243,7 @@ void wxComboBox::SetFocus() void wxComboBox::DelegateTextChanged( const wxString& value ) { + SetStringSelection( value ); } @@ -205,10 +262,6 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id, const wxValidator& validator, const wxString& name) { - - Rect bounds ; - Str255 title ; - if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style , wxDefaultValidator, name) ) {