]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
wx.ProgressDialog.Update now returns two values.
[wxWidgets.git] / src / gtk / textctrl.cpp
index 53c0f6939623b77458ed99c23da14f15e4642e0e..73b66c7677224d26495339124451e738f0a54ffc 100644 (file)
 #include "wx/wxprec.h"
 
 #include "wx/textctrl.h"
-#include "wx/utils.h"
-#include "wx/intl.h"
-#include "wx/log.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/utils.h"
+#endif
+
 #include "wx/math.h"
 #include "wx/settings.h"
 #include "wx/panel.h"
@@ -778,9 +782,14 @@ void wxTextCtrl::SetValue( const wxString &value )
 
         gtk_text_buffer_set_text( m_buffer, buffer, strlen(buffer) );
     }
-    else
+    else // single line
     {
-        gtk_entry_set_text( GTK_ENTRY(m_text), wxGTK_CONV( value ) );
+        // gtk_entry_set_text() emits two "changed" signals because internally
+        // it calls gtk_editable_delete_text() and gtk_editable_insert_text()
+        // but we want to have only one event
+        IgnoreNextTextUpdate();
+
+        gtk_entry_set_text( GTK_ENTRY(m_text), wxGTK_CONV(value) );
     }
 
     // GRG, Jun/2000: Changed this after a lot of discussion in
@@ -812,7 +821,14 @@ void wxTextCtrl::WriteText( const wxString &text )
 
     if ( m_windowStyle & wxTE_MULTILINE )
     {
-        // TODO: Call whatever is needed to delete the selection.
+        // First remove the selection if there is one
+        // TODO:  Is there an easier GTK specific way to do this?
+        long from, to;
+        GetSelection(&from, &to);
+        if (from != to)
+            Remove(from, to);
+
+        // Insert the text
         wxGtkTextInsert( m_text, m_buffer, m_defaultStyle, buffer );
 
         GtkAdjustment *adj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(m_widget) );