]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
DLL build fixes
[wxWidgets.git] / src / gtk / textctrl.cpp
index f10fd64e01a96af2e971b5251ed13c71f94f538b..0638f5c1fa9885d1451cfc716e2d6a0235d06ff0 100644 (file)
@@ -448,9 +448,7 @@ gtk_text_changed_callback( GtkWidget *widget, wxTextCtrl *win )
     if ( win->MarkDirtyOnChange() )
         win->MarkDirty();
 
-    wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, win->GetId() );
-    event.SetEventObject( win );
-    win->GetEventHandler()->ProcessEvent( event );
+    win->SendTextUpdatedEvent();
 }
 }
 
@@ -821,6 +819,14 @@ wxFontEncoding wxTextCtrl::GetTextEncoding() const
     return enc;
 }
 
+bool wxTextCtrl::IsEmpty() const
+{
+    if ( IsMultiLine() )
+        return gtk_text_buffer_get_char_count(m_buffer) != 0;
+
+    return wxTextCtrlBase::IsEmpty();
+}
+
 void wxTextCtrl::DoSetValue( const wxString &value, int flags )
 {
     wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") );
@@ -832,53 +838,31 @@ void wxTextCtrl::DoSetValue( const wxString &value, int flags )
     m_modified = false;
     DontMarkDirtyOnNextChange();
 
-    if ( IsMultiLine() )
+    const wxCharBuffer buffer(wxGTK_CONV_ENC(value, GetTextEncoding()));
+    if ( !buffer )
     {
-        const wxCharBuffer buffer(wxGTK_CONV_ENC(value, GetTextEncoding()));
-        if ( !buffer )
-        {
-            // see comment in WriteText() as to why we must warn the user about
-            // this
-            wxLogWarning(_("Failed to set text in the text control."));
-            return;
-        }
+        // see comment in WriteText() as to why we must warn the user about
+        // this
+        wxLogWarning(_("Failed to set text in the text control."));
+        return;
+    }
 
+    // if the control is not empty, two "changed" signals are emitted,
+    // otherwise only one and we need to ignore either both or one of them
+    int ignore = flags & SetValue_SendEvent ? 0 : 1;
+    if ( !IsEmpty() )
+        ignore++;
 
-        // if the control is not empty, two "changed" signals are emitted
-        if ( flags & SetValue_SendEvent )
-        {
-            if ( gtk_text_buffer_get_char_count(m_buffer) != 0 )
-                IgnoreNextTextUpdate();
-        }
-        else
-        {
-            if ( gtk_text_buffer_get_char_count(m_buffer) != 0 )
-                IgnoreNextTextUpdate(2);
-            else
-                IgnoreNextTextUpdate(1);        // skip only one
-        }
+    if ( ignore )
+        IgnoreNextTextUpdate(ignore);
 
+    if ( IsMultiLine() )
+    {
         gtk_text_buffer_set_text( m_buffer, buffer, strlen(buffer) );
     }
     else // single line
     {
-        // gtk_entry_set_text() emits two "changed" signals if the control is
-        // not empty because internally it calls gtk_editable_delete_text() and
-        // gtk_editable_insert_text()
-        if ( flags & SetValue_SendEvent )
-        {
-            if ( !GetValue().empty() )
-                IgnoreNextTextUpdate();
-        }
-        else
-        {
-            if ( !GetValue().empty() )
-                IgnoreNextTextUpdate(2);
-            else
-                IgnoreNextTextUpdate(1);        // if we are empty, skip only one event
-        }
-
-        gtk_entry_set_text( GTK_ENTRY(m_text), wxGTK_CONV(value) );
+        gtk_entry_set_text( GTK_ENTRY(m_text), buffer );
     }
 
     // GRG, Jun/2000: Changed this after a lot of discussion in