}
+ // 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
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
#include "wx/frame.h"
#include "wx/log.h"
#include "wx/textctrl.h"
+ #include "wx/combobox.h"
#endif
#ifdef __WXMAC__
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");
+ }
}
}
void wxTextEntry::Remove(long from, long to)
{
- GetTextPeer()->Remove( from , to ) ;
-
+ {
+ EventsSuppressor noevents(this);
+ GetTextPeer()->Remove( from , to );
+ }
+
SendTextUpdatedEventIfAllowed();
}
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();
}