summaryrefslogtreecommitdiff
path: root/gtk/gtkfilechooserentry.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnu.org>2008-03-13 00:41:38 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2008-03-13 00:41:38 +0000
commita83799a32a1f1e12212573a5ddd638d28ded63a6 (patch)
tree603d3572995ce7273198402eaa6186ae8d78591c /gtk/gtkfilechooserentry.c
parente5f8a4693e8ebf6998ecabdf6ed9f2d8696d0b12 (diff)
downloadgtk+-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.c39
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;