gtk+ r19837 - trunk/gtk



Author: federico
Date: Thu Mar 13 00:41:38 2008
New Revision: 19837
URL: http://svn.gnome.org/viewvc/gtk+?rev=19837&view=rev

Log:
Scan the completion store again to look for complete-but-not-unique matches

Signed-off-by: Federico Mena Quintero <federico gnu org>


Modified:
   trunk/gtk/gtkfilechooserentry.c

Modified: trunk/gtk/gtkfilechooserentry.c
==============================================================================
--- trunk/gtk/gtkfilechooserentry.c	(original)
+++ trunk/gtk/gtkfilechooserentry.c	Thu Mar 13 00:41:38 2008
@@ -477,6 +477,10 @@
 	    && chooser_entry->current_folder_path != NULL
 	    && gtk_file_path_compare (parsed_folder_path, chooser_entry->current_folder_path) == 0);
 
+  gtk_file_path_free (parsed_folder_path);
+
+  /* First pass: find the common prefix */
+
   valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (chooser_entry->completion_store), &iter);
 
   while (valid)
@@ -501,16 +505,13 @@
 	    {
 	      gchar *p = *common_prefix_ret;
 	      const gchar *q = display_name;
-		  
+
 	      while (*p && *p == *q)
 		{
 		  p++;
 		  q++;
 		}
 
-	      if (*p == '\0' || *q == '\0')
-		*is_complete_not_unique_ret = TRUE;
-
 	      *p = '\0';
 
 	      gtk_file_path_free (*unique_path_ret);
@@ -523,7 +524,35 @@
       valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (chooser_entry->completion_store), &iter);
     }
 
-  gtk_file_path_free (parsed_folder_path);
+  /* Second pass: see if the prefix we found is a complete match */
+
+  if (*common_prefix_ret != NULL)
+    {
+      valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (chooser_entry->completion_store), &iter);
+
+      while (valid)
+	{
+	  gchar *display_name;
+	  int len;
+
+	  gtk_tree_model_get (GTK_TREE_MODEL (chooser_entry->completion_store),
+			      &iter,
+			      DISPLAY_NAME_COLUMN, &display_name,
+			      -1);
+	  len = strlen (display_name);
+	  g_assert (len > 0);
+
+	  if (G_IS_DIR_SEPARATOR (display_name[len - 1]))
+	    len--;
+
+	  if (strncmp (*common_prefix_ret, display_name, len) == 0)
+	    *is_complete_not_unique_ret = TRUE;
+
+	  g_free (display_name);
+	  valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (chooser_entry->completion_store), &iter);
+	}
+    }
+
   g_free (parsed_file_part);
 
   return TRUE;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]