From: Stefan Csomor Date: Mon, 21 Jun 2010 07:50:12 +0000 (+0000) Subject: text updated events were not always sent out correctly, fixes #11462 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/4275201ba367f20086d88402f092709041436e34 text updated events were not always sent out correctly, fixes #11462 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64662 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/textentry.h b/include/wx/textentry.h index 3a240d1a1a..99018a9488 100644 --- a/include/wx/textentry.h +++ b/include/wx/textentry.h @@ -175,6 +175,14 @@ public: } + // generate the wxEVT_COMMAND_TEXT_UPDATED event for this window if the + // events are not currently disabled + void SendTextUpdatedEventIfAllowed() + { + if ( EventsAllowed() ) + SendTextUpdatedEvent(); + } + // this function is provided solely for the purpose of forwarding text // change notifications state from one control to another, e.g. it can be // used by a wxComboBox which derives from wxTextEntry if it delegates all @@ -239,15 +247,6 @@ protected: friend class EventsSuppressor; - // generate the wxEVT_COMMAND_TEXT_UPDATED event for this window if the - // events are not currently disabled - void SendTextUpdatedEventIfAllowed() - { - if ( EventsAllowed() ) - SendTextUpdatedEvent(); - } - - private: // suppress or resume the text changed events generation: don't use these // functions directly, use EventsSuppressor class above instead diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm index 85020c21b4..80690e1c08 100644 --- a/src/osx/cocoa/window.mm +++ b/src/osx/cocoa/window.mm @@ -16,6 +16,7 @@ #include "wx/frame.h" #include "wx/log.h" #include "wx/textctrl.h" + #include "wx/combobox.h" #endif #ifdef __WXMAC__ @@ -1157,10 +1158,17 @@ void wxWidgetCocoaImpl::controlTextDidChange() wxWindow* wxpeer = (wxWindow*)GetWXPeer(); if ( wxpeer ) { - wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, wxpeer->GetId()); - event.SetEventObject( wxpeer ); - event.SetString( static_cast(wxpeer)->GetValue() ); - wxpeer->HandleWindowEvent( event ); + // since native rtti doesn't have to be enabled and wx' rtti is not aware of the mixin wxTextEntry, workaround is needed + wxTextCtrl *tc = wxDynamicCast( wxpeer , wxTextCtrl ); + wxComboBox *cb = wxDynamicCast( wxpeer , wxComboBox ); + if ( tc ) + tc->SendTextUpdatedEventIfAllowed(); + else if ( cb ) + cb->SendTextUpdatedEventIfAllowed(); + else + { + wxFAIL_MSG("Unexpected class for controlTextDidChange event"); + } } } diff --git a/src/osx/textentry_osx.cpp b/src/osx/textentry_osx.cpp index 2d9d79a0e2..7fef5e282d 100644 --- a/src/osx/textentry_osx.cpp +++ b/src/osx/textentry_osx.cpp @@ -147,8 +147,11 @@ wxTextPos wxTextEntry::GetLastPosition() const void wxTextEntry::Remove(long from, long to) { - GetTextPeer()->Remove( from , to ) ; - + { + EventsSuppressor noevents(this); + GetTextPeer()->Remove( from , to ); + } + SendTextUpdatedEventIfAllowed(); } @@ -159,14 +162,20 @@ void wxTextEntry::SetSelection(long from, long to) void wxTextEntry::WriteText(const wxString& str) { - GetTextPeer()->WriteText( str ) ; + { + EventsSuppressor noevents(this); + GetTextPeer()->WriteText( str ); + } SendTextUpdatedEventIfAllowed(); } void wxTextEntry::Clear() { - GetTextPeer()->Clear() ; + { + EventsSuppressor noevents(this); + GetTextPeer()->Clear(); + } SendTextUpdatedEventIfAllowed(); }