]> git.saurik.com Git - wxWidgets.git/commitdiff
Update the text hint display correctly when ChangeValue() is called.
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 15 Sep 2010 22:10:20 +0000 (22:10 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 15 Sep 2010 22:10:20 +0000 (22:10 +0000)
wxTextEntry::ChangeValue() doesn't generate any events so we need to
explicitly update the text stored by wxTextEntryHintData when it is called to
ensure that it corresponds to the real controls value.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65552 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/textentry.h
src/common/textentrycmn.cpp

index 8decb6f5c737ad0c0c38503401de2bdb5e040e1b..3fadbd0322e93e4050310e5bb3c94aba7d1cb9d2 100644 (file)
@@ -38,8 +38,7 @@ public:
     // SetValue() generates a text change event, ChangeValue() doesn't
     virtual void SetValue(const wxString& value)
         { DoSetValue(value, SetValue_SendEvent); }
-    virtual void ChangeValue(const wxString& value)
-        { DoSetValue(value, SetValue_NoEvent); }
+    virtual void ChangeValue(const wxString& value);
 
     // writing text inserts it at the current position replacing any current
     // selection, appending always inserts it at the end and doesn't remove any
index 672eeb2807009c63fee345dc743fd53444de8197..51020ddcb40cf7e130645c488545d2a8100b074a 100644 (file)
@@ -75,6 +75,20 @@ public:
 
     const wxString& GetHintString() const { return m_hint; }
 
+    // This is called whenever the text control contents changes.
+    //
+    // We call it ourselves when this change generates an event but it's also
+    // necessary to call it explicitly from wxTextEntry::ChangeValue() as it,
+    // by design, does not generate any events.
+    void HandleTextUpdate(const wxString& text)
+    {
+        m_text = text;
+
+        // If we're called because of a call to Set or ChangeValue(), the
+        // control may still have the hint text colour, reset it in this case.
+        RestoreTextColourIfNecessary();
+    }
+
 private:
     // Show the hint in the window if we should do it, i.e. if the window
     // doesn't have any text of its own.
@@ -133,11 +147,7 @@ private:
         // which uses it internally because this would just forward back to us
         // so go directly to the private method which returns the real control
         // contents.
-        m_text = m_entry->DoGetValue();
-
-        // If this event is generated because of calling SetValue(), the
-        // control may still have the hint text colour, reset it in this case.
-        RestoreTextColourIfNecessary();
+        HandleTextUpdate(m_entry->DoGetValue());
 
         event.Skip();
     }
@@ -195,6 +205,16 @@ wxString wxTextEntryBase::GetRange(long from, long to) const
 // text operations
 // ----------------------------------------------------------------------------
 
+void wxTextEntryBase::ChangeValue(const wxString& value)
+{
+    DoSetValue(value, SetValue_NoEvent);
+
+    // As we didn't generate any events for wxTextEntryHintData to catch,
+    // notify it explicitly about our changed contents.
+    if ( m_hintData )
+        m_hintData->HandleTextUpdate(value);
+}
+
 void wxTextEntryBase::AppendText(const wxString& text)
 {
     SetInsertionPointEnd();