diff options
author | Rahul Verma <rv404674@gmail.com> | 2018-02-20 05:23:35 +0530 |
---|---|---|
committer | Ernestas Kulik <ernestask@gnome.org> | 2018-03-24 20:30:43 +0200 |
commit | 982e9815a53cb8db06ac938677c578239628276a (patch) | |
tree | 0a8dbd14c5fcb8f91179b9a6da2b3052c3fc5642 | |
parent | 6a66d84e0fd4e6c63e5a1247e2f0f1cff190f033 (diff) | |
download | nautilus-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.c | 96 | ||||
-rw-r--r-- | src/nautilus-files-view.c | 9 |
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 { |