int len = [*partialStringPtr length];
if ( maxLength > 0 && len > maxLength )
{
- // TODO wxEVT_COMMAND_TEXT_MAXLEN
+ // TODO wxEVT_TEXT_MAXLEN
return NO;
}
return YES;
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
if ( impl )
{
- impl->DoNotifyFocusEvent( false, NULL );
+ NSResponder * responder = wxNonOwnedWindowCocoaImpl::GetNextFirstResponder();
+ NSView* otherView = [responder isKindOfClass:[NSView class]] ? (NSView*)responder : nil;
+
+ wxWidgetImpl* otherWindow = impl->FindFromWXWidget(otherView);
+ impl->DoNotifyFocusEvent( false, otherWindow );
}
}
wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+ wxCommandEvent event(wxEVT_BUTTON, def->GetId() );
event.SetEventObject(def);
def->Command(event);
handled = YES;
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
if ( impl )
{
- impl->DoNotifyFocusEvent( false, NULL );
+ NSResponder * responder = wxNonOwnedWindowCocoaImpl::GetNextFirstResponder();
+ NSView* otherView = [responder isKindOfClass:[NSView class]] ? (NSView*)responder : nil;
+
+ wxWidgetImpl* otherWindow = impl->FindFromWXWidget(otherView);
+ impl->DoNotifyFocusEvent( false, otherWindow );
}
}
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
if ( impl )
{
- impl->DoNotifyFocusEvent( false, NULL );
+ wxNSTextFieldControl* timpl = dynamic_cast<wxNSTextFieldControl*>(impl);
+ if ( fieldEditor )
+ {
+ NSRange range = [fieldEditor selectedRange];
+ timpl->SetInternalSelection(range.location, range.location + range.length);
+ }
+
+ NSResponder * responder = wxNonOwnedWindowCocoaImpl::GetNextFirstResponder();
+ NSView* otherView = [responder isKindOfClass:[NSView class]] ? (NSView*)responder : nil;
+
+ wxWidgetImpl* otherWindow = impl->FindFromWXWidget(otherView);
+ impl->DoNotifyFocusEvent( false, otherWindow );
}
}
@end
{
[editor setSelectedRange:NSMakeRange(from, to-from)];
}
- else
- {
- m_selStart = from;
- m_selEnd = to;
- }
+
+ // the editor might still be in existence, but we might be already passed our 'focus lost' storage
+ // of the selection, so make sure we copy this
+ m_selStart = from;
+ m_selEnd = to;
}
void wxNSTextFieldControl::WriteText(const wxString& str)
wxWindow* wxpeer = (wxWindow*) GetWXPeer();
if ( wxpeer && (wxpeer->GetWindowStyle() & wxTE_PROCESS_ENTER) )
{
- wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId());
+ wxCommandEvent event(wxEVT_TEXT_ENTER, wxpeer->GetId());
event.SetEventObject( wxpeer );
event.SetString( GetTextEntry()->GetValue() );
wxpeer->HandleWindowEvent( event );
}
}
+void wxNSTextFieldControl::SetInternalSelection( long from , long to )
+{
+ m_selStart = from;
+ m_selEnd = to;
+}
+
// as becoming first responder on a window - triggers a resign on the same control, we have to avoid
// the resign notification writing back native selection values before we can set our own
{
NSText* editor = [m_textField currentEditor];
if ( editor )
+ {
+ long textLength = [[m_textField stringValue] length];
+ m_selStart = wxMin(textLength,wxMax(m_selStart,0)) ;
+ m_selEnd = wxMax(0,wxMin(textLength,m_selEnd)) ;
+
[editor setSelectedRange:NSMakeRange(m_selStart, m_selEnd-m_selStart)];
+ }
}
return retval;
}
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
wxWidgetCocoaImpl* c = NULL;
- if ( style & wxTE_MULTILINE || style & wxTE_RICH || style & wxTE_RICH2 )
+ if ( style & wxTE_MULTILINE )
{
wxNSTextScrollView* v = nil;
v = [[wxNSTextScrollView alloc] initWithFrame:r];