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

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

svn path=/trunk/; revision=19837
This commit is contained in:
Federico Mena Quintero 2008-03-13 00:41:38 +00:00 committed by Federico Mena Quintero
parent e5f8a4693e
commit a83799a32a

View File

@ -477,6 +477,10 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry,
&& 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 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry,
{
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 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry,
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;