summaryrefslogtreecommitdiff
path: root/Applications
diff options
context:
space:
mode:
authorTommy Nguyen <remyabel@gmail.com>2019-12-02 19:54:29 -0500
committerAndreas Kling <awesomekling@gmail.com>2019-12-03 12:50:47 +0100
commit9a01e70ff9bd04b5f2aee928013f233b1465aceb (patch)
tree9a9c5fc72582c13e596d71a9b994c6c125561503 /Applications
parent6db11e5bba2a56c983569eb95ebb06e70a4f592c (diff)
downloadserenity-9a01e70ff9bd04b5f2aee928013f233b1465aceb.zip
FileManager: Refresh tree view when deleting directories
Fixes #825 The logic already existed. I just moved it to a separate lambda then added it to the appropriate action. Note that when the tree view refreshes, it seems to randomly open trees. I would like to fix this in a separate PR.
Diffstat (limited to 'Applications')
-rw-r--r--Applications/FileManager/main.cpp38
1 files changed, 23 insertions, 15 deletions
diff --git a/Applications/FileManager/main.cpp b/Applications/FileManager/main.cpp
index 6f3155b72f..d4380cf5c2 100644
--- a/Applications/FileManager/main.cpp
+++ b/Applications/FileManager/main.cpp
@@ -96,6 +96,24 @@ int main(int argc, char** argv)
directory_view->open(path);
};
+ auto refresh_tree_view = [&] {
+ file_system_model->update();
+
+ auto current_path = directory_view->path();
+
+ // not exactly sure why i have to reselect the root node first, but the index() fails if I dont
+ auto root_index = file_system_model->index(file_system_model->root_path());
+ tree_view->selection().set(root_index);
+
+ // reselect the existing folder in the tree
+ auto new_index = file_system_model->index(current_path);
+ tree_view->selection().set(new_index);
+ tree_view->scroll_into_view(new_index, Orientation::Vertical);
+ tree_view->update();
+
+ directory_view->refresh();
+ };
+
auto open_parent_directory_action = GAction::create("Open parent directory", { Mod_Alt, Key_Up }, GraphicsBitmap::load_from_file("/res/icons/16x16/open-parent-directory.png"), [&](const GAction&) {
directory_view->open_parent_directory();
});
@@ -111,21 +129,7 @@ int main(int argc, char** argv)
if (rc < 0) {
GMessageBox::show(String::format("mkdir(\"%s\") failed: %s", new_dir_path.characters(), strerror(errno)), "Error", GMessageBox::Type::Error, GMessageBox::InputType::OK, window);
} else {
- file_system_model->update();
-
- auto current_path = directory_view->path();
-
- // not exactly sure why i have to reselect the root node first, but the index() fails if I dont
- auto root_index = file_system_model->index(file_system_model->root_path());
- tree_view->selection().set(root_index);
-
- // reselect the existing folder in the tree
- auto new_index = file_system_model->index(current_path);
- tree_view->selection().set(new_index);
- tree_view->scroll_into_view(new_index, Orientation::Vertical);
- tree_view->update();
-
- directory_view->refresh();
+ refresh_tree_view();
}
}
});
@@ -263,6 +267,8 @@ int main(int argc, char** argv)
GMessageBox::InputType::OK,
window);
break;
+ } else {
+ refresh_tree_view();
}
if (S_ISDIR(st.st_mode)) {
@@ -277,6 +283,8 @@ int main(int argc, char** argv)
GMessageBox::InputType::OK,
window);
break;
+ } else {
+ refresh_tree_view();
}
} else if (unlink(path.characters()) < 0) {
int saved_errno = errno;