X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6519b40fe9f5e4706e02497fe01ff71c65079d6..ff1dadae388b2f408874b80251d64d16d9d46280:/src/gtk/textctrl.cpp diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index f10fd64e01..0638f5c1fa 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -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