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
This commit is contained in:
Stefan Csomor
2010-06-21 07:50:12 +00:00
parent 412d690e49
commit 4275201ba3
3 changed files with 33 additions and 17 deletions

View File

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

View File

@@ -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<wxTextCtrl*>(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");
}
}
}

View File

@@ -147,7 +147,10 @@ wxTextPos wxTextEntry::GetLastPosition() const
void wxTextEntry::Remove(long from, long 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)
{
{
EventsSuppressor noevents(this);
GetTextPeer()->WriteText( str );
}
SendTextUpdatedEventIfAllowed();
}
void wxTextEntry::Clear()
{
{
EventsSuppressor noevents(this);
GetTextPeer()->Clear();
}
SendTextUpdatedEventIfAllowed();
}