Add association between wxOSX wxTextWidgetImpl and wxTextEntry.
This allows to always find the correct wxTextEntry to use in the implementation of text-related widgets without using any casts. Notably, the wrong up-cast of wxWindow to wxTextCtrl in wxNSTextFieldControl::controlAction() which resulted in a crash when the window was actually a wxComboBox can now be fixed. Closes #12284. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65129 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -291,7 +291,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 +513,21 @@ 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)
|
||||
{
|
||||
}
|
||||
|
||||
wxNSTextFieldControl::wxNSTextFieldControl(wxWindow *wxPeer,
|
||||
wxTextEntry *entry,
|
||||
WXWidget w)
|
||||
: wxWidgetCocoaImpl(wxPeer, w),
|
||||
wxTextWidgetImpl(entry)
|
||||
{
|
||||
}
|
||||
|
||||
void wxNSTextFieldControl::Init(WXWidget w)
|
||||
{
|
||||
NSTextField wxOSX_10_6_AND_LATER(<NSTextFieldDelegate>) *tf = (NSTextField*) w;
|
||||
m_textField = tf;
|
||||
@@ -650,7 +666,7 @@ void wxNSTextFieldControl::controlAction(WXWidget WXUNUSED(slf),
|
||||
{
|
||||
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, wxpeer->GetId());
|
||||
event.SetEventObject( wxpeer );
|
||||
event.SetString( static_cast<wxTextCtrl*>(wxpeer)->GetValue() );
|
||||
event.SetString( GetTextEntry()->GetValue() );
|
||||
wxpeer->HandleWindowEvent( event );
|
||||
}
|
||||
}
|
||||
@@ -694,7 +710,7 @@ wxWidgetImplType* wxWidgetImpl::CreateTextControl( wxTextCtrl* wxpeer,
|
||||
[v setBezeled:NO];
|
||||
[v setBordered:NO];
|
||||
|
||||
c = new wxNSTextFieldControl( wxpeer, v );
|
||||
c = new wxNSTextFieldControl( wxpeer, wxpeer, v );
|
||||
}
|
||||
|
||||
return c;
|
||||
|
Reference in New Issue
Block a user