Skip to content

Commit 4193e72

Browse files
authored
Add option to allow expanders in empty folders (#3593)
* Add 'Show expanders for empty folders' setting * Add helper function for 'Show expanders for empty folders' setting * Implement 'Show expanders for empty folders' logic * Delete refresh logic and add note about manual refresh requirement
1 parent 8eec247 commit 4193e72

File tree

7 files changed

+66
-3
lines changed

7 files changed

+66
-3
lines changed

gresources/nemo-file-management-properties.glade

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,22 @@ along with . If not, see <http://www.gnu.org/licenses/>.
935935
<property name="position">1</property>
936936
</packing>
937937
</child>
938+
<child>
939+
<object class="GtkCheckButton" id="list_view_show_empty_expanders_checkbutton">
940+
<property name="label" translatable="yes">Show expanders for empty folders</property>
941+
<property name="visible">True</property>
942+
<property name="can-focus">True</property>
943+
<property name="receives-default">False</property>
944+
<property name="use-underline">True</property>
945+
<property name="xalign">0</property>
946+
<property name="draw-indicator">True</property>
947+
</object>
948+
<packing>
949+
<property name="expand">False</property>
950+
<property name="fill">False</property>
951+
<property name="position">2</property>
952+
</packing>
953+
</child>
938954
</object>
939955
</child>
940956
</object>

libnemo-private/nemo-global-preferences.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ nemo_global_preferences_get_size_prefix_preference (void)
132132
return 0;
133133
}
134134

