From e567904ae6f502226659fac12f22b6a18beb2179 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 6 Apr 2010 18:46:29 +0000 Subject: [PATCH] Fix text text changed events sending in OS X combo box and text control. Don't duplicate needlessly wxTextEntry functionality in wxTextCtrl. Don't clear the combobox text entry part twice in wxComboBox::DoClear(), it is supposed to only clear the item container contents as the base class Clear() already calls wxTextEntry::Clear(). Do send text updated events from wxTextEntry itself as it applies to wxComboBox just as well as to wxTextCtrl. The unit tests now pass under wxOSX/Cocoa, not breaking them again would be appreciated. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63881 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/textctrl.h | 15 +++++---------- src/osx/combobox_osx.cpp | 4 ++-- src/osx/textctrl_osx.cpp | 21 --------------------- src/osx/textentry_osx.cpp | 6 ++++++ 4 files changed, 13 insertions(+), 33 deletions(-) diff --git a/include/wx/osx/textctrl.h b/include/wx/osx/textctrl.h index 85583505fd..1116b4def8 100644 --- a/include/wx/osx/textctrl.h +++ b/include/wx/osx/textctrl.h @@ -100,10 +100,6 @@ public: virtual void Cut(); virtual void Paste(); - virtual void WriteText(const wxString& text); - virtual void Clear(); - virtual void Remove(long from, long to); - // Implementation // -------------- virtual void Command(wxCommandEvent& event); @@ -148,17 +144,16 @@ protected: // flag is set to true when the user edits the controls contents bool m_dirty; - virtual void EnableTextChangedEvents(bool enable) + virtual void EnableTextChangedEvents(bool WXUNUSED(enable)) { - m_triggerUpdateEvents = enable; + // nothing to do here as the events are never generated when we change + // the controls value programmatically anyhow } - bool m_triggerUpdateEvents ; - private : - wxMenu *m_privateContextMenu; + wxMenu *m_privateContextMenu; - DECLARE_EVENT_TABLE() + DECLARE_EVENT_TABLE() }; #endif // _WX_TEXTCTRL_H_ diff --git a/src/osx/combobox_osx.cpp b/src/osx/combobox_osx.cpp index a69e26cf8b..214bdbdff4 100644 --- a/src/osx/combobox_osx.cpp +++ b/src/osx/combobox_osx.cpp @@ -147,7 +147,6 @@ void wxComboBox::DoDeleteOneItem(unsigned int n) void wxComboBox::DoClear() { GetComboPeer()->Clear(); - SetValue(wxEmptyString); } void wxComboBox::GetSelection(long *from, long *to) const @@ -204,7 +203,8 @@ void wxComboBox::SetString(unsigned int n, const wxString& s) void wxComboBox::EnableTextChangedEvents(bool WXUNUSED(enable)) { - wxFAIL_MSG("Method Not Implemented."); + // nothing to do here, events are never generated when we change the + // control value programmatically anyhow by Cocoa } bool wxComboBox::OSXHandleClicked( double WXUNUSED(timestampsec) ) diff --git a/src/osx/textctrl_osx.cpp b/src/osx/textctrl_osx.cpp index 4021966024..e7e82f21c2 100644 --- a/src/osx/textctrl_osx.cpp +++ b/src/osx/textctrl_osx.cpp @@ -79,7 +79,6 @@ void wxTextCtrl::Init() m_dirty = false; m_privateContextMenu = NULL; - m_triggerUpdateEvents = true ; } wxTextCtrl::~wxTextCtrl() @@ -289,26 +288,6 @@ wxString wxTextCtrl::GetLineText(long lineNo) const return GetTextPeer()->GetLineText(lineNo) ; } -void wxTextCtrl::Remove(long from, long to) -{ - wxTextEntry::Remove(from, to); - if ( m_triggerUpdateEvents ) - SendTextUpdatedEvent(); -} - -void wxTextCtrl::WriteText(const wxString& str) -{ - wxTextEntry::WriteText( str ) ; - if ( m_triggerUpdateEvents ) - SendTextUpdatedEvent(); -} - -void wxTextCtrl::Clear() -{ - wxTextEntry::Clear() ; - SendTextUpdatedEvent(); -} - void wxTextCtrl::Copy() { if (CanCopy()) diff --git a/src/osx/textentry_osx.cpp b/src/osx/textentry_osx.cpp index 3e2ca4f22d..2d9d79a0e2 100644 --- a/src/osx/textentry_osx.cpp +++ b/src/osx/textentry_osx.cpp @@ -148,6 +148,8 @@ wxTextPos wxTextEntry::GetLastPosition() const void wxTextEntry::Remove(long from, long to) { GetTextPeer()->Remove( from , to ) ; + + SendTextUpdatedEventIfAllowed(); } void wxTextEntry::SetSelection(long from, long to) @@ -158,11 +160,15 @@ void wxTextEntry::SetSelection(long from, long to) void wxTextEntry::WriteText(const wxString& str) { GetTextPeer()->WriteText( str ) ; + + SendTextUpdatedEventIfAllowed(); } void wxTextEntry::Clear() { GetTextPeer()->Clear() ; + + SendTextUpdatedEventIfAllowed(); } bool wxTextEntry::IsEditable() const