From: Paul Cornett Date: Sun, 1 Jul 2012 16:43:16 +0000 (+0000) Subject: override DoSetValue() to avoid unnecessary clipboard operations, fixes #14369 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/75377698450fc438a4a474c57ddd39e3587a8297?ds=inline override DoSetValue() to avoid unnecessary clipboard operations, fixes #14369 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71917 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/textentry.h b/include/wx/gtk/textentry.h index cc69686650..8b47b758e1 100644 --- a/include/wx/gtk/textentry.h +++ b/include/wx/gtk/textentry.h @@ -52,6 +52,7 @@ public: void SendMaxLenEvent(); protected: + virtual void DoSetValue(const wxString& value, int flags); virtual wxString DoGetValue() const; // margins functions diff --git a/src/gtk/textentry.cpp b/src/gtk/textentry.cpp index 70e5e591cf..c1badd3203 100644 --- a/src/gtk/textentry.cpp +++ b/src/gtk/textentry.cpp @@ -110,6 +110,26 @@ void wxTextEntry::WriteText(const wxString& value) gtk_editable_set_position(edit, len); } +void wxTextEntry::DoSetValue(const wxString& value, int flags) +{ + if (value != GetValue()) + { + // use Remove() rather than SelectAll() to avoid unnecessary clipboard + // operations, and prevent triggering an apparent bug in GTK which + // causes the the subsequent WriteText() to append rather than overwrite + { + EventsSuppressor noevents(this); + Remove(0, -1); + } + EventsSuppressor noeventsIf(this, !(flags & SetValue_SendEvent)); + WriteText(value); + } + else if (flags & SetValue_SendEvent) + SendTextUpdatedEvent(GetEditableWindow()); + + SetInsertionPoint(0); +} + wxString wxTextEntry::DoGetValue() const { const wxGtkString value(gtk_editable_get_chars(GetEditable(), 0, -1));