diff options
author | Ruslan Nigmatullin <euroelessar@yandex.ru> | 2014-03-31 03:54:06 +0400 |
---|---|---|
committer | Konstantin Ritt <ritt.ks@gmail.com> | 2015-02-02 23:28:19 +0000 |
commit | a40d390a3bbc1919843000b427a168180b83a344 (patch) | |
tree | 05121f7154fed3bc8a167460f9cc8aca0687995f /src/gui/image/qiconloader_p.h | |
parent | a9066ecf646134009494f68a0365d4549d999c66 (diff) |
Fixed icons lookup in QIcon::fromTheme
This commit fixes incorrect logic of icons' lookup if there are
fallbacks or more than one theme's directory.
According to Icon Theme Specification, Directory Layout section, theme
can be spread across several base directories by having subdirectories
of the same name. This makes possible to extend system themes by
application-specific icons without making of collisions with other
applications.
According to Icon Naming Specification, Icon Naming Guidelines section,
icon name may contain dashes to separate levels of specificity in icon
names. This makes possible to set in application very specific icon
which may be not in every theme. So it can fallback to less specific one.
Change-Id: Iafc813902a3646be56e8f1d3a2fdbf8fd32ac542
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/gui/image/qiconloader_p.h')
-rw-r--r-- | src/gui/image/qiconloader_p.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h index 50a6e6d3a7..8ee730f307 100644 --- a/src/gui/image/qiconloader_p.h +++ b/src/gui/image/qiconloader_p.h @@ -106,6 +106,12 @@ struct PixmapEntry : public QIconLoaderEngineEntry typedef QList<QIconLoaderEngineEntry*> QThemeIconEntries; +struct QThemeIconInfo +{ + QThemeIconEntries entries; + QString iconName; +}; + class QIconLoaderEngine : public QIconEngine { public: @@ -126,7 +132,7 @@ private: void virtual_hook(int id, void *data); QIconLoaderEngineEntry *entryForSize(const QSize &size); QIconLoaderEngine(const QIconLoaderEngine &other); - QThemeIconEntries m_entries; + QThemeIconInfo m_info; QString m_iconName; uint m_key; @@ -140,11 +146,11 @@ public: QIconTheme() : m_valid(false) {} QStringList parents() { return m_parents; } QVector<QIconDirInfo> keyList() { return m_keyList; } - QString contentDir() { return m_contentDir; } + QStringList contentDirs() { return m_contentDirs; } bool isValid() { return m_valid; } private: - QString m_contentDir; + QStringList m_contentDirs; QVector<QIconDirInfo> m_keyList; QStringList m_parents; bool m_valid; @@ -154,7 +160,7 @@ class Q_GUI_EXPORT QIconLoader { public: QIconLoader(); - QThemeIconEntries loadIcon(const QString &iconName) const; + QThemeIconInfo loadIcon(const QString &iconName) const; uint themeKey() const { return m_themeKey; } QString themeName() const { return m_userTheme.isEmpty() ? m_systemTheme : m_userTheme; } @@ -169,9 +175,9 @@ public: void ensureInitialized(); private: - QThemeIconEntries findIconHelper(const QString &themeName, - const QString &iconName, - QStringList &visited) const; + QThemeIconInfo findIconHelper(const QString &themeName, + const QString &iconName, + QStringList &visited) const; uint m_themeKey; bool m_supportsSvg; bool m_initialized; |