From fd42f7e1b8eaf1c0d12ae86cfd91025c0e77b1f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrico=20Tr=C3=B6ger?= Date: Sun, 11 Sep 2022 17:26:17 +0200 Subject: [PATCH] TreeBrowser: Fix refresh from popup menu with a selected file Closes #1194. --- treebrowser/src/treebrowser.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/treebrowser/src/treebrowser.c b/treebrowser/src/treebrowser.c index 28d4e9c10..c693d5797 100644 --- a/treebrowser/src/treebrowser.c +++ b/treebrowser/src/treebrowser.c @@ -1163,15 +1163,34 @@ static void on_menu_refresh(GtkMenuItem *menuitem, gpointer *user_data) { GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); - GtkTreeIter iter; + GtkTreeIter iter, parent_iter; + GtkTreeIter *target_iter = NULL; GtkTreeModel *model; gchar *uri; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1); + /* if a directory is selected, use it directly for treebrowser_browse() + * if a file within a directory is selected, use its parent for treebrowser_browse() + * if a file on the top level is selected, use *no* parent for treebrowser_browse() */ if (g_file_test(uri, G_FILE_TEST_IS_DIR)) - treebrowser_browse(uri, &iter); + target_iter = &iter; + else + { + if (gtk_tree_model_iter_parent(model, &parent_iter, &iter)) + { + g_free(uri); + gtk_tree_model_get(model, &iter, TREEBROWSER_COLUMN_URI, &uri, -1); + target_iter = &parent_iter; + } + else + { + SETPTR(uri, g_path_get_dirname(uri)); + target_iter = NULL; + } + } + treebrowser_browse(uri, target_iter); g_free(uri); } else