diff options
author | Matthias Clasen <mclasen@redhat.com> | 2007-07-16 16:43:54 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-07-16 16:43:54 +0000 |
commit | 20580e491e58c770fdfa5a2a3a9abfd8e6208641 (patch) | |
tree | f97221f47cef8c4d106038ea1b23d098d01b26bb /gtk/gtkentrycompletion.c | |
parent | 50a0d3b8eb9f7a4810606d365a9d8e010dcb17b4 (diff) | |
download | gtk+-20580e491e58c770fdfa5a2a3a9abfd8e6208641.tar.gz |
Fix some issues with some combinations of inline-selection and
2007-07-16 Matthias Clasen <mclasen@redhat.com>
Fix some issues with some combinations of inline-selection
and inline-completion. (#457384, Christian Persch)
* gtk/gtkentry.c (gtk_entry_completion_key_press): Don't store
the completion_prefix here, and be careful when using
completion_prefix, because it may be NULL.
* gtk/gtkentrycompletion.c (gtk_entry_completion_finalize):
Free completion_prefix here.
* gtk/gtkentrycompletion.c (gtk_entry_completion_real_insert_prefix):
(gtk_entry_completion_insert_completion_text): Store the
completion_prefix here.
svn path=/trunk/; revision=18479
Diffstat (limited to 'gtk/gtkentrycompletion.c')
-rw-r--r-- | gtk/gtkentrycompletion.c | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index b4c748aa3d..8c4268a794 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -650,6 +650,7 @@ gtk_entry_completion_finalize (GObject *object) g_object_unref (priv->action_view); g_free (priv->case_normalized_key); + g_free (priv->completion_prefix); if (priv->popup_window) gtk_widget_destroy (priv->popup_window); @@ -1634,6 +1635,9 @@ gtk_entry_completion_real_insert_prefix (GtkEntryCompletion *completion, key = gtk_entry_get_text (GTK_ENTRY (completion->priv->entry)); key_len = g_utf8_strlen (key, -1); + if (completion->priv->completion_prefix == NULL) + completion->priv->completion_prefix = g_strdup (key); + if (prefix_len > key_len) { gint pos = prefix_len; @@ -1674,44 +1678,28 @@ gtk_entry_completion_insert_completion_text (GtkEntryCompletion *completion, const gchar *text) { GtkEntryCompletionPrivate *priv = completion->priv; - gchar *needle; gint len; priv = completion->priv; if (priv->changed_id > 0) - { - g_signal_handler_block (priv->entry, - priv->changed_id); - } + g_signal_handler_block (priv->entry, priv->changed_id); if (priv->insert_text_id > 0) - { - g_signal_handler_block (completion->priv->entry, - completion->priv->insert_text_id); - } + g_signal_handler_block (priv->entry, priv->insert_text_id); - gtk_entry_set_text (GTK_ENTRY (priv->entry), text); - needle = strstr (text, completion->priv->completion_prefix); - if (needle) - { - len = g_utf8_strlen (text, -1) - g_utf8_strlen (needle, -1) - + g_utf8_strlen (priv->completion_prefix, -1); - gtk_editable_select_region (GTK_EDITABLE (priv->entry), - len, -1); - } + if (completion->priv->completion_prefix == NULL) + completion->priv->completion_prefix = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry))); + gtk_entry_set_text (GTK_ENTRY (priv->entry), text); + + len = strlen (priv->completion_prefix); + gtk_editable_select_region (GTK_EDITABLE (priv->entry), len, -1); if (priv->changed_id > 0) - { - g_signal_handler_unblock (priv->entry, - priv->changed_id); - } + g_signal_handler_unblock (priv->entry, priv->changed_id); if (priv->insert_text_id > 0) - { - g_signal_handler_unblock (priv->entry, - priv->insert_text_id); - } + g_signal_handler_unblock (priv->entry, priv->insert_text_id); } static gboolean |