X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/18a7376a34c90206ae218e524ec5c528d17227c0..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/osx/cocoa/combobox.mm diff --git a/src/osx/cocoa/combobox.mm b/src/osx/cocoa/combobox.mm index 379027674c..c410bd23c4 100644 --- a/src/osx/cocoa/combobox.mm +++ b/src/osx/cocoa/combobox.mm @@ -36,12 +36,6 @@ @end -@interface wxNSComboBox : NSComboBox -{ -} - -@end - @implementation wxNSComboBox + (void)initialize @@ -54,6 +48,33 @@ } } +- (void) dealloc +{ + [fieldEditor release]; + [super dealloc]; +} + +// Over-riding NSComboBox onKeyDown method doesn't work for key events. +// Ensure that we can use our own wxNSTextFieldEditor to catch key events. +// See windowWillReturnFieldEditor in nonownedwnd.mm. +// Key events will be caught and handled via wxNSTextFieldEditor onkey... +// methods in textctrl.mm. + +- (void) setFieldEditor:(wxNSTextFieldEditor*) editor +{ + if ( editor != fieldEditor ) + { + [editor retain]; + [fieldEditor release]; + fieldEditor = editor; + } +} + +- (wxNSTextFieldEditor*) fieldEditor +{ + return fieldEditor; +} + - (void)controlTextDidChange:(NSNotification *)aNotification { wxUnusedVar(aNotification); @@ -62,7 +83,7 @@ { wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); if ( wxpeer ) { - wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, wxpeer->GetId()); + wxCommandEvent event(wxEVT_TEXT, wxpeer->GetId()); event.SetEventObject( wxpeer ); event.SetString( static_cast(wxpeer)->GetValue() ); wxpeer->HandleWindowEvent( event ); @@ -76,11 +97,14 @@ wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); if ( impl && impl->ShouldSendEvents()) { - wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); + wxComboBox* wxpeer = static_cast(impl->GetWXPeer()); if ( wxpeer ) { - wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, wxpeer->GetId()); + const int sel = wxpeer->GetSelection(); + + wxCommandEvent event(wxEVT_COMBOBOX, wxpeer->GetId()); event.SetEventObject( wxpeer ); - event.SetInt( static_cast(wxpeer)->GetSelection() ); + event.SetInt( sel ); + event.SetString( wxpeer->GetString(sel) ); // For some reason, wxComboBox::GetValue will not return the newly selected item // while we're inside this callback, so use AddPendingEvent to make sure // GetValue() returns the right value.