From 25960be7c786690c14586f3e873012d45935080f Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Thu, 18 Feb 2016 16:05:59 +0100 Subject: load icon from the filesystem (if path is set in the xsession file) if no icon is found as a resource or from the filesystem always load the default linux icon as fallback --- src/sessionsiconholder.cpp | 30 ++++++++++++++++++++++-------- src/sessionsiconholder.h | 1 + src/xsession.cpp | 1 - 3 files changed, 23 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/sessionsiconholder.cpp b/src/sessionsiconholder.cpp index 7cce455..076abe8 100644 --- a/src/sessionsiconholder.cpp +++ b/src/sessionsiconholder.cpp @@ -62,16 +62,17 @@ QIcon SessionsIconHolder::getIcon(const QString& name) { if (icons.contains(name)) { return icons[name]; } - // else load icon from resource QIcon icon; - QString resName(":" + name.toLower()); - if (QResource(resName + ".svg").isValid()) { - icon = QIcon(resName + ".svg"); - } else if (QResource(resName).isValid()) { - icon = QIcon(resName); - } else { - icon = QIcon(); + icon = getIconFromResource(name); + // if we didn't find any, check filesystem + if (icon.isNull() && QFile::exists(name)) { + icon = QIcon(name); + } + if (icon.isNull()) { + // no cached icon, no icon in ressource, no icon in filesystem + // fallback to linux icon if that works ;-) + icon = getIconFromResource("linux"); } // insert icon to hash table @@ -106,3 +107,16 @@ QIcon SessionsIconHolder::getIcon(const QUrl& url) { return QIcon(); } + +QIcon SessionsIconHolder::getIconFromResource(const QString& name) { + QIcon icon; + QString resName(":" + name.toLower()); + if (QResource(resName + ".svg").isValid()) { + icon = QIcon(resName + ".svg"); + } else if (QResource(resName).isValid()) { + icon = QIcon(resName); + } else { + icon = QIcon(); + } + return icon; +} diff --git a/src/sessionsiconholder.h b/src/sessionsiconholder.h index a13156e..d220cfe 100644 --- a/src/sessionsiconholder.h +++ b/src/sessionsiconholder.h @@ -27,6 +27,7 @@ class SessionsIconHolder : public QObject { private: QHash icons; SessionsIconHolder(); + QIcon getIconFromResource(const QString& name); static SessionsIconHolder* instance; signals: diff --git a/src/xsession.cpp b/src/xsession.cpp index ff5de57..171493b 100644 --- a/src/xsession.cpp +++ b/src/xsession.cpp @@ -105,7 +105,6 @@ QIcon XSession::icon() const { icon = "linux"; } } - return SessionsIconHolder::get()->getIcon(icon); } -- cgit v1.2.3-55-g7522