X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Ficonloader.cpp;h=1c3d6e77cba22661a7ef7ecac3a66951ffb60361;hp=d5dbade0982e3747ffbd5b55508dc843444b00c2;hb=45b1e4d624e36de4e21cb647706d9b46091210bf;hpb=57d9abdd9cb8506a12f4a2dbb96fd8d840c380c8 diff --git a/src/uisupport/iconloader.cpp b/src/uisupport/iconloader.cpp index d5dbade0..1c3d6e77 100644 --- a/src/uisupport/iconloader.cpp +++ b/src/uisupport/iconloader.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel IRC Team * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,12 +18,16 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifndef HAVE_KDE + #include #include #include #include #include "iconloader.h" +#include "quassel.h" +#include "util.h" IconLoader IconLoader::_iconLoader; int IconLoader::_groupSize[] = { 48, 22, 22, 16, 32, 22 }; // default sizes taken from Oxygen @@ -50,51 +54,59 @@ void IconLoader::setTheme(const QString &theme) { // check which dirs could contain themed icons _themedIconDirNames.clear(); _plainIconDirNames.clear(); - QString path; - 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) { - path = QString("%1/icons/%2").arg(dir, theme); - if(QFile::exists(path)) - _themedIconDirNames.append(path); + // First, look for a system theme + // This is supposed to only work on Unix, though other platforms might set $XDG_DATA_DIRS if they please. + QStringList iconDirNames = QString(qgetenv("XDG_DATA_DIRS")).split(':', QString::SkipEmptyParts); + if(!iconDirNames.isEmpty()) { + for(int i = 0; i < iconDirNames.count(); i++) + iconDirNames[i].append(QString("/icons/")); } - // Resource for system theme :/icons/$theme - path = QString(":/icons/%2"); - 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); +#ifdef Q_OS_UNIX + else { + // Provide a fallback + iconDirNames << "/usr/share/icons/"; + } + // Add our prefix too + QString appDir = QCoreApplication::applicationDirPath(); + int binpos = appDir.lastIndexOf("/bin"); + if(binpos >= 0) { + appDir.replace(binpos, 4, "/share"); + appDir.append("/icons/"); + if(!iconDirNames.contains(appDir)) + iconDirNames.append(appDir); + } +#endif + + // Now look for an icons/ subdir in our data paths + foreach(const QString &dir, Quassel::dataDirPaths()) + iconDirNames << dir + "icons/"; + + // Add our resource path too + iconDirNames << ":/icons/"; + + // Ready do add theme names + foreach(const QString &dir, iconDirNames) { + QString path = dir + theme + '/'; if(QFile::exists(path)) - _themedIconDirNames.append(path); - path = QString("%1/apps/quassel/pics").arg(dir); + _themedIconDirNames << path; + } + foreach(const QString &dir, iconDirNames) { + QString path = dir + "hicolor/"; if(QFile::exists(path)) - _plainIconDirNames.append(path); + _themedIconDirNames << path; } - // Same for :/icons/hicolor and :/pics - path = QString(":/icons/hicolor"); - if(QFile::exists(path)) - _themedIconDirNames.append(path); + // We ship some plain (non-themed) icons in $data/pics + foreach(const QString &dir, Quassel::dataDirPaths()) { + QString path = dir + "pics/"; + if(QFile::exists(path)) + _plainIconDirNames << path; + } + // And of course, our resource path + if(QFile::exists(":/pics")) + _plainIconDirNames << ":/pics"; - path = QString(":/pics"); - if(QFile::exists(path)) - _plainIconDirNames.append(path); } // TODO: optionally implement cache (speed/memory tradeoff?) @@ -133,6 +145,7 @@ QString IconLoader::findIconPath(const QString &name, int size) { if(QFile::exists(path)) return path; } + qWarning() << "Icon not found:" << name << size; return QString(); } @@ -157,3 +170,5 @@ QPixmap SmallIcon(const QString& name, int force_size) { IconLoader *loader = IconLoader::global(); return loader->loadIcon(name, IconLoader::Small, force_size); } + +#endif