[Interest] creating a binary .rcc version of a series of Freedesktop icon themes linked through inheritance
René J.V. Bertin
rjvbertin at gmail.com
Sat Jun 24 10:19:03 CEST 2017
Thiago Macieira wrote:
> If you compile them with qrc, then they register themselves.
Basically that would mean that qrc knows how to deal with inheritance declarations in the icon theme index.theme files?
> Sorry, I don't know the API.
It aims to be very simple and allow application developers to install an "icontheme.rcc" file in a QSP::AppDataLocation, which is then used for all theme lookups. It could of course be extended to load a plugin/shared library if there's a significant advantage in what one can do with that approach. But in that case it might even be possible to use a kind of plugin that Qt loads automatically during global startup?
Q_GLOBAL_STATIC(QString, _themeOverride)
// Support for icon themes in RCC files.
// The intended use case is standalone apps on Windows / MacOS / etc.
// For this reason we use AppDataLocation: BINDIR/data on Windows, Resources on OS X
void initRCCIconTheme()
{
const QString iconThemeRcc = QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("icontheme.rcc"));
if (!iconThemeRcc.isEmpty()) {
const QString iconThemeName = QStringLiteral("kf5_rcc_theme");
const QString iconSubdir = QStringLiteral("/icons/") + iconThemeName;
if (QResource::registerResource(iconThemeRcc, iconSubdir)) {
if (QFileInfo::exists(QLatin1Char(':') + iconSubdir + QStringLiteral("/index.theme"))) {
// Tell Qt about the theme
// Note that since qtbase commit a8621a3f8, this means the QPA (i.e. KIconLoader) will NOT be used.
QIcon::setThemeName(iconThemeName); // Qt looks under :/icons automatically
// Tell KIconTheme about the theme, in case KIconLoader is used directly
*_themeOverride() = iconThemeName;
} else {
qWarning() << "No index.theme found in" << iconThemeRcc;
QResource::unregisterResource(iconThemeRcc, iconSubdir);
}
} else {
qWarning() << "Invalid rcc file" << iconThemeRcc;
}
}
}
Q_COREAPP_STARTUP_FUNCTION(initRCCIconTheme)
More information about the Interest
mailing list