}
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) );
}
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))