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:
@@ -470,7 +470,9 @@ static pascal OSStatus wxMacUnicodeTextControlEventHandler( EventHandlerCallRef
|
||||
|
||||
DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacUnicodeTextControlEventHandler )
|
||||
|
||||
wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxTextCtrl *wxPeer ) : wxMacControl( wxPeer )
|
||||
wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxTextCtrl *wxPeer )
|
||||
: wxMacControl( wxPeer ),
|
||||
wxTextWidgetImpl( wxPeer )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -478,7 +480,8 @@ wxMacUnicodeTextControl::wxMacUnicodeTextControl( wxTextCtrl *wxPeer,
|
||||
const wxString& str,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size, long style )
|
||||
: wxMacControl( wxPeer )
|
||||
: wxMacControl( wxPeer ),
|
||||
wxTextWidgetImpl( wxPeer )
|
||||
{
|
||||
m_font = wxPeer->GetFont() ;
|
||||
m_windowStyle = style ;
|
||||
@@ -707,7 +710,8 @@ protected :
|
||||
} ;
|
||||
|
||||
wxMacMLTEControl::wxMacMLTEControl( wxTextCtrl *peer )
|
||||
: wxMacControl( peer )
|
||||
: wxMacControl( peer ),
|
||||
wxTextWidgetImpl( peer )
|
||||
{
|
||||
SetNeedsFocusRect( true ) ;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,8 @@
|
||||
}
|
||||
@end
|
||||
|
||||
wxNSComboBoxControl::wxNSComboBoxControl( wxWindow *wxPeer, WXWidget w ) : wxNSTextFieldControl(wxPeer, w)
|
||||
wxNSComboBoxControl::wxNSComboBoxControl( wxComboBox *wxPeer, WXWidget w )
|
||||
: wxNSTextFieldControl(wxPeer, wxPeer, w)
|
||||
{
|
||||
m_comboBox = (NSComboBox*)w;
|
||||
}
|
||||
@@ -137,7 +138,7 @@ int wxNSComboBoxControl::FindString(const wxString& text) const
|
||||
return result;
|
||||
}
|
||||
|
||||
wxWidgetImplType* wxWidgetImpl::CreateComboBox( wxWindowMac* wxpeer,
|
||||
wxWidgetImplType* wxWidgetImpl::CreateComboBox( wxComboBox* wxpeer,
|
||||
wxWindowMac* WXUNUSED(parent),
|
||||
wxWindowID WXUNUSED(id),
|
||||
wxMenu* menu,
|
||||
@@ -183,4 +184,4 @@ wxSize wxComboBox::DoGetBestSize() const
|
||||
return wxSize( lbWidth, lbHeight );
|
||||
}
|
||||
|
||||
#endif // wxUSE_COMBOBOX
|
||||
#endif // wxUSE_COMBOBOX
|
||||
|
||||
@@ -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