From 91260cd94d33d9e60d08a457fdddfd46ef3de8bb Mon Sep 17 00:00:00 2001 From: Klaus Ethgen Date: Tue, 16 Feb 2016 15:42:38 +0100 Subject: [PATCH] Allow to choose to show parent folder With e9fc136 we learned buttons for parent folder in directory list. This disabled the ".." handle in the view itself. This was found to be not optimal as the users are used to it. With this patch, that entry is now configurable in preferences. It is enabled by default but could be disabled if the user don't like it. --- src/options.c | 1 + src/options.h | 1 + src/preferences.c | 4 ++++ src/rcfile.c | 2 ++ src/view_dir_list.c | 10 +++++++++- 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/options.c b/src/options.c index 15c0351d..1c02f94b 100644 --- a/src/options.c +++ b/src/options.c @@ -42,6 +42,7 @@ ConfOptions *init_options(ConfOptions *options) options->file_filter.disable = FALSE; options->file_filter.show_dot_directory = FALSE; options->file_filter.show_hidden_files = FALSE; + options->file_filter.show_parent_directory = TRUE; options->save_window_positions = TRUE; options->tools_restore_state = TRUE; diff --git a/src/options.h b/src/options.h index f888e7e4..c32b1647 100644 --- a/src/options.h +++ b/src/options.h @@ -89,6 +89,7 @@ struct _ConfOptions /* file filtering */ struct { gboolean show_hidden_files; + gboolean show_parent_directory; gboolean show_dot_directory; gboolean disable; } file_filter; diff --git a/src/preferences.c b/src/preferences.c index d91b8ed8..c647d0f8 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -197,6 +197,7 @@ static void config_window_apply(void) config_entry_to_option(safe_delete_path_entry, &options->file_ops.safe_delete_path, remove_trailing_slash); if (options->file_filter.show_hidden_files != c_options->file_filter.show_hidden_files) refresh = TRUE; + if (options->file_filter.show_parent_directory != c_options->file_filter.show_parent_directory) refresh = TRUE; if (options->file_filter.show_dot_directory != c_options->file_filter.show_dot_directory) refresh = TRUE; if (options->file_sort.case_sensitive != c_options->file_sort.case_sensitive) refresh = TRUE; if (options->file_filter.disable != c_options->file_filter.disable) refresh = TRUE; @@ -234,6 +235,7 @@ static void config_window_apply(void) options->thumbnails.spec_standard = c_options->thumbnails.spec_standard; options->metadata.enable_metadata_dirs = c_options->metadata.enable_metadata_dirs; options->file_filter.show_hidden_files = c_options->file_filter.show_hidden_files; + options->file_filter.show_parent_directory = c_options->file_filter.show_parent_directory; options->file_filter.show_dot_directory = c_options->file_filter.show_dot_directory; options->file_sort.case_sensitive = c_options->file_sort.case_sensitive; @@ -1502,6 +1504,8 @@ static void config_tab_files(GtkWidget *notebook) pref_checkbox_new_int(group, _("Show hidden files or folders"), options->file_filter.show_hidden_files, &c_options->file_filter.show_hidden_files); + pref_checkbox_new_int(group, _("Show parent folder (..)"), + options->file_filter.show_parent_directory, &c_options->file_filter.show_parent_directory); pref_checkbox_new_int(group, _("Case sensitive sort"), options->file_sort.case_sensitive, &c_options->file_sort.case_sensitive); diff --git a/src/rcfile.c b/src/rcfile.c index ad17096b..a7ce0b6f 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -364,6 +364,7 @@ static void write_global_attributes(GString *outstr, gint indent) /* Filtering Options */ WRITE_NL(); WRITE_BOOL(*options, file_filter.show_hidden_files); + WRITE_NL(); WRITE_BOOL(*options, file_filter.show_parent_directory); WRITE_NL(); WRITE_BOOL(*options, file_filter.show_dot_directory); WRITE_NL(); WRITE_BOOL(*options, file_filter.disable); WRITE_SEPARATOR(); @@ -622,6 +623,7 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar ** /* Filtering options */ if (READ_BOOL(*options, file_filter.show_hidden_files)) continue; + if (READ_BOOL(*options, file_filter.show_parent_directory)) continue; if (READ_BOOL(*options, file_filter.show_dot_directory)) continue; if (READ_BOOL(*options, file_filter.disable)) continue; if (READ_CHAR(*options, sidecar.ext)) continue; diff --git a/src/view_dir_list.c b/src/view_dir_list.c index 959eb318..6a678e60 100644 --- a/src/view_dir_list.c +++ b/src/view_dir_list.c @@ -146,7 +146,15 @@ static gboolean vdlist_populate(ViewDir *vd, gboolean clear) ret = filelist_read(vd->dir_fd, NULL, &VDLIST(vd)->list); VDLIST(vd)->list = filelist_sort(VDLIST(vd)->list, sort_type, sort_ascend); - /* add . */ + /* add . and .. */ + + if (options->file_filter.show_parent_directory && strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) != 0) + { + filepath = g_build_filename(vd->dir_fd->path, "..", NULL); + fd = file_data_new_dir(filepath); + VDLIST(vd)->list = g_list_prepend(VDLIST(vd)->list, fd); + g_free(filepath); + } if (options->file_filter.show_dot_directory) { -- 2.20.1