X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4a49fa24c94e868755c8bfa406190150a5249425..b622441a8dc47fe33f5677e2baf0253e082bfe4b:/src/osx/cocoa/textctrl.mm?ds=sidebyside diff --git a/src/osx/cocoa/textctrl.mm b/src/osx/cocoa/textctrl.mm index ced1a2369d..6106bedc70 100644 --- a/src/osx/cocoa/textctrl.mm +++ b/src/osx/cocoa/textctrl.mm @@ -253,29 +253,40 @@ protected : impl->controlTextDidChange(); } -typedef BOOL (*wxOSX_insertNewlineHandlerPtr)(NSView* self, SEL _cmd, NSControl *control, NSTextView* textView, SEL commandSelector); - - (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector { wxUnusedVar(textView); wxUnusedVar(control); - if (commandSelector == @selector(insertNewline:)) + + BOOL handled = NO; + + // send back key events wx' common code knows how to handle + + wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); + if ( impl ) { - wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self ); - if ( impl ) + wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); + if ( wxpeer ) { - wxWindow* wxpeer = (wxWindow*) impl->GetWXPeer(); - if ( wxpeer && wxpeer->GetWindowStyle() & wxTE_PROCESS_ENTER ) + if (commandSelector == @selector(insertNewline:)) + { + [textView insertNewlineIgnoringFieldEditor:self]; + handled = YES; + } + else if ( commandSelector == @selector(insertTab:)) + { + [textView insertTabIgnoringFieldEditor:self]; + handled = YES; + } + else if ( commandSelector == @selector(insertBacktab:)) { - wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId()); - event.SetEventObject( wxpeer ); - event.SetString( static_cast(wxpeer)->GetValue() ); - wxpeer->HandleWindowEvent( event ); + [textView insertTabIgnoringFieldEditor:self]; + handled = YES; } } } - - return NO; + + return handled; } - (void)controlTextDidEndEditing:(NSNotification *)aNotification @@ -291,7 +302,9 @@ typedef BOOL (*wxOSX_insertNewlineHandlerPtr)(NSView* self, SEL _cmd, NSControl // wxNSTextViewControl -wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w ) : wxWidgetCocoaImpl(wxPeer, w) +wxNSTextViewControl::wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w ) + : wxWidgetCocoaImpl(wxPeer, w), + wxTextWidgetImpl(wxPeer) { wxNSTextScrollView* sv = (wxNSTextScrollView*) w; m_scrollView = sv; @@ -511,7 +524,23 @@ wxSize wxNSTextViewControl::GetBestSize() const // wxNSTextFieldControl -wxNSTextFieldControl::wxNSTextFieldControl( wxWindow *wxPeer, WXWidget w ) : wxWidgetCocoaImpl(wxPeer, w) +wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *text, WXWidget w ) + : wxWidgetCocoaImpl(text, w), + wxTextWidgetImpl(text) +{ + Init(w); +} + +wxNSTextFieldControl::wxNSTextFieldControl(wxWindow *wxPeer, + wxTextEntry *entry, + WXWidget w) + : wxWidgetCocoaImpl(wxPeer, w), + wxTextWidgetImpl(entry) +{ + Init(w); +} + +void wxNSTextFieldControl::Init(WXWidget w) { NSTextField wxOSX_10_6_AND_LATER() *tf = (NSTextField*) w; m_textField = tf; @@ -650,7 +679,7 @@ void wxNSTextFieldControl::controlAction(WXWidget WXUNUSED(slf), { wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId()); event.SetEventObject( wxpeer ); - event.SetString( static_cast(wxpeer)->GetValue() ); + event.SetString( GetTextEntry()->GetValue() ); wxpeer->HandleWindowEvent( event ); } } @@ -690,11 +719,17 @@ wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer, // FIXME: How can we remove the native control's border? // setBordered is separate from the text ctrl's border. } + + NSTextFieldCell* cell = [v cell]; + [cell setScrollable:YES]; + // TODO: Remove if we definitely are sure, it's not needed + // as setting scrolling to yes, should turn off any wrapping + // [cell setLineBreakMode:NSLineBreakByClipping]; [v setBezeled:NO]; [v setBordered:NO]; - c = new wxNSTextFieldControl( wxpeer, v ); + c = new wxNSTextFieldControl( wxpeer, wxpeer, v ); } return c;