summaryrefslogtreecommitdiff
path: root/gtk/gtkfilechooserentry.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@novell.com>2009-01-21 03:16:46 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2009-01-21 03:16:46 +0000
commit2c07a59e5496ba1f677a29068f5199c3f0c27b22 (patch)
treebae96ffdcd29987933204e821139aa9cf063c2d1 /gtk/gtkfilechooserentry.c
parent92ec0276fc2795a575729bb61e257a62a6abbb70 (diff)
downloadgtk+-2c07a59e5496ba1f677a29068f5199c3f0c27b22.tar.gz
Add a local_only property to GtkFileChooserEntry
Patch by Carlos Garnacho <carlos@imendio.com> - 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 <federico@novell.com> svn path=/trunk/; revision=22156
Diffstat (limited to 'gtk/gtkfilechooserentry.c')
-rw-r--r--gtk/gtkfilechooserentry.c30
1 files changed, 30 insertions, 0 deletions
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;
+}