Jelajahi Sumber

LibDesktop: Add support for IconPath in AppFile

With `IconPath`, you can override the icon used for the application
shortcut. This currently only supports resolving the icon through
`GUI::FileIconProvider`, the implementation for pointing to actual
image files is left as an exercise for the reader.
Jelle Raaijmakers 3 tahun lalu
induk
melakukan
1a4b1ecd04

+ 15 - 0
Userland/Libraries/LibDesktop/AppFile.cpp

@@ -87,6 +87,21 @@ String AppFile::category() const
     return m_config->read_entry("App", "Category").trim_whitespace();
     return m_config->read_entry("App", "Category").trim_whitespace();
 }
 }
 
 
+String AppFile::icon_path() const
+{
+    return m_config->read_entry("App", "IconPath").trim_whitespace();
+}
+
+GUI::Icon AppFile::icon() const
+{
+    auto override_icon = icon_path();
+    // FIXME: support pointing to actual .ico files
+    if (!override_icon.is_empty())
+        return GUI::FileIconProvider::icon_for_path(override_icon);
+
+    return GUI::FileIconProvider::icon_for_path(executable());
+}
+
 bool AppFile::run_in_terminal() const
 bool AppFile::run_in_terminal() const
 {
 {
     return m_config->read_bool_entry("App", "RunInTerminal", false);
     return m_config->read_bool_entry("App", "RunInTerminal", false);

+ 2 - 2
Userland/Libraries/LibDesktop/AppFile.h

@@ -27,13 +27,13 @@ public:
     String executable() const;
     String executable() const;
     String category() const;
     String category() const;
     String description() const;
     String description() const;
+    String icon_path() const;
+    GUI::Icon icon() const;
     bool run_in_terminal() const;
     bool run_in_terminal() const;
     Vector<String> launcher_file_types() const;
     Vector<String> launcher_file_types() const;
     Vector<String> launcher_protocols() const;
     Vector<String> launcher_protocols() const;
     bool spawn() const;
     bool spawn() const;
 
 
-    GUI::Icon icon() const { return GUI::FileIconProvider::icon_for_path(executable()); };
-
 private:
 private:
     explicit AppFile(const StringView& path);
     explicit AppFile(const StringView& path);