diff --git a/src/util/gtk-utils.cpp b/src/util/gtk-utils.cpp index 88a60c8d..74e913e6 100644 --- a/src/util/gtk-utils.cpp +++ b/src/util/gtk-utils.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "wf-shell-app.hpp" Glib::RefPtr load_icon_pixbuf_safe(std::string icon_path, int size) @@ -115,6 +116,28 @@ Glib::RefPtr get_from_desktop_app_info(std::string app_id) } } + /* The window class may differ from the desktop file ID. */ + for (const auto& info : Gio::AppInfo::get_all()) + { + auto desktop = + std::dynamic_pointer_cast(info); + + if (!desktop) + { + continue; + } + + const auto wm_class = desktop->get_startup_wm_class(); + if (!wm_class.empty() && (wm_class == app_id)) + { + auto icon = desktop->get_icon(); + if (icon) + { + return icon; + } + } + } + return {}; }