summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRahul Verma <rv404674@gmail.com>2018-02-20 05:23:35 +0530
committerErnestas Kulik <ernestask@gnome.org>2018-03-24 20:30:43 +0200
commit982e9815a53cb8db06ac938677c578239628276a (patch)
tree0a8dbd14c5fcb8f91179b9a6da2b3052c3fc5642
parent6a66d84e0fd4e6c63e5a1247e2f0f1cff190f033 (diff)
downloadnautilus-982e9815a53cb8db06ac938677c578239628276a.tar.gz
files-view: don't strip extension when compressing folders
If a file named "Project 1.4" is compressed, the dialog will propose a truncated name for the archive ("Project 1"). However, this applies to folders too, where we don't need to worry about extensions. Therefore, the extension should be ignored if the item to be compressed is a folder. Fixes https://gitlab.gnome.org/GNOME/nautilus/issues/115
-rw-r--r--src/nautilus-file-utilities.c96
-rw-r--r--src/nautilus-files-view.c9
2 files changed, 76 insertions, 29 deletions
diff --git a/src/nautilus-file-utilities.c b/src/nautilus-file-utilities.c
index 9a84d2862..30dac5606 100644
--- a/src/nautilus-file-utilities.c
+++ b/src/nautilus-file-utilities.c
@@ -1306,34 +1306,6 @@ nautilus_file_selection_equal (GList *selection_a,
return selection_matches;
}
-char *
-nautilus_get_common_filename_prefix (GList *file_list,
- int min_required_len)
-{
- GList *l;
- GList *strs = NULL;
- char *name;
- char *result;
-
- if (file_list == NULL)
- {
- return NULL;
- }
-
- for (l = file_list; l != NULL; l = l->next)
- {
- g_return_val_if_fail (NAUTILUS_IS_FILE (l->data), NULL);
-
- name = nautilus_file_get_display_name (l->data);
- strs = g_list_append (strs, name);
- }
-
- result = nautilus_get_common_filename_prefix_from_filenames (strs, min_required_len);
- g_list_free_full (strs, g_free);
-
- return result;
-}
-
static char *
trim_whitespace (const gchar *string)
{
@@ -1369,6 +1341,74 @@ trim_whitespace (const gchar *string)
}
char *
+nautilus_get_common_filename_prefix (GList *file_list,
+ int min_required_len)
+{
+ GList *file_names = NULL;
+ GList *directory_names = NULL;
+ char *result_files;
+ g_autofree char *result = NULL;
+ g_autofree char *result_trimmed = NULL;
+
+ if (file_list == NULL)
+ {
+ return NULL;
+ }
+
+ for (GList *l = file_list; l != NULL; l = l->next)
+ {
+ char *name;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (l->data), NULL);
+
+ name = nautilus_file_get_display_name (l->data);
+
+ /* Since the concept of file extensions does not apply to directories,
+ * we filter those out.
+ */
+ if (nautilus_file_is_directory (l->data))
+ {
+ directory_names = g_list_prepend (directory_names, name);
+ }
+ else
+ {
+ file_names = g_list_prepend (file_names, name);
+ }
+ }
+
+ result_files = nautilus_get_common_filename_prefix_from_filenames (file_names, min_required_len);
+
+ if (directory_names == NULL)
+ {
+ return result_files;
+ }
+
+ if (result_files != NULL)
+ {
+ directory_names = g_list_prepend (directory_names, result_files);
+ }
+
+ result = eel_str_get_common_prefix (directory_names, min_required_len);
+
+ g_list_free_full (file_names, g_free);
+ g_list_free_full (directory_names, g_free);
+
+ if (result == NULL)
+ {
+ return NULL;
+ }
+
+ result_trimmed = trim_whitespace (result);
+
+ if (g_utf8_strlen (result_trimmed, -1) < min_required_len)
+ {
+ return NULL;
+ }
+
+ return g_steal_pointer (&result_trimmed);
+}
+
+char *
nautilus_get_common_filename_prefix_from_filenames (GList *filenames,
int min_required_len)
{
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 0623e3b44..9b7b9b9f5 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -2281,7 +2281,14 @@ nautilus_files_view_compress_dialog_new (NautilusFilesView *view)
display_name = nautilus_file_get_display_name (selection->data);
- common_prefix = eel_filename_strip_extension (display_name);
+ if (nautilus_file_is_directory (selection->data))
+ {
+ common_prefix = g_steal_pointer (&display_name);
+ }
+ else
+ {
+ common_prefix = eel_filename_strip_extension (display_name);
+ }
}
else
{