From dc59b25b445e7ab6fbb2cb76e09797b038564fa3 Mon Sep 17 00:00:00 2001 From: DrSlony Date: Thu, 19 Mar 2015 09:34:02 +0100 Subject: [PATCH] Don't display arrow for File Browser's item if doesn't contains subfolders, issue 1390 and issue 2678 #5, patch by prizzrak --- rtgui/dirbrowser.cc | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/rtgui/dirbrowser.cc b/rtgui/dirbrowser.cc index 502a620a2..74b0bc3fb 100644 --- a/rtgui/dirbrowser.cc +++ b/rtgui/dirbrowser.cc @@ -263,14 +263,40 @@ void DirBrowser::updateDir (const Gtk::TreeModel::iterator& iter) { void DirBrowser::addDir (const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirname) { - Gtk::TreeModel::iterator child = dirTreeModel->append(iter->children()); + const Gtk::TreeNodeChildren it = iter->children(); + + Gtk::TreeModel::iterator child = dirTreeModel->append(it); child->set_value (dtColumns.filename, dirname); child->set_value (0, openfolder); child->set_value (1, closedfolder); Glib::ustring fullname = Glib::build_filename (iter->get_value (dtColumns.dirname), dirname); child->set_value (dtColumns.dirname, fullname); - Gtk::TreeModel::iterator fooRow = dirTreeModel->append(child->children()); - fooRow->set_value (dtColumns.filename, Glib::ustring("foo")); + if (!safe_file_test(fullname, Glib::FILE_TEST_IS_DIR)) { + return; + } + + try { + Glib::RefPtr dir = Gio::File::create_for_path(fullname); + Glib::RefPtr dirList = dir->enumerate_children("standard::type"); + if (dirList) { + + bool canBeExpanded = false; + for (Glib::RefPtr info = dirList->next_file(); info; info = dirList->next_file()) { + if (info->get_file_type() == Gio::FILE_TYPE_DIRECTORY || + info->get_file_type() == Gio::FILE_TYPE_SYMBOLIC_LINK) { + canBeExpanded = true; + break; + } + } + if (canBeExpanded) { + Gtk::TreeModel::iterator fooRow = dirTreeModel->append(child->children()); + fooRow->set_value(dtColumns.filename, Glib::ustring("foo")); + } + } + } + catch (...) { + // will catch excepions like 'Permission denied' + } } void DirBrowser::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column) {