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:
Vadim Zeitlin
2010-07-28 11:27:01 +00:00
parent f50d84586a
commit c072b9ec8a
5 changed files with 58 additions and 14 deletions

View File

@@ -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 ) ;
}

View File

@@ -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

View File

@@ -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;