diff --git a/ChangeLog b/ChangeLog index be73719ec4..2bc09f147b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-01-25 Matthias Clasen + + * gtk/gtkentrycompletion.c: + * gtk/gtkentry.c: Be more careful when blocking signals. + 2006-01-20 Matthias Clasen * gtk/gtktextview.c (gtk_text_view_set_virtual_cursor_pos): Don't diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index be73719ec4..2bc09f147b 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +2006-01-25 Matthias Clasen + + * gtk/gtkentrycompletion.c: + * gtk/gtkentry.c: Be more careful when blocking signals. + 2006-01-20 Matthias Clasen * gtk/gtktextview.c (gtk_text_view_set_virtual_cursor_pos): Don't diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index f88d5e3013..f67c73144e 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -3907,7 +3907,7 @@ gtk_entry_set_text (GtkEntry *entry, return; completion = gtk_entry_get_completion (entry); - if (completion) + if (completion && completion->priv->changed_id > 0) g_signal_handler_block (entry, completion->priv->changed_id); gtk_editable_delete_text (GTK_EDITABLE (entry), 0, -1); @@ -3915,7 +3915,7 @@ gtk_entry_set_text (GtkEntry *entry, tmp_pos = 0; gtk_editable_insert_text (GTK_EDITABLE (entry), text, strlen (text), &tmp_pos); - if (completion) + if (completion && completion->priv->changed_id > 0) g_signal_handler_unblock (entry, completion->priv->changed_id); } @@ -5229,12 +5229,14 @@ gtk_entry_completion_key_press (GtkWidget *widget, if (!gtk_tree_selection_get_selected (sel, &model, &iter)) return FALSE; - g_signal_handler_block (completion->priv->entry, - completion->priv->changed_id); + if (completion->priv->changed_id > 0) + g_signal_handler_block (completion->priv->entry, + completion->priv->changed_id); g_signal_emit_by_name (completion, "match_selected", model, &iter, &entry_set); - g_signal_handler_unblock (completion->priv->entry, - completion->priv->changed_id); + if (completion->priv->changed_id > 0) + g_signal_handler_unblock (completion->priv->entry, + completion->priv->changed_id); if (!entry_set) { @@ -5244,9 +5246,11 @@ gtk_entry_completion_key_press (GtkWidget *widget, completion->priv->text_column, &str, -1); - g_signal_handler_block (widget, completion->priv->changed_id); + if (completion->priv->changed_id > 0) + g_signal_handler_block (widget, completion->priv->changed_id); gtk_entry_set_text (GTK_ENTRY (widget), str); - g_signal_handler_unblock (widget, completion->priv->changed_id); + if (completion->priv->changed_id > 0) + g_signal_handler_unblock (widget, completion->priv->changed_id); /* move the cursor to the end */ gtk_editable_set_position (GTK_EDITABLE (widget), -1); @@ -5304,11 +5308,15 @@ gtk_entry_completion_changed (GtkWidget *entry, static gboolean check_completion_callback (GtkEntryCompletion *completion) { + GDK_THREADS_ENTER (); + completion->priv->check_completion_idle = NULL; gtk_entry_completion_complete (completion); gtk_entry_completion_insert_prefix (completion); + GDK_THREADS_LEAVE (); + return FALSE; } @@ -5372,17 +5380,24 @@ disconnect_completion_signals (GtkEntry *entry, if (completion->priv->changed_id > 0 && g_signal_handler_is_connected (entry, completion->priv->changed_id)) g_signal_handler_disconnect (entry, completion->priv->changed_id); + + completion->priv->changed_id = 0; + g_signal_handlers_disconnect_by_func (entry, G_CALLBACK (gtk_entry_completion_key_press), completion); if (completion->priv->insert_text_id > 0 && g_signal_handler_is_connected (entry, completion->priv->insert_text_id)) g_signal_handler_disconnect (entry, completion->priv->insert_text_id); + + completion->priv->insert_text_id = 0; + g_signal_handlers_disconnect_by_func (entry, G_CALLBACK (completion_insert_text_callback), completion); g_signal_handlers_disconnect_by_func (entry, G_CALLBACK (clear_completion_callback), completion); g_signal_handlers_disconnect_by_func (entry, G_CALLBACK (accept_completion_callback), completion); + } static void diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index c25bc5a178..e6aa2e90f0 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -1593,8 +1593,9 @@ gtk_entry_completion_insert_prefix (GtkEntryCompletion *completion) gboolean done; gchar *prefix; - g_signal_handler_block (completion->priv->entry, - completion->priv->insert_text_id); + if (completion->priv->insert_text_id > 0) + g_signal_handler_block (completion->priv->entry, + completion->priv->insert_text_id); prefix = gtk_entry_completion_compute_prefix (completion); if (prefix) { @@ -1602,8 +1603,9 @@ gtk_entry_completion_insert_prefix (GtkEntryCompletion *completion) 0, prefix, &done); g_free (prefix); } - g_signal_handler_unblock (completion->priv->entry, - completion->priv->insert_text_id); + if (completion->priv->insert_text_id > 0) + g_signal_handler_unblock (completion->priv->entry, + completion->priv->insert_text_id); } /**