summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2020-03-25 08:11:34 +0100
committerAntónio Fernandes <antoniof@gnome.org>2020-03-25 08:55:24 +0000
commit6e6f3524f2a544199c9ca8cbd7324bcfcc9b24af (patch)
tree7bc6810292535ac022ab5a4082882a064d7a80f6
parent5ef6c3da3bd99b1b1e8b3210cd41a9ea297a0f0a (diff)
downloadnautilus-6e6f3524f2a544199c9ca8cbd7324bcfcc9b24af.tar.gz
files-view: Ignore hidden directories in the templates folder
The hidden files can now be used as templates since commit 967b9d7. This change also caused that also hidden directories and their content is offered in the "New Document" right click menu. This change was not intentional and causes issues when for example git is used to manage the templates as the while .git file tree is offered there. The similar issue can happen also with some hidden files like .gitignore, but there is not much we can do with it. Let's ignore the hidden directories as a compromise. Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/1413 (Cherry-picked from dfe2ce60503112c8986224ad4eebe8609a303570)
-rw-r--r--src/nautilus-files-view.c47
1 files changed, 46 insertions, 1 deletions
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index f3d507fff..86472df87 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -5724,6 +5724,44 @@ directory_belongs_in_templates_menu (const char *templates_directory_uri,
return TRUE;
}
+static gboolean
+filter_templates_callback (NautilusFile *file,
+ gpointer callback_data)
+{
+ gboolean show_hidden = GPOINTER_TO_INT (callback_data);
+
+ if (nautilus_file_is_hidden_file (file))
+ {
+ if (!show_hidden)
+ {
+ return FALSE;
+ }
+
+ if (nautilus_file_is_directory (file))
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static GList *
+filter_templates (GList *files,
+ gboolean show_hidden)
+{
+ GList *filtered_files;
+ GList *removed_files;
+
+ filtered_files = nautilus_file_list_filter (files,
+ &removed_files,
+ filter_templates_callback,
+ GINT_TO_POINTER (show_hidden));
+ nautilus_file_list_free (removed_files);
+
+ return filtered_files;
+}
+
static GMenu *
update_directory_in_templates_menu (NautilusFilesView *view,
NautilusDirectory *directory)
@@ -5745,7 +5783,14 @@ update_directory_in_templates_menu (NautilusFilesView *view,
priv = nautilus_files_view_get_instance_private (view);
file_list = nautilus_directory_get_file_list (directory);
- filtered = nautilus_file_list_filter_hidden (file_list, priv->show_hidden_files);
+
+ /*
+ * The nautilus_file_list_filter_hidden() function isn't used here, because
+ * we want to show hidden files, but not directories. This is a compromise
+ * to allow creating hidden files but to prevent content from .git directory
+ * for example. See https://gitlab.gnome.org/GNOME/nautilus/issues/1413.
+ */
+ filtered = filter_templates (file_list, priv->show_hidden_files);
nautilus_file_list_free (file_list);
templates_directory_uri = nautilus_get_templates_directory_uri ();
menu = g_menu_new ();