diff options
author | Federico Mena Quintero <federico@gnu.org> | 2008-03-13 00:41:38 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2008-03-13 00:41:38 +0000 |
commit | a83799a32a1f1e12212573a5ddd638d28ded63a6 (patch) | |
tree | 603d3572995ce7273198402eaa6186ae8d78591c /gtk/gtkfilechooserentry.c | |
parent | e5f8a4693e8ebf6998ecabdf6ed9f2d8696d0b12 (diff) | |
download | gtk+-a83799a32a1f1e12212573a5ddd638d28ded63a6.tar.gz |
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
Diffstat (limited to 'gtk/gtkfilechooserentry.c')
-rw-r--r-- | gtk/gtkfilechooserentry.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index 9fbe0afb8a..54c89ad030 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -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; |