135+
gboolean
136+
nemo_global_preferences_get_always_show_folder_expander (void)
137+
{
138+
return g_settings_get_boolean (nemo_list_view_preferences, NEMO_PREFERENCES_LIST_VIEW_ALWAYS_SHOW_EXPANDER);
139+
}
140+
135141
char *
136142
nemo_global_preferences_get_desktop_iid (void)
137143
{

libnemo-private/nemo-global-preferences.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ enum
183183
#define NEMO_PREFERENCES_LIST_VIEW_DEFAULT_VISIBLE_COLUMNS "default-visible-columns"
184184
#define NEMO_PREFERENCES_LIST_VIEW_DEFAULT_COLUMN_ORDER "default-column-order"
185185
#define NEMO_PREFERENCES_LIST_VIEW_ENABLE_EXPANSION "enable-folder-expansion"
186+
#define NEMO_PREFERENCES_LIST_VIEW_ALWAYS_SHOW_EXPANDER "always-show-folder-expander"
186187

187188
#define NEMO_PREFERENCES_MAX_THUMBNAIL_THREADS "thumbnail-threads"
188189

@@ -301,6 +302,8 @@ gint nemo_global_preferences_get_tooltip_flags (void);
301302
gboolean nemo_global_preferences_should_load_plugin (const gchar *name, const gchar *key);
302303
gchar **nemo_global_preferences_get_fileroller_mimetypes (void);
303304

305+
gboolean nemo_global_preferences_get_always_show_folder_expander (void);
306+
304307
gchar *nemo_global_preferences_get_mono_system_font (void);
305308
gchar *nemo_global_preferences_get_mono_font_family_match (const gchar *in_family);
306309

libnemo-private/org.nemo.gschema.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,11 @@
532532
<default>false</default>
533533
<summary>If true, allow folders with content to be expanded in the current view.</summary>
534534
</key>
535+
<key name="always-show-folder-expander" type="b">
536+
<default>false</default>
537+
<summary>If true, also allow folders without content to be expanded.</summary>
538+
<description>If true, show expander arrows for all folders, even empty ones. Note: reload once to see changes.</description>
539+
</key>
535540
</schema>
536541

537542
<schema id="org.nemo.sidebar-panels" path="/org/nemo/sidebar-panels/" gettext-domain="nemo">

src/nemo-file-management-properties.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
#define NEMO_FILE_MANAGEMENT_PROPERTIES_OPEN_NEW_WINDOW_WIDGET "new_window_checkbutton"
7474
#define NEMO_FILE_MANAGEMENT_PROPERTIES_TREE_VIEW_FOLDERS_WIDGET "treeview_folders_checkbutton"
7575
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_LIST_VIEW_EXPANDERS_WIDGET "list_view_show_expanders_checkbutton"
76+
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_EMPTY_FOLDER_EXPANDERS_WIDGET "list_view_show_empty_expanders_checkbutton"
7677

7778
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_PREVIOUS_ICON_TOOLBAR_WIDGET "show_previous_icon_toolbar_togglebutton"
7879
#define NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_NEXT_ICON_TOOLBAR_WIDGET "show_next_icon_toolbar_togglebutton"
@@ -1114,6 +1115,10 @@ nemo_file_management_properties_dialog_setup (GtkBuilder *builder,
11141115
NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_LIST_VIEW_EXPANDERS_WIDGET,
11151116
NEMO_PREFERENCES_LIST_VIEW_ENABLE_EXPANSION);
11161117

1118+
bind_builder_bool (builder, nemo_list_view_preferences,
1119+
NEMO_FILE_MANAGEMENT_PROPERTIES_SHOW_EMPTY_FOLDER_EXPANDERS_WIDGET,
1120+
NEMO_PREFERENCES_LIST_VIEW_ALWAYS_SHOW_EXPANDER);
1121+
11171122
setup_tooltip_items (builder);
11181123
connect_tooltip_items (builder);
11191124

src/nemo-list-model.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include <eel/eel-graphic-effects.h>
3939
#include <libnemo-private/nemo-dnd.h>
4040
#include <libnemo-private/nemo-file-utilities.h>
41+
#include <libnemo-private/nemo-global-preferences.h>
4142

4243
enum {
4344
SUBDIRECTORY_UNLOADED,
@@ -518,6 +519,13 @@ nemo_list_model_iter_has_child (GtkTreeModel *tree_model, GtkTreeIter *iter)
518519

519520
file_entry = g_sequence_get (iter->user_data);
520521

522+
/* If the file is a directory and always-show-expander is enabled, always return TRUE */
523+
if (file_entry->file && nemo_file_is_directory (file_entry->file)) {
524+
if (nemo_global_preferences_get_always_show_folder_expander()) {
525+
return TRUE;
526+
}
527+
}
528+
521529
return (file_entry->files != NULL && g_sequence_get_length (file_entry->files) > 0);
522530
}
523531

@@ -1079,7 +1087,9 @@ nemo_list_model_add_file (NemoListModel *model, NemoFile *file,
10791087

10801088
got_count = nemo_file_get_directory_item_count (file, &count, &unreadable);
10811089

1082-
if ((!got_count && !unreadable) || count > 0) {
1090+
/* Always add dummy row if always-show-expander is enabled, or if directory has items */
1091+
if (nemo_global_preferences_get_always_show_folder_expander() ||
1092+
(!got_count && !unreadable) || count > 0) {
10831093
add_dummy_row (model, file_entry);
10841094
gtk_tree_model_row_has_child_toggled (GTK_TREE_MODEL (model),
10851095
path, &iter);
@@ -1105,7 +1115,9 @@ update_dummy_row (NemoListModel *model,
11051115

11061116
got_count = nemo_file_get_directory_item_count (file, &count, &unreadable);
11071117

1108-
if ((got_count && count == 0) || (!got_count && unreadable)) {
1118+
/* Only remove dummy row if always-show-expander is disabled and directory is empty */
1119+
if (!nemo_global_preferences_get_always_show_folder_expander() &&
1120+
((got_count && count == 0) || (!got_count && unreadable))) {
11091121
files = file_entry->files;
11101122
if (g_sequence_get_length (files) == 1) {
11111123
GSequenceIter *dummy_ptr = g_sequence_get_iter_at_pos (files, 0);
@@ -1278,7 +1290,9 @@ nemo_list_model_remove (NemoListModel *model, GtkTreeIter *iter)
12781290

12791291
got_count = nemo_file_get_directory_item_count (parent_file_entry->file, &count, &unreadable);
12801292

1281-
if ((!got_count && !unreadable) || count > 0) {
1293+
/* Always add dummy row if always-show-expander is enabled, or if directory has items */
1294+
if (nemo_global_preferences_get_always_show_folder_expander() ||
1295+
(!got_count && !unreadable) || count > 0) {
12821296
add_dummy_row (model, parent_file_entry);
12831297
}
12841298
}

src/nemo-list-view.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,15 @@ expanders_enabled_changed_cb (NemoListView *view)
292292
NEMO_PREFERENCES_LIST_VIEW_ENABLE_EXPANSION));
293293
}
294294

295+
static void
296+
always_show_expander_changed_cb (NemoListView *view)
297+
{
298+
g_return_if_fail (NEMO_IS_LIST_VIEW (view));
299+
g_return_if_fail (GTK_IS_TREE_VIEW (view->details->tree_view) && view->details->tree_view != NULL);
300+
301+
/* Note: Changes require a manual refresh to take effect */
302+
}
303+
295304
static void
296305
list_selection_changed_callback (GtkTreeSelection *selection, gpointer user_data)
297306
{
@@ -2537,6 +2546,11 @@ create_and_set_up_tree_view (NemoListView *view)
25372546
G_CALLBACK (expanders_enabled_changed_cb),
25382547
view);
25392548

2549+
g_signal_connect_swapped (nemo_list_view_preferences,
2550+
"changed::" NEMO_PREFERENCES_LIST_VIEW_ALWAYS_SHOW_EXPANDER,
2551+
G_CALLBACK (always_show_expander_changed_cb),
2552+
view);
2553+
25402554
view->details->columns = g_hash_table_new_full (g_str_hash,
25412555
g_str_equal,
25422556
(GDestroyNotify) g_free,

0 commit comments

Comments
 (0)