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,12 +871,12 @@ 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