adding some additional fixes for programmatic selection handling
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73053 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -48,6 +48,8 @@ public :
|
|||||||
virtual bool becomeFirstResponder(WXWidget slf, void *_cmd);
|
virtual bool becomeFirstResponder(WXWidget slf, void *_cmd);
|
||||||
virtual bool resignFirstResponder(WXWidget slf, void *_cmd);
|
virtual bool resignFirstResponder(WXWidget slf, void *_cmd);
|
||||||
|
|
||||||
|
virtual void SetInternalSelection( long from , long to );
|
||||||
|
|
||||||
protected :
|
protected :
|
||||||
NSTextField* m_textField;
|
NSTextField* m_textField;
|
||||||
long m_selStart;
|
long m_selStart;
|
||||||
|
@@ -499,6 +499,13 @@ NSView* wxMacEditHelper::ms_viewCurrentlyEdited = nil;
|
|||||||
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
|
wxWidgetCocoaImpl* impl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
|
||||||
if ( impl )
|
if ( impl )
|
||||||
{
|
{
|
||||||
|
wxNSTextFieldControl* timpl = dynamic_cast<wxNSTextFieldControl*>(impl);
|
||||||
|
if ( fieldEditor )
|
||||||
|
{
|
||||||
|
NSRange range = [fieldEditor selectedRange];
|
||||||
|
timpl->SetInternalSelection(range.location, range.location + range.length);
|
||||||
|
}
|
||||||
|
|
||||||
impl->DoNotifyFocusEvent( false, NULL );
|
impl->DoNotifyFocusEvent( false, NULL );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -864,11 +871,11 @@ void wxNSTextFieldControl::SetSelection( long from , long to )
|
|||||||
{
|
{
|
||||||
[editor setSelectedRange:NSMakeRange(from, to-from)];
|
[editor setSelectedRange:NSMakeRange(from, to-from)];
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
// 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_selStart = from;
|
||||||
m_selEnd = to;
|
m_selEnd = to;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNSTextFieldControl::WriteText(const wxString& str)
|
void wxNSTextFieldControl::WriteText(const wxString& str)
|
||||||
@@ -912,6 +919,12 @@ void wxNSTextFieldControl::controlAction(WXWidget WXUNUSED(slf),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
// 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
|
// the resign notification writing back native selection values before we can set our own
|
||||||
|
|
||||||
@@ -926,8 +939,14 @@ bool wxNSTextFieldControl::becomeFirstResponder(WXWidget slf, void *_cmd)
|
|||||||
{
|
{
|
||||||
NSText* editor = [m_textField currentEditor];
|
NSText* editor = [m_textField currentEditor];
|
||||||
if ( editor )
|
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)];
|
[editor setSelectedRange:NSMakeRange(m_selStart, m_selEnd-m_selStart)];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user