X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ef5c70f96f5e06e1c8f8119f51b99dd019583d2b..d4a1433fccecbd5c3e80f921c6de91cbef287b44:/src/gtk/textctrl.cpp diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index 59ff4e0486..703ceccd9c 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -853,10 +853,11 @@ void wxTextCtrl::SetValue( const wxString &value ) } else // single line { - // 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() emits two "changed" signals if the control is + // not empty because internally it calls gtk_editable_delete_text() and + // gtk_editable_insert_text() but we want to have only one event + if ( !GetValue().empty() ) + IgnoreNextTextUpdate(); gtk_entry_set_text( GTK_ENTRY(m_text), wxGTK_CONV(value) ); } @@ -1816,6 +1817,18 @@ void wxTextCtrl::OnUrlMouseEvent(wxMouseEvent& event) GetEventHandler()->ProcessEvent(url_event); } +bool wxTextCtrl::GTKProcessEvent(wxEvent& event) const +{ + bool rc = wxTextCtrlBase::GTKProcessEvent(event); + + // GtkTextView starts a drag operation when left mouse button is pressed + // and ends it when it is released and if it doesn't get the release event + // the next click on a control results in an assertion failure inside + // gtk_text_view_start_selection_drag() which simply *kills* the program + // without anything we can do about it, so always let GTK+ have this event + return rc && (IsSingleLine() || event.GetEventType() != wxEVT_LEFT_UP); +} + // static wxVisualAttributes wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))