diff options
author | Federico Mena Quintero <federico@novell.com> | 2009-01-21 03:17:01 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2009-01-21 03:17:01 +0000 |
commit | e4bc68ba04100e32a4945a753543549e306c1276 (patch) | |
tree | f95bf6abd65c361ba7a428fdb099399f6e3b7396 /gtk/gtkfilechooserentry.c | |
parent | 2c07a59e5496ba1f677a29068f5199c3f0c27b22 (diff) | |
download | gtk+-e4bc68ba04100e32a4945a753543549e306c1276.tar.gz |
Don't do completion in the middle of an incomplete hostname
Fix completion so it doesn't pop up for every character in a URI
hostname:
* gtk/gtkfilechooser.h (GtkFileChooserError): Add a
GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME.
* gtk/gtkfilesystem.c (_gtk_file_system_parse): Return an
"incomplete hostname" error if the user has not typed a full
hostname yet in an URI.
* gtk/gtkfilechooserentry.c (append_common_prefix): If we get an
incomplete hostname, just don't pop up an error, since that is a
transient state and the user doesn't need to be notified about it.
(refresh_current_folder_and_file_part): Don't revert to showing
the base folder if we have an incomplete hostname.
(reload_current_folder): Handle the passed folder being NULL, even
if we must force a reload. Also, reload the folder if we didn't
have a cancellable for it (i.e. we hadn't started to load it
before).
Signed-off-by: Federico Mena Quintero <federico@novell.com>
svn path=/trunk/; revision=22157
Diffstat (limited to 'gtk/gtkfilechooserentry.c')
-rw-r--r-- | gtk/gtkfilechooserentry.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index c25de12c7b..149d74c45b 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -661,7 +661,12 @@ append_common_prefix (GtkFileChooserEntry *chooser_entry, error = NULL; if (!find_common_prefix (chooser_entry, &common_prefix, &unique_file, &is_complete_not_unique, &prefix_expands_the_file_part, &error)) { - if (show_errors) + /* If the user types an incomplete hostname ("http://foo" without a slash + * after that), it's not an error. We just don't want to pop up a + * meaningless completion window in that state. + */ + if (!g_error_matches (error, GTK_FILE_CHOOSER_ERROR, GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME) + && show_errors) { beep (chooser_entry); pop_up_completion_feedback (chooser_entry, _("Invalid path")); @@ -1403,7 +1408,8 @@ reload_current_folder (GtkFileChooserEntry *chooser_entry, if (chooser_entry->current_folder_file) { - if ((folder_file && !g_file_equal (folder_file, chooser_entry->current_folder_file)) + if ((folder_file && !(g_file_equal (folder_file, chooser_entry->current_folder_file) + && chooser_entry->load_folder_cancellable)) || force_reload) { reload = TRUE; @@ -1419,7 +1425,7 @@ reload_current_folder (GtkFileChooserEntry *chooser_entry, discard_current_folder (chooser_entry); g_object_unref (chooser_entry->current_folder_file); - chooser_entry->current_folder_file = g_object_ref (folder_file); + chooser_entry->current_folder_file = (folder_file) ? g_object_ref (folder_file) : NULL; } } else @@ -1443,6 +1449,7 @@ refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry, gchar *file_part; gsize total_len, file_part_len; gint file_part_pos; + GError *error; editable = GTK_EDITABLE (chooser_entry); @@ -1462,14 +1469,22 @@ refresh_current_folder_and_file_part (GtkFileChooserEntry *chooser_entry, } text = gtk_editable_get_chars (editable, 0, end_pos); - + + error = NULL; if (!chooser_entry->file_system || !chooser_entry->base_folder || !_gtk_file_system_parse (chooser_entry->file_system, chooser_entry->base_folder, text, - &folder_file, &file_part, NULL)) /* NULL-GError */ + &folder_file, &file_part, &error)) { - folder_file = (chooser_entry->base_folder) ? g_object_ref (chooser_entry->base_folder) : NULL; + if (g_error_matches (error, GTK_FILE_CHOOSER_ERROR, GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME)) + folder_file = NULL; + else + folder_file = (chooser_entry->base_folder) ? g_object_ref (chooser_entry->base_folder) : NULL; + + if (error) + g_error_free (error); + file_part = g_strdup (""); file_part_pos = -1; } |