Use correct on-disk pixmap cache
svn path=/trunk/KDE/kdelibs/; revision=1206190
This commit is contained in:
parent
e04e91e9ad
commit
0594bd9d85
58
theme.cpp
58
theme.cpp
@ -62,6 +62,14 @@ enum styles {
|
||||
SVGSTYLE
|
||||
};
|
||||
|
||||
enum CacheType {
|
||||
NoCache = 0,
|
||||
PixmapCache = 1,
|
||||
SvgElementsCache = 2
|
||||
};
|
||||
Q_DECLARE_FLAGS(CacheTypes, CacheType)
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(CacheTypes)
|
||||
|
||||
class ThemePrivate
|
||||
{
|
||||
public:
|
||||
@ -132,7 +140,7 @@ public:
|
||||
|
||||
QString findInTheme(const QString &image, const QString &theme) const;
|
||||
void compositingChanged();
|
||||
void discardCache(const QString &oldThemeName = QString(), bool keepSvgElementsCache = false);
|
||||
void discardCache(CacheTypes caches);
|
||||
void scheduledCacheUpdate();
|
||||
void colorsChanged();
|
||||
bool useCache();
|
||||
@ -196,6 +204,17 @@ bool ThemePrivate::useCache()
|
||||
if (cacheTheme && !pixmapCache) {
|
||||
ThemeConfig config;
|
||||
pixmapCache = new KImageCache("plasma_theme_" + themeName, config.themeCacheKb() * 1024);
|
||||
if (themeName != systemColorsTheme) {
|
||||
//check for expired cache
|
||||
// FIXME: when using the system colors, if they change while the application is not running
|
||||
// the cache should be dropped; we need a way to detect system color change when the
|
||||
// application is not running.
|
||||
QFile f(KStandardDirs::locate("data", "desktoptheme/" + themeName + "/metadata.desktop"));
|
||||
QFileInfo info(f);
|
||||
if (info.lastModified().toTime_t() > pixmapCache->lastModifiedTime()) {
|
||||
pixmapCache->clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return cacheTheme;
|
||||
@ -241,32 +260,29 @@ void ThemePrivate::compositingChanged()
|
||||
|
||||
if (compositingActive != nowCompositingActive) {
|
||||
compositingActive = nowCompositingActive;
|
||||
discardCache();
|
||||
discardCache(PixmapCache | SvgElementsCache);
|
||||
emit q->themeChanged();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void ThemePrivate::discardCache(const QString &oldThemeName, bool keepSvgElementsCache)
|
||||
void ThemePrivate::discardCache(CacheTypes caches)
|
||||
{
|
||||
if (oldThemeName.isEmpty()) {
|
||||
if (caches & PixmapCache) {
|
||||
if (pixmapCache) {
|
||||
pixmapCache->clear();
|
||||
}
|
||||
} else {
|
||||
// This deletes the object but keeps the on-disk cache for later use
|
||||
delete pixmapCache;
|
||||
pixmapCache = 0;
|
||||
KSharedDataCache::deleteCache("plasma_theme_" + oldThemeName);
|
||||
}
|
||||
cachedStyleSheets.clear();
|
||||
invalidElements.clear();
|
||||
pixmapsToCache.clear();
|
||||
saveTimer->stop();
|
||||
|
||||
if (keepSvgElementsCache) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (caches & SvgElementsCache) {
|
||||
if (svgElementsCache) {
|
||||
QFile f(svgElementsCache->name());
|
||||
svgElementsCache = 0;
|
||||
@ -275,6 +291,7 @@ void ThemePrivate::discardCache(const QString &oldThemeName, bool keepSvgElement
|
||||
|
||||
const QString svgElementsFile = KStandardDirs::locateLocal("cache", "plasma-svgelements-" + themeName);
|
||||
svgElementsCache = KSharedConfig::openConfig(svgElementsFile);
|
||||
}
|
||||
}
|
||||
|
||||
void ThemePrivate::scheduledCacheUpdate()
|
||||
@ -292,7 +309,7 @@ void ThemePrivate::scheduledCacheUpdate()
|
||||
|
||||
void ThemePrivate::colorsChanged()
|
||||
{
|
||||
discardCache(QString(), true);
|
||||
discardCache(PixmapCache);
|
||||
colorScheme = KColorScheme(QPalette::Active, KColorScheme::Window, colors);
|
||||
buttonColorScheme = KColorScheme(QPalette::Active, KColorScheme::Button, colors);
|
||||
viewColorScheme = KColorScheme(QPalette::Active, KColorScheme::View, colors);
|
||||
@ -553,8 +570,6 @@ void ThemePrivate::setThemeName(const QString &tempThemeName, bool writeSettings
|
||||
return;
|
||||
}
|
||||
|
||||
const QString oldThemeName = themeName;
|
||||
|
||||
themeName = theme;
|
||||
|
||||
// load the color scheme config
|
||||
@ -562,7 +577,6 @@ void ThemePrivate::setThemeName(const QString &tempThemeName, bool writeSettings
|
||||
: QString();
|
||||
|
||||
//kDebug() << "we're going for..." << colorsFile << "*******************";
|
||||
bool expireCache = false;
|
||||
|
||||
// load the wallpaper settings, if any
|
||||
if (realTheme) {
|
||||
@ -603,17 +617,6 @@ void ThemePrivate::setThemeName(const QString &tempThemeName, bool writeSettings
|
||||
processAnimationSettings(theme, &metadata);
|
||||
processWallpaperSettings(&metadata);
|
||||
}
|
||||
|
||||
//check for expired cache
|
||||
// FIXME: when using the system colors, if they change while the application is not running
|
||||
// the cache should be dropped; we need a way to detect system color change when the
|
||||
// application is not running.
|
||||
QFile f(metadataPath);
|
||||
QFileInfo info(f);
|
||||
|
||||
if (useCache() && info.lastModified().toTime_t() > pixmapCache->lastModifiedTime()) {
|
||||
expireCache = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (colorsFile.isEmpty()) {
|
||||
@ -642,12 +645,7 @@ void ThemePrivate::setThemeName(const QString &tempThemeName, bool writeSettings
|
||||
cg.sync();
|
||||
}
|
||||
|
||||
if (expireCache) {
|
||||
discardCache(oldThemeName);
|
||||
} else {
|
||||
QString svgElementsFile = KStandardDirs::locateLocal("cache", QLatin1Literal("plasma-svgelements-") % themeName);
|
||||
svgElementsCache = KSharedConfig::openConfig(svgElementsFile);
|
||||
}
|
||||
discardCache(SvgElementsCache);
|
||||
|
||||
invalidElements.clear();
|
||||
emit q->themeChanged();
|
||||
|
Loading…
Reference in New Issue
Block a user