QStringList QIconLoader::themeSearchPaths() const { if (m_iconDirs.isEmpty()) { m_iconDirs = qt_guiPlatformPlugin()->iconThemeSearchPaths(); // Allways add resource directory as search path m_iconDirs.append(QLatin1String(":/icons")); } return m_iconDirs; }
// Queries the system theme and invalidates existing // icons if the theme has changed. void QIconLoader::updateSystemTheme() { // Only change if this is not explicitly set by the user if (m_userTheme.isEmpty()) { QString theme = qt_guiPlatformPlugin()->systemIconThemeName(); if (theme.isEmpty()) theme = fallbackTheme(); if (theme != m_systemTheme) { m_systemTheme = theme; invalidateKey(); } } }
// We lazily initialize the loader to make static icons // work. Though we do not officially support this. void QIconLoader::ensureInitialized() { if (!m_initialized) { m_initialized = true; Q_ASSERT(qApp); m_systemTheme = qt_guiPlatformPlugin()->systemIconThemeName(); if (m_systemTheme.isEmpty()) m_systemTheme = fallbackTheme(); #ifndef QT_NO_LIBRARY QFactoryLoader iconFactoryLoader(QIconEngineFactoryInterfaceV2_iid, QLatin1String("/iconengines"), Qt::CaseInsensitive); if (iconFactoryLoader.keys().contains(QLatin1String("svg"))) m_supportsSvg = true; #endif //QT_NO_LIBRARY } }
QIcon QFileIconProvider::icon(const QFileInfo &info) const { Q_D(const QFileIconProvider); QIcon platformIcon = qt_guiPlatformPlugin()->fileSystemIcon(info); if (!platformIcon.isNull()) return platformIcon; #if defined(Q_WS_X11) && !defined(QT_NO_STYLE_GTK) if (X11->desktopEnvironment == DE_GNOME) { QIcon gtkIcon = QGtkStylePrivate::getFilesystemIcon(info); if (!gtkIcon.isNull()) return gtkIcon; } #endif #ifdef Q_WS_MAC QIcon retIcon = d->getMacIcon(info); if (!retIcon.isNull()) return retIcon; #elif defined Q_WS_WIN QIcon icon = d->getWinIcon(info); if (!icon.isNull()) return icon; #elif defined Q_WS_HAIKU QIcon icon = d->getHaikuIcon(info); if (!icon.isNull()) return icon; #endif if (info.isRoot()) #if defined (Q_WS_WIN) && !defined(Q_WS_WINCE) { UINT type = GetDriveType((wchar_t *)info.absoluteFilePath().utf16()); switch (type) { case DRIVE_REMOVABLE: return d->getIcon(QStyle::SP_DriveFDIcon); case DRIVE_FIXED: return d->getIcon(QStyle::SP_DriveHDIcon); case DRIVE_REMOTE: return d->getIcon(QStyle::SP_DriveNetIcon); case DRIVE_CDROM: return d->getIcon(QStyle::SP_DriveCDIcon); case DRIVE_RAMDISK: case DRIVE_UNKNOWN: case DRIVE_NO_ROOT_DIR: default: return d->getIcon(QStyle::SP_DriveHDIcon); } } #else return d->getIcon(QStyle::SP_DriveHDIcon); #endif if (info.isFile()) { if (info.isSymLink()) return d->getIcon(QStyle::SP_FileLinkIcon); else return d->getIcon(QStyle::SP_FileIcon); } if (info.isDir()) { if (info.isSymLink()) { return d->getIcon(QStyle::SP_DirLinkIcon); } else { if (info.absoluteFilePath() == d->homePath) { return d->getIcon(QStyle::SP_DirHomeIcon); } else { return d->getIcon(QStyle::SP_DirIcon); } } } return QIcon(); }