diff --git a/src/skin/SkinChooser.cpp b/src/skin/SkinChooser.cpp index 90bce8e..01ea3b0 100644 --- a/src/skin/SkinChooser.cpp +++ b/src/skin/SkinChooser.cpp @@ -75,7 +75,7 @@ SkinList::SkinList (QWidget *parent) : QListWidget (parent) } foreach (QFileInfo fileInfo, list) { - QPixmap p = Skin::getPixmap ("main", fileInfo.filePath()); + QPixmap p = Skin::getMainPixmap (fileInfo.filePath()); if (!p.isNull()) { new SkinChooserItem (QIcon (p), fileInfo.baseName (), fileInfo.absoluteFilePath (), this); diff --git a/src/skin/skin.cpp b/src/skin/skin.cpp index fd2c49d..efe843d 100644 --- a/src/skin/skin.cpp +++ b/src/skin/skin.cpp @@ -801,6 +801,34 @@ Skin::setSkin (const QString& path) return true; } +const QPixmap +Skin::getMainPixmap (const QString& path) +{ + DirIteratorBase *iter = DirIteratorBase::open(path); + if (iter == 0) { + return QPixmap (); + } + + QString entry; + QPixmap ret = QPixmap (); + while (!(entry = iter->next ().toLower ()).isEmpty ()) { + if ((entry = QFileInfo (entry).fileName ()).isEmpty ()) { + // workaround to ignore pathes in archives + continue; + } + entry = entry.section(".", 0, 0); + if (entry == "main") { + ret = iter->pixmapEntry (); + if (!ret.isNull ()) + break; + } + } + + delete iter; + + return ret; +} + const QPixmap Skin::getPixmap (const QString& file, const QString &path) { diff --git a/src/skin/skin.h b/src/skin/skin.h index 21215c6..e3d6765 100644 --- a/src/skin/skin.h +++ b/src/skin/skin.h @@ -42,6 +42,7 @@ class Skin : public QObject const bool isValid () const {return m_valid;} static const QPixmap getPixmap (const QString&, const QString&); + static const QPixmap getMainPixmap (const QString& path); const QSize getSize (uint item) const { return m_sizes.value (item); }