X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fstatusnotifieritem.cpp;h=dc33b9782dd1f6916f41e33cf63bead198b13fc7;hp=0965eeff7913da7fe987b0c0f1ec085bfa338155;hb=f788ce32deb5df0351488c908fd5bacd25d7b6cf;hpb=b4b4d30567ea2d5c5bfaff8d019cf7ff5d023538 diff --git a/src/qtui/statusnotifieritem.cpp b/src/qtui/statusnotifieritem.cpp index 0965eeff..dc33b978 100644 --- a/src/qtui/statusnotifieritem.cpp +++ b/src/qtui/statusnotifieritem.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -184,16 +185,27 @@ void StatusNotifierItem::refreshIcons() QDir baseDir{_iconThemePath + "/hicolor"}; baseDir.removeRecursively(); for (auto &&trayState : { State::Active, State::Passive, State::NeedsAttention }) { - QIcon icon = QIcon::fromTheme(SystemTray::iconName(trayState)); - if (!icon.name().isEmpty()) { + auto iconName = SystemTray::iconName(trayState); + QIcon icon = QIcon::fromTheme(iconName); + if (!icon.isNull()) { for (auto &&size : icon.availableSizes()) { auto pixDir = QString{"%1/%2x%3/status"}.arg(baseDir.absolutePath()).arg(size.width()).arg(size.height()); QDir{}.mkpath(pixDir); - if (!icon.pixmap(size).save(pixDir + "/" + icon.name() + ".png")) { - qWarning() << "Could not save tray icon" << icon.name() << "for size" << size; + if (!icon.pixmap(size).save(pixDir + "/" + iconName + ".png")) { + qWarning() << "Could not save tray icon" << iconName << "for size" << size; } } } + else { + // No theme icon found; use fallback from resources + auto iconDir = QString{"%1/24x24/status"}.arg(baseDir.absolutePath()); + QDir{}.mkpath(iconDir); + if (!QFile::copy(QString{":/icons/hicolor/24x24/status/%1.svg"}.arg(iconName), + QString{"%1/%2.svg"}.arg(iconDir, iconName))) { + qWarning() << "Could not access fallback tray icon" << iconName; + continue; + } + } } } #endif