diff options
author | Andreas Kling <kling@serenityos.org> | 2020-07-18 18:46:37 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-07-19 21:15:00 +0200 |
commit | 9710c9742ca55986abc4cb7e9f21c95bc3ad4db0 (patch) | |
tree | 5fad2b15e398f9d52aede401e47f79b9dbe0cf5c | |
parent | ad57a2f18b4915ba57b9c9e1e9c0ddd6ff4cfe2a (diff) | |
download | serenity-9710c9742ca55986abc4cb7e9f21c95bc3ad4db0.zip |
LibGUI+FileManager: Add setting for showing/hiding dotfiles
GUI::FileSystemModel can now be told to display (or not display) files
whose name start with a dot (other than . and ..)
-rw-r--r-- | Applications/FileManager/main.cpp | 4 | ||||
-rw-r--r-- | Libraries/LibGUI/FileSystemModel.cpp | 10 | ||||
-rw-r--r-- | Libraries/LibGUI/FileSystemModel.h | 5 |
3 files changed, 18 insertions, 1 deletions
diff --git a/Applications/FileManager/main.cpp b/Applications/FileManager/main.cpp index 4f3a7e3088..474d7bf9db 100644 --- a/Applications/FileManager/main.cpp +++ b/Applications/FileManager/main.cpp @@ -655,6 +655,10 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio view_menu.add_action(*view_as_icons_action); view_menu.add_action(*view_as_table_action); view_menu.add_action(*view_as_columns_action); + view_menu.add_separator(); + view_menu.add_action(GUI::Action::create_checkable("Show dotfiles", { Mod_Ctrl, Key_H }, [&](auto& action) { + directory_view.model().set_should_show_dotfiles(action.is_checked()); + })); auto& go_menu = menubar->add_menu("Go"); go_menu.add_action(go_back_action); diff --git a/Libraries/LibGUI/FileSystemModel.cpp b/Libraries/LibGUI/FileSystemModel.cpp index 2fc0913a60..bff0f5857e 100644 --- a/Libraries/LibGUI/FileSystemModel.cpp +++ b/Libraries/LibGUI/FileSystemModel.cpp @@ -91,7 +91,7 @@ void FileSystemModel::Node::traverse_if_needed(const FileSystemModel& model) total_size = 0; auto full_path = this->full_path(model); - Core::DirIterator di(full_path, Core::DirIterator::SkipDots); + Core::DirIterator di(full_path, model.should_show_dotfiles() ? Core::DirIterator::SkipParentAndBaseDir : Core::DirIterator::SkipDots); if (di.has_error()) { m_error = di.error(); fprintf(stderr, "DirIterator: %s\n", di.error_string()); @@ -600,4 +600,12 @@ bool FileSystemModel::accepts_drag(const ModelIndex& index, const StringView& da return node.is_directory(); } +void FileSystemModel::set_should_show_dotfiles(bool show) +{ + if (m_should_show_dotfiles == show) + return; + m_should_show_dotfiles = show; + update(); +} + } diff --git a/Libraries/LibGUI/FileSystemModel.h b/Libraries/LibGUI/FileSystemModel.h index 1ebbb8e39d..2dd020de29 100644 --- a/Libraries/LibGUI/FileSystemModel.h +++ b/Libraries/LibGUI/FileSystemModel.h @@ -162,6 +162,9 @@ public: return Core::DateTime::from_timestamp(timestamp).to_string(); } + bool should_show_dotfiles() const { return m_should_show_dotfiles; } + void set_should_show_dotfiles(bool); + private: FileSystemModel(const StringView& root_path, Mode); @@ -192,6 +195,8 @@ private: unsigned m_thumbnail_progress { 0 }; unsigned m_thumbnail_progress_total { 0 }; + + bool m_should_show_dotfiles { false }; }; } |