瀏覽代碼

FileManager: Show a special icon for the home directory

The home-directory icon now shows up in the FileManager title bar,
and alongside the path in the location textbox. Very nice. :^)
Andreas Kling 5 年之前
父節點
當前提交
f286eb7fcd
共有 1 個文件被更改,包括 21 次插入3 次删除
  1. 21 3
      Applications/FileManager/main.cpp

+ 21 - 3
Applications/FileManager/main.cpp

@@ -66,6 +66,18 @@
 static int run_in_desktop_mode(RefPtr<Core::ConfigFile>, String initial_location);
 static int run_in_windowed_mode(RefPtr<Core::ConfigFile>, String initial_location);
 
+static Gfx::Bitmap& folder_icon()
+{
+    static RefPtr<Gfx::Bitmap> icon = Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-folder.png");
+    return *icon;
+}
+
+static Gfx::Bitmap& home_directory_icon()
+{
+    static RefPtr<Gfx::Bitmap> icon = Gfx::Bitmap::load_from_file("/res/icons/16x16/home-directory.png");
+    return *icon;
+}
+
 int main(int argc, char** argv)
 {
     if (pledge("stdio thread shared_buffer accept unix cpath rpath wpath fattr proc exec sigaction", nullptr) < 0) {
@@ -256,7 +268,6 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
     auto& location_textbox = location_toolbar.add<GUI::TextBox>();
     location_textbox.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
     location_textbox.set_preferred_size(0, 22);
-    location_textbox.set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-folder.png"));
 
     auto& splitter = widget.add<GUI::HorizontalSplitter>();
     auto& tree_view = splitter.add<GUI::TreeView>();
@@ -697,6 +708,15 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
     main_toolbar.add_action(*view_as_columns_action);
 
     directory_view.on_path_change = [&](const String& new_path) {
+        const  Gfx::Bitmap* icon = nullptr;
+        if (new_path == Core::StandardPaths::home_directory())
+            icon = &home_directory_icon();
+        else
+            icon = &folder_icon();
+
+        window->set_icon(icon);
+        location_textbox.set_icon(icon);
+
         window->set_title(String::format("%s - File Manager", new_path.characters()));
         location_textbox.set_text(new_path);
         auto new_index = directories_model->index(new_path, GUI::FileSystemModel::Column::Name);
@@ -916,8 +936,6 @@ int run_in_windowed_mode(RefPtr<Core::ConfigFile> config, String initial_locatio
 
     window->show();
 
-    window->set_icon(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-folder.png"));
-
     // Read direcory read mode from config.
     auto dir_view_mode = config->read_entry("DirectoryView", "ViewMode", "Icon");