23 #include <QtCore/QString>
24 #include <QtGui/QPixmap>
25 #include <QtCore/QFile>
26 #include <QtCore/QDataStream>
27 #include <QtCore/QFileInfo>
28 #include <QtCore/QDateTime>
38 #define KDE_ICONCACHE_NAME "kde-icon-cache"
39 #define KDE_ICONCACHE_VERSION 0x000100
48 mUpdatesCheckedTime = 0;
50 bool themeDirsChanged()
52 if (q->existingIconThemeDirs(mThemeNames) != mThemeDirs ||
53 q->mostRecentMTime(mThemeDirs) != mThemesMTime) {
54 kDebug(264) <<
"Theme directory has been modified";
60 void checkForThemeUpdates()
62 if (!q->isEnabled()) {
67 if (now < mUpdatesCheckedTime + 5) {
71 mUpdatesCheckedTime = now;
73 const QFileInfo fi(mUpdatesFile);
74 if (fi.exists() && fi.lastModified().toTime_t() + 5 > now) {
78 if (themeDirsChanged()) {
80 mThemeDirs = q->existingIconThemeDirs(mThemeNames);
81 mThemesMTime = q->mostRecentMTime(mThemeDirs);
85 QFile f(mUpdatesFile);
86 f.open(QIODevice::WriteOnly);
91 qint32 mDefaultIconSize[6];
106 d->mUpdatesFile = KGlobal::dirs()->locateLocal(
"cache",
"kpc/"KDE_ICONCACHE_NAME".updated");
123 if (stream.atEnd()) {
131 kDebug(264) <<
"Obsolete iconcache version" << version <<
"will recreate";
136 for (
int i = 0; i < 6; i++) {
137 stream >> d->mDefaultIconSize[i];
141 stream >> d->mThemeNames;
142 stream >> d->mThemeDirs;
144 stream >> d->mThemesMTime;
147 kWarning() <<
"Failed to read index file's header";
153 if (!d->mThemeNames.count()) {
154 kDebug(264) <<
"Empty themes list";
159 if (d->themeDirsChanged()) {
162 d->mUpdatesCheckedTime= ::time(0);
173 for (
int i = 0; i < 6; i++) {
174 stream << d->mDefaultIconSize[i];
178 stream << d->mThemeNames;
179 stream << d->mThemeDirs;
180 stream << d->mThemesMTime;
193 QStringList icondirs = KGlobal::dirs()->resourceDirs(
"icon")
194 << KGlobal::dirs()->resourceDirs(
"xdgdata-icon")
195 <<
"/usr/share/pixmaps/"
197 << KGlobal::dirs()->resourceDirs(
"xdgdata-pixmap");
198 icondirs.removeDuplicates();
203 for (QStringList::ConstIterator it = icondirs.constBegin(); it != icondirs.constEnd(); ++it) {
204 QStringList::ConstIterator themeIt;
205 for (themeIt = themeNames.begin(); themeIt != themeNames.end(); ++themeIt) {
206 QString dirName = *it + *themeIt +
'/';
208 dirs.insert(dirName);
219 foreach (
const QString &dir, dirNames) {
220 unsigned int mtime = QFileInfo(dir).lastModified().toTime_t();
221 if (timestamp < mtime) {
233 kDebug(264) <<
"Illegal icon group:" << group;
236 return d->mDefaultIconSize[group];
241 if (themes.isEmpty()) {
243 d->mDefaultIconSize[i] = 0;
249 d->mDefaultIconSize[i] = themes.first()->defaultSize(i);
258 d->mThemeNames.clear();
264 d->mUpdatesCheckedTime= ::time(0);
272 d->checkForThemeUpdates();
278 bool ret =
find(key, pix);
287 d->mSavePath.clear();
307 *d->mLoadPath = path;
315 stream << d->mSavePath;