From 2c07a59e5496ba1f677a29068f5199c3f0c27b22 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Wed, 21 Jan 2009 03:16:46 +0000 Subject: Add a local_only property to GtkFileChooserEntry Patch by Carlos Garnacho - add a local_only property to GtkFileChooserEntry: * gtk/gtkfilechooserentry.c (struct _GtkFileChooserEntry): Add a local_only field. (_gtk_file_chooser_entry_init): Default to local_only being true. (start_explicit_completion): Don't allow completion of non-native files if local_only is turned on. (start_loading_current_folder): Don't start loading non-native folders if local_only is turned on. (_gtk_file_chooser_entry_set_local_only): New function. (_gtk_file_chooser_entry_get_local_only): New function. * gtk/gtkfilechooserentry.h (_gtk_file_chooser_entry_set_local_only, _gtk_file_chooser_entry_get_local_only): New prototypes. * gtk/gtkfilechooserdefault.c (set_local_only): Set the local_only property on the entry. Signed-off-by: Federico Mena Quintero svn path=/trunk/; revision=22156 --- gtk/gtkfilechooserdefault.c | 2 ++ gtk/gtkfilechooserentry.c | 30 ++++++++++++++++++++++++++++++ gtk/gtkfilechooserentry.h | 3 +++ 3 files changed, 35 insertions(+) (limited to 'gtk') diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index e9ee8e1fdd..3492c69849 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -5334,6 +5334,8 @@ set_local_only (GtkFileChooserDefault *impl, { impl->local_only = local_only; + _gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (impl->location_entry), local_only); + if (impl->shortcuts_model && impl->file_system) { shortcuts_add_volumes (impl); diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index 07bee3b9a9..c25de12c7b 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -79,6 +79,7 @@ struct _GtkFileChooserEntry guint has_completion : 1; guint in_change : 1; guint eat_tabs : 1; + guint local_only : 1; }; enum @@ -194,6 +195,8 @@ _gtk_file_chooser_entry_init (GtkFileChooserEntry *chooser_entry) GtkEntryCompletion *comp; GtkCellRenderer *cell; + chooser_entry->local_only = TRUE; + g_object_set (chooser_entry, "truncate-multiline", TRUE, NULL); comp = gtk_entry_completion_new (); @@ -1107,6 +1110,16 @@ start_explicit_completion (GtkFileChooserEntry *chooser_entry) return; } + if (chooser_entry->local_only + && !g_file_is_native (chooser_entry->current_folder_file)) + { + beep (chooser_entry); + pop_up_completion_feedback (chooser_entry, _("Only local files can be selected")); + + chooser_entry->load_complete_action = LOAD_COMPLETE_NOTHING; + return; + } + if (chooser_entry->current_folder && _gtk_folder_is_finished_loading (chooser_entry->current_folder)) { @@ -1366,6 +1379,10 @@ start_loading_current_folder (GtkFileChooserEntry *chooser_entry) chooser_entry->file_system == NULL) return; + if (chooser_entry->local_only + && !g_file_is_native (chooser_entry->current_folder_file)) + return; + g_assert (chooser_entry->current_folder == NULL); g_assert (chooser_entry->load_folder_cancellable == NULL); @@ -1826,3 +1843,16 @@ _gtk_file_chooser_entry_select_filename (GtkFileChooserEntry *chooser_entry) gtk_editable_select_region (GTK_EDITABLE (chooser_entry), 0, (gint) len); } +void +_gtk_file_chooser_entry_set_local_only (GtkFileChooserEntry *chooser_entry, + gboolean local_only) +{ + chooser_entry->local_only = local_only; + clear_completions (chooser_entry); +} + +gboolean +_gtk_file_chooser_entry_get_local_only (GtkFileChooserEntry *chooser_entry) +{ + return chooser_entry->local_only; +} diff --git a/gtk/gtkfilechooserentry.h b/gtk/gtkfilechooserentry.h index 2818fd9da7..a9c9f8388c 100644 --- a/gtk/gtkfilechooserentry.h +++ b/gtk/gtkfilechooserentry.h @@ -48,6 +48,9 @@ const gchar * _gtk_file_chooser_entry_get_file_part (GtkFileChooserEnt gboolean _gtk_file_chooser_entry_get_is_folder (GtkFileChooserEntry *chooser_entry, GFile *file); void _gtk_file_chooser_entry_select_filename (GtkFileChooserEntry *chooser_entry); +void _gtk_file_chooser_entry_set_local_only (GtkFileChooserEntry *chooser_entry, + gboolean local_only); +gboolean _gtk_file_chooser_entry_get_local_only (GtkFileChooserEntry *chooser_entry); G_END_DECLS -- cgit v1.2.1