From 1a4b1ecd04ec433a116b6bebdfa40fce7631f86c Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Wed, 4 Aug 2021 13:16:26 +0200 Subject: [PATCH] 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. --- Userland/Libraries/LibDesktop/AppFile.cpp | 15 +++++++++++++++ Userland/Libraries/LibDesktop/AppFile.h | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibDesktop/AppFile.cpp b/Userland/Libraries/LibDesktop/AppFile.cpp index 405a2c28e7..de24b80c73 100644 --- a/Userland/Libraries/LibDesktop/AppFile.cpp +++ b/Userland/Libraries/LibDesktop/AppFile.cpp @@ -87,6 +87,21 @@ String AppFile::category() const 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 { return m_config->read_bool_entry("App", "RunInTerminal", false); diff --git a/Userland/Libraries/LibDesktop/AppFile.h b/Userland/Libraries/LibDesktop/AppFile.h index ffcbc5fde9..e67a4ec9b9 100644 --- a/Userland/Libraries/LibDesktop/AppFile.h +++ b/Userland/Libraries/LibDesktop/AppFile.h @@ -27,13 +27,13 @@ public: String executable() const; String category() const; String description() const; + String icon_path() const; + GUI::Icon icon() const; bool run_in_terminal() const; Vector launcher_file_types() const; Vector launcher_protocols() const; bool spawn() const; - GUI::Icon icon() const { return GUI::FileIconProvider::icon_for_path(executable()); }; - private: explicit AppFile(const StringView& path);