]> git.saurik.com Git - wxWidgets.git/commitdiff
text updated events were not always sent out correctly, fixes #11462
authorStefan Csomor <csomor@advancedconcepts.ch>
Mon, 21 Jun 2010 07:50:12 +0000 (07:50 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Mon, 21 Jun 2010 07:50:12 +0000 (07:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64662 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/textentry.h
src/osx/cocoa/window.mm
src/osx/textentry_osx.cpp

index 3a240d1a1a7c02d7f4cb56f687f40033e87e85b5..99018a948831c645aeae3ad084acb0aa3cddde0a 100644 (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
index 85020c21b4f843e019d7c3c03859b7409ee9c4c3..80690e1c08a0c1f6aa114633da8150a9471ad7f8 100644 (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");
+        }
     }
 }
 
index 2d9d79a0e2ef26743eba77ca76496f897e78eece..7fef5e282d49c51ea59d722c2045928ab8990c58 100644 (file)
@@ -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();
 }