X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6f07c007a54c53c1561944f139254e8afa1477cc..efafcdca4aceec5409c1e07354f2026fc9c27a01:/src/osx/cocoa/combobox.mm diff --git a/src/osx/cocoa/combobox.mm b/src/osx/cocoa/combobox.mm index d98f0a331e..f0d4ea6677 100644 --- a/src/osx/cocoa/combobox.mm +++ b/src/osx/cocoa/combobox.mm @@ -4,7 +4,7 @@ // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: combobox.mm 54129 2008-06-11 19:30:52Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,6 +14,7 @@ #if wxUSE_COMBOBOX #include "wx/combobox.h" +#include "wx/evtloop.h" #ifndef WX_PRECOMP #include "wx/menu.h" @@ -24,6 +25,17 @@ // work in progress +@interface wxNSTableDataSource : NSObject wxOSX_10_6_AND_LATER() +{ + wxNSComboBoxControl* impl; +} + +- (NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox; +- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)index; + +@end + + @interface wxNSComboBox : NSComboBox { } @@ -64,15 +76,25 @@ wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); if ( impl && impl->ShouldSendEvents()) { - wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); + wxComboBox* wxpeer = static_cast(impl->GetWXPeer()); if ( wxpeer ) { + const int sel = wxpeer->GetSelection(); + wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, 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. + wxEventLoop* const loop = (wxEventLoop*) wxEventLoopBase::GetActive(); + if ( loop ) + loop->OSXUseLowLevelWakeup(true); + wxpeer->GetEventHandler()->AddPendingEvent( event ); + + if ( loop ) + loop->OSXUseLowLevelWakeup(false); } } } @@ -144,16 +166,32 @@ wxString wxNSComboBoxControl::GetStringAtIndex(int pos) const int wxNSComboBoxControl::FindString(const wxString& text) const { - int result = [m_comboBox indexOfItemWithObjectValue:wxCFStringRef( text , m_wxPeer->GetFont().GetEncoding() ).AsNSString()]; - if (result == NSNotFound) + NSInteger nsresult = [m_comboBox indexOfItemWithObjectValue:wxCFStringRef( text , m_wxPeer->GetFont().GetEncoding() ).AsNSString()]; + + int result; + if (nsresult == NSNotFound) result = wxNOT_FOUND; + else + result = (int) nsresult; return result; } +void wxNSComboBoxControl::Popup() +{ + id ax = NSAccessibilityUnignoredDescendant(m_comboBox); + [ax accessibilitySetValue: [NSNumber numberWithBool: YES] forAttribute: NSAccessibilityExpandedAttribute]; +} + +void wxNSComboBoxControl::Dismiss() +{ + id ax = NSAccessibilityUnignoredDescendant(m_comboBox); + [ax accessibilitySetValue: [NSNumber numberWithBool: NO] forAttribute: NSAccessibilityExpandedAttribute]; +} + wxWidgetImplType* wxWidgetImpl::CreateComboBox( wxComboBox* wxpeer, wxWindowMac* WXUNUSED(parent), wxWindowID WXUNUSED(id), - wxMenu* menu, + wxMenu* WXUNUSED(menu), const wxPoint& pos, const wxSize& size, long style,