From 21ad6be6adcf6dae3fb0f465f16f06f3ed288bc6 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Tue, 26 Oct 2004 15:53:32 +0000 Subject: [PATCH] Really handle a NULL model, fixes #137211 for real. 2004-10-25 Anders Carlsson * gtk/gtkentry.c: (gtk_entry_completion_timeout): * gtk/gtkentrycompletion.c: (gtk_entry_completion_set_model), (gtk_entry_completion_get_model), (gtk_entry_completion_complete): Really handle a NULL model, fixes #137211 for real. * gtk/gtkfilechooserentry.c: (gtk_file_chooser_entry_maybe_update_directory): Remove _clear, #137211 is fixed. * tests/testentrycompletion.c: (main): Add completion with an empty model. --- ChangeLog | 15 +++++++++- ChangeLog.pre-2-10 | 15 +++++++++- ChangeLog.pre-2-6 | 15 +++++++++- ChangeLog.pre-2-8 | 15 +++++++++- gtk/gtkentry.c | 3 +- gtk/gtkentrycompletion.c | 16 ++++++++++- gtk/gtkfilechooserentry.c | 5 +--- tests/testentrycompletion.c | 56 +++++++++++++++++++++++++++++++------ 8 files changed, 121 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0eb852d70..2840538f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2004-10-25 Anders Carlsson + + * gtk/gtkentry.c: (gtk_entry_completion_timeout): + * gtk/gtkentrycompletion.c: (gtk_entry_completion_set_model), + (gtk_entry_completion_get_model), (gtk_entry_completion_complete): + Really handle a NULL model, fixes #137211 for real. + + * gtk/gtkfilechooserentry.c: + (gtk_file_chooser_entry_maybe_update_directory): + Remove _clear, #137211 is fixed. + + * tests/testentrycompletion.c: (main): + Add completion with an empty model. + 2004-10-25 Carlos Garnacho Parro Fix for #118764, David Bordoley: @@ -52,7 +66,6 @@ * gtk/.cvsignore: Ignore gtk-update-icon-cache. * tests/.cvsignore: Ignore testimage. ->>>>>>> 1.5960 2004-10-25 Matthias Clasen * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325, diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 0eb852d70..2840538f7 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,17 @@ +2004-10-25 Anders Carlsson + + * gtk/gtkentry.c: (gtk_entry_completion_timeout): + * gtk/gtkentrycompletion.c: (gtk_entry_completion_set_model), + (gtk_entry_completion_get_model), (gtk_entry_completion_complete): + Really handle a NULL model, fixes #137211 for real. + + * gtk/gtkfilechooserentry.c: + (gtk_file_chooser_entry_maybe_update_directory): + Remove _clear, #137211 is fixed. + + * tests/testentrycompletion.c: (main): + Add completion with an empty model. + 2004-10-25 Carlos Garnacho Parro Fix for #118764, David Bordoley: @@ -52,7 +66,6 @@ * gtk/.cvsignore: Ignore gtk-update-icon-cache. * tests/.cvsignore: Ignore testimage. ->>>>>>> 1.5960 2004-10-25 Matthias Clasen * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325, diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 0eb852d70..2840538f7 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,17 @@ +2004-10-25 Anders Carlsson + + * gtk/gtkentry.c: (gtk_entry_completion_timeout): + * gtk/gtkentrycompletion.c: (gtk_entry_completion_set_model), + (gtk_entry_completion_get_model), (gtk_entry_completion_complete): + Really handle a NULL model, fixes #137211 for real. + + * gtk/gtkfilechooserentry.c: + (gtk_file_chooser_entry_maybe_update_directory): + Remove _clear, #137211 is fixed. + + * tests/testentrycompletion.c: (main): + Add completion with an empty model. + 2004-10-25 Carlos Garnacho Parro Fix for #118764, David Bordoley: @@ -52,7 +66,6 @@ * gtk/.cvsignore: Ignore gtk-update-icon-cache. * tests/.cvsignore: Ignore testimage. ->>>>>>> 1.5960 2004-10-25 Matthias Clasen * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325, diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 0eb852d70..2840538f7 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,17 @@ +2004-10-25 Anders Carlsson + + * gtk/gtkentry.c: (gtk_entry_completion_timeout): + * gtk/gtkentrycompletion.c: (gtk_entry_completion_set_model), + (gtk_entry_completion_get_model), (gtk_entry_completion_complete): + Really handle a NULL model, fixes #137211 for real. + + * gtk/gtkfilechooserentry.c: + (gtk_file_chooser_entry_maybe_update_directory): + Remove _clear, #137211 is fixed. + + * tests/testentrycompletion.c: (main): + Add completion with an empty model. + 2004-10-25 Carlos Garnacho Parro Fix for #118764, David Bordoley: @@ -52,7 +66,6 @@ * gtk/.cvsignore: Ignore gtk-update-icon-cache. * tests/.cvsignore: Ignore testimage. ->>>>>>> 1.5960 2004-10-25 Matthias Clasen * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325, diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index aea064ec5..2560dba6b 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -4925,7 +4925,8 @@ gtk_entry_completion_timeout (gpointer data) completion->priv->completion_timeout = 0; - if (g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (completion->priv->entry)), -1) + if (completion->priv->filter_model && + g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (completion->priv->entry)), -1) >= completion->priv->minimum_key_length) { gint matches; diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index 689debb8f..8f58f9685 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -935,6 +935,15 @@ gtk_entry_completion_set_model (GtkEntryCompletion *completion, g_return_if_fail (GTK_IS_ENTRY_COMPLETION (completion)); g_return_if_fail (model == NULL || GTK_IS_TREE_MODEL (model)); + if (!model) + { + gtk_tree_view_set_model (GTK_TREE_VIEW (completion->priv->tree_view), + NULL); + _gtk_entry_completion_popdown (completion); + completion->priv->filter_model = NULL; + return; + } + /* code will unref the old filter model (if any) */ completion->priv->filter_model = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (model, NULL)); @@ -967,6 +976,9 @@ gtk_entry_completion_get_model (GtkEntryCompletion *completion) { g_return_val_if_fail (GTK_IS_ENTRY_COMPLETION (completion), NULL); + if (!completion->priv->filter_model) + return NULL; + return gtk_tree_model_filter_get_model (completion->priv->filter_model); } @@ -1055,8 +1067,10 @@ gtk_entry_completion_complete (GtkEntryCompletion *completion) gchar *tmp; g_return_if_fail (GTK_IS_ENTRY_COMPLETION (completion)); - g_return_if_fail (completion->priv->filter_model != NULL); + if (!completion->priv->filter_model) + return; + if (completion->priv->case_normalized_key) g_free (completion->priv->case_normalized_key); diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index 18ee32b4b..1f28eda92 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -724,10 +724,7 @@ gtk_file_chooser_entry_maybe_update_directory (GtkFileChooserEntry *chooser_entr } if (chooser_entry->completion_store) { - gtk_list_store_clear (GTK_LIST_STORE (chooser_entry->completion_store)); - /* FIXME: Uncomment this line and get rid of the _clear above - * after #137211 is fixed */ - /* gtk_entry_completion_set_model (gtk_entry_get_completion (GTK_ENTRY (chooser_entry)), NULL);*/ + gtk_entry_completion_set_model (gtk_entry_get_completion (GTK_ENTRY (chooser_entry)), NULL); g_object_unref (chooser_entry->completion_store); chooser_entry->completion_store = NULL; } diff --git a/tests/testentrycompletion.c b/tests/testentrycompletion.c index e4b7ef2b7..01bd20330 100644 --- a/tests/testentrycompletion.c +++ b/tests/testentrycompletion.c @@ -201,20 +201,45 @@ animation_timer (GtkEntryCompletion *completion) GtkTreeIter iter; gint n_completions = G_N_ELEMENTS (dynamic_completions); gint n; - + static GtkListStore *old_store = NULL; GtkListStore *store = GTK_LIST_STORE (gtk_entry_completion_get_model (completion)); - if ((timer_count / n_completions) % 2 == 0) + if (timer_count % 10 == 0) { - n = timer_count % n_completions; - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, dynamic_completions[n], -1); - + if (!old_store) + { + g_print ("removing model!\n"); + + old_store = g_object_ref (gtk_entry_completion_get_model (completion)); + gtk_entry_completion_set_model (completion, NULL); + } + else + { + g_print ("readding model!\n"); + + gtk_entry_completion_set_model (completion, old_store); + g_object_unref (old_store); + old_store = NULL; + } + + timer_count ++; + return TRUE; } - else + + if (!old_store) { - gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter); - gtk_list_store_remove (store, &iter); + if ((timer_count / n_completions) % 2 == 0) + { + n = timer_count % n_completions; + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, 0, dynamic_completions[n], -1); + + } + else + { + gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter); + gtk_list_store_remove (store, &iter); + } } timer_count++; @@ -342,6 +367,19 @@ main (int argc, char *argv[]) /* Fill the completion dynamically */ g_timeout_add (1000, (GSourceFunc) animation_timer, completion); + /* Fourth entry */ + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Model-less entry completion"), FALSE, FALSE, 0); + + entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); + + /* Create the completion object */ + completion = gtk_entry_completion_new (); + + /* Assign the completion to the entry */ + gtk_entry_set_completion (GTK_ENTRY (entry), completion); + g_object_unref (completion); + gtk_widget_show_all (window); gtk_main (); -- 2.43.2