Fix iconloader to find icons where we actually install them it -DQUASSEL_ICONS=Extern...
[quassel.git] / src / uisupport / iconloader.cpp
index 688d0b1..b37c462 100644 (file)
@@ -18,6 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
+#include <QCoreApplication>
 #include <QDebug>
 #include <QDir>
 #include <QFile>
@@ -50,7 +51,19 @@ void IconLoader::setTheme(const QString &theme) {
   _themedIconDirNames.clear();
   _plainIconDirNames.clear();
   QString path;
-  QStringList dataDirNames = QString(qgetenv("XDG_DATA_DIRS")).split(':');
+  QStringList dataDirNames = QString(qgetenv("XDG_DATA_DIRS")).split(':', QString::SkipEmptyParts);
+
+// Provide a fallback
+# ifdef Q_OS_UNIX
+    if(dataDirNames.isEmpty()) dataDirNames.append("/usr/share");
+    // on UNIX, we always check our install prefix
+    QString appDir = QCoreApplication::applicationDirPath();
+    int binpos = appDir.lastIndexOf("/bin");
+    if(binpos >= 0) {
+      appDir.replace(binpos, 4, "/share");
+      if(!dataDirNames.contains(appDir)) dataDirNames.append(appDir);
+    }
+# endif
 
   // System theme in $data/icons/$theme
   foreach(QString dir, dataDirNames) {
@@ -59,14 +72,14 @@ void IconLoader::setTheme(const QString &theme) {
       _themedIconDirNames.append(path);
   }
   // Resource for system theme :/icons/$theme
-  path = QString(":/icons/%2");
+  path = QString(":/icons/%1").arg(theme);
   if(QFile::exists(path))
     _themedIconDirNames.append(path);
 
   // Own icons in $data/apps/quassel/icons/hicolor
   // Also, plain icon dirs $data/apps/quassel/pics
   foreach(QString dir, dataDirNames) {
-    path = QString("%1/apps/quassel/icons/hicolor").arg(dir);
+    path = QString("%1/icons/hicolor").arg(dir);
     if(QFile::exists(path))
       _themedIconDirNames.append(path);
     path = QString("%1/apps/quassel/pics").arg(dir);