From: Robert Roebling Date: Fri, 22 Jun 2007 10:53:42 +0000 (+0000) Subject: Upported event filter patch for wxTextCtrl::SetValue() X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/929bd94ee1ebf1d6d73c038954eef424a3ef8739 Upported event filter patch for wxTextCtrl::SetValue() (work around doesn't work anymore with recent versions of GTK+). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46611 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index 616a591367..4b2f349fb2 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -996,12 +996,7 @@ void wxTextCtrl::DoSetValue( const wxString &value, int flags ) { wxCHECK_RET( m_text != NULL, wxT("invalid text ctrl") ); - // the control won't be modified any more as we programmatically replace - // all the existing text, so reset the flag and don't set it again (and do - // it now, before the text event handler is ran so that IsModified() called - // from there returns the expected value) m_modified = false; - DontMarkDirtyOnNextChange(); wxFontEncoding enc = m_defaultStyle.HasFont() ? m_defaultStyle.GetFont().GetEncoding() @@ -1018,19 +1013,13 @@ void wxTextCtrl::DoSetValue( const wxString &value, int flags ) 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 ( ignore ) - IgnoreNextTextUpdate(ignore); - if ( IsMultiLine() ) { + g_signal_handlers_disconnect_by_func (m_buffer, + (gpointer) gtk_text_changed_callback, this); + gtk_text_buffer_set_text( m_buffer, buffer, strlen(buffer) ); - + if ( !m_defaultStyle.IsDefault() ) { GtkTextIter start, end; @@ -1038,21 +1027,22 @@ void wxTextCtrl::DoSetValue( const wxString &value, int flags ) wxGtkTextApplyTagsFromAttr(m_widget, m_buffer, m_defaultStyle, &start, &end); } + + g_signal_connect (m_buffer, "changed", + G_CALLBACK (gtk_text_changed_callback), this); } - else // single line + else { + g_signal_handlers_disconnect_by_func (m_text, + (gpointer) gtk_text_changed_callback, this); + gtk_entry_set_text( GTK_ENTRY(m_text), buffer ); + + g_signal_connect (m_text, "changed", + G_CALLBACK (gtk_text_changed_callback), this); } - - // if, for whatever reason, the callback wasn't called the expected number - // of times, still reset the flags to the default values - m_dontMarkDirty = false; - m_countUpdatesToIgnore = 0; - - - // GRG, Jun/2000: Changed this after a lot of discussion in - // the lists. wxWidgets 2.2 will have a set of flags to - // customize this behaviour. + + // This was added after discussion on the list SetInsertionPoint(0); }