]> Pileus Git - ~andy/gtk/commitdiff
Really handle a NULL model, fixes #137211 for real.
authorAnders Carlsson <andersca@gnome.org>
Tue, 26 Oct 2004 15:53:32 +0000 (15:53 +0000)
committerAnders Carlsson <andersca@src.gnome.org>
Tue, 26 Oct 2004 15:53:32 +0000 (15:53 +0000)
2004-10-25  Anders Carlsson  <andersca@gnome.org>

* 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
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkentry.c
gtk/gtkentrycompletion.c
gtk/gtkfilechooserentry.c
tests/testentrycompletion.c

index 0eb852d70c9f8b88992c2d6b73a50a4290f246ad..2840538f71bf8cf24f4806a519666b633009a1b8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2004-10-25  Anders Carlsson  <andersca@gnome.org>
+
+       * 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  <carlosg@gnome.org>
 
        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  <mclasen@redhat.com>
 
        * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325,
index 0eb852d70c9f8b88992c2d6b73a50a4290f246ad..2840538f71bf8cf24f4806a519666b633009a1b8 100644 (file)
@@ -1,3 +1,17 @@
+2004-10-25  Anders Carlsson  <andersca@gnome.org>
+
+       * 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  <carlosg@gnome.org>
 
        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  <mclasen@redhat.com>
 
        * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325,
index 0eb852d70c9f8b88992c2d6b73a50a4290f246ad..2840538f71bf8cf24f4806a519666b633009a1b8 100644 (file)
@@ -1,3 +1,17 @@
+2004-10-25  Anders Carlsson  <andersca@gnome.org>
+
+       * 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  <carlosg@gnome.org>
 
        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  <mclasen@redhat.com>
 
        * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325,
index 0eb852d70c9f8b88992c2d6b73a50a4290f246ad..2840538f71bf8cf24f4806a519666b633009a1b8 100644 (file)
@@ -1,3 +1,17 @@
+2004-10-25  Anders Carlsson  <andersca@gnome.org>
+
+       * 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  <carlosg@gnome.org>
 
        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  <mclasen@redhat.com>
 
        * gtk/gtkcellrenderercombo.c (find_text): Don't leak text. (#156325,
index aea064ec52a5f8f4823113dbb8d555d7f84e78f3..2560dba6b5e79dde352e8ff3794ecfd611b91e43 100644 (file)
@@ -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;
index 689debb8f9d9dc4980a064c7ca9b562006476563..8f58f9685eafd508f197f43a150201e10aa35e1d 100644 (file)
@@ -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);
 
index 18ee32b4bdd904c1d5a17c35aa0d31e3bb9f391a..1f28eda929c8743fbdcc96cf99058a79c1e2ff53 100644 (file)
@@ -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;
            }
index e4b7ef2b78eb03d6429c9fc94a6022254fbe5a95..01bd2033097858a18987ed48f80d500e80da9ed5 100644 (file)
@@ -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 ();