Skip to content

Commit

Permalink
Fix hidden directories not showing in a tree view
Browse files Browse the repository at this point in the history
Directory tree view contains code that when "Show hidden files or folders"
option is not enabled but the user enters a path containing hidden
directories the missing tree entries are added automatically.

This didn't work (at least) in case when the first hidden directory in
newly selected path was in a current directory because the tree populating
function exited early when directory contents did not change since last
run, before checking for this special case.

Fix this by skipping this check when we have to add such hidden directory
entry.

This check must also be skipped when 'force' flag is passed to this
function, otherwise when enabling "Show hidden files or folders" option
the missing directories are not added to the tree until Geeqie is
restarted.

Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
  • Loading branch information
maciejsszmigiero committed Jul 9, 2016
1 parent 3e8045c commit 56b0d41
Showing 1 changed file with 22 additions and 15 deletions.
37 changes: 22 additions & 15 deletions src/view_dir_tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,7 @@ gboolean vdtree_populate_path_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean f
time_t current_time;
GtkTreeIter child;
NodeData *nd;
gboolean add_hidden = FALSE;

store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view));
gtk_tree_model_get(store, iter, DIR_COLUMN_POINTER, &nd, -1);
Expand All @@ -464,13 +465,8 @@ gboolean vdtree_populate_path_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean f
return TRUE;
}
file_data_check_changed_files(nd->fd); /* make sure we have recent info */
if (nd->fd->version == nd->version) return TRUE;
}

vdtree_busy_push(vd);

filelist_read(nd->fd, NULL, &list);

/* when hidden files are not enabled, and the user enters a hidden path,
* allow the tree to display that path by specifically inserting the hidden entries
*/
Expand All @@ -482,21 +478,32 @@ gboolean vdtree_populate_path_by_iter(ViewDir *vd, GtkTreeIter *iter, gboolean f

n = strlen(nd->fd->path);
if (target_fd->path[n] == G_DIR_SEPARATOR && target_fd->path[n+1] == '.')
{
gchar *name8;
add_hidden = TRUE;
}

n++;
if (nd->expanded && (!force && !add_hidden) && nd->fd->version == nd->version)
return TRUE;

while (target_fd->path[n] != '\0' && target_fd->path[n] != G_DIR_SEPARATOR) n++;
name8 = g_strndup(target_fd->path, n);
vdtree_busy_push(vd);

if (isdir(name8))
{
list = g_list_prepend(list, file_data_new_dir(name8));
}
filelist_read(nd->fd, NULL, &list);

if (add_hidden)
{
gint n;
gchar *name8;

g_free(name8);
n = strlen(nd->fd->path) + 1;

while (target_fd->path[n] != '\0' && target_fd->path[n] != G_DIR_SEPARATOR) n++;
name8 = g_strndup(target_fd->path, n);

if (isdir(name8))
{
list = g_list_prepend(list, file_data_new_dir(name8));
}

g_free(name8);
}

old = NULL;
Expand Down

0 comments on commit 56b0d41

Please sign in to comment.