diff options
author | Tommy Nguyen <remyabel@gmail.com> | 2019-12-02 19:54:29 -0500 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-12-03 12:50:47 +0100 |
commit | 9a01e70ff9bd04b5f2aee928013f233b1465aceb (patch) | |
tree | 9a9c5fc72582c13e596d71a9b994c6c125561503 /Applications | |
parent | 6db11e5bba2a56c983569eb95ebb06e70a4f592c (diff) | |
download | serenity-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.cpp | 38 |
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; |