summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/resource.cpp33
1 files changed, 29 insertions, 4 deletions
diff --git a/library/resource.cpp b/library/resource.cpp
index cfa0d26..43fdc60 100644
--- a/library/resource.cpp
+++ b/library/resource.cpp
@@ -59,16 +59,41 @@ static bool g_notUseSet = ::getenv("OVERWRITE_ICON_SET");
Returns the QPixmap called \a pix. You should avoid including
any filename type extension (e.g. .png, .xpm).
*/
QPixmap Resource::loadPixmap( const QString &pix )
{
QPixmap pm;
- QString key="QPE_"+pix;
- if ( !QPixmapCache::find(key,pm) ) {
- pm.convertFromImage(loadImage(pix));
- QPixmapCache::insert(key,pm);
+
+ // Give the pixmaps some kind of namespace in the pixmapcache
+ int index = pix.find('/');
+ QString appName1 = qApp->argv()[0];
+ appName1 = appName1.replace(QRegExp(".*/"),"");
+ QString appName2 = pix.left(index);
+
+ if ( appName2 == "" || appName2 == pix || appName2 == "icons" )
+ appName2 = "Global";
+
+ QString appKey1 = "_QPE_" + appName1 + "_" + pix;
+ QString appKey2 = "_QPE_" + appName2 + "_" + pix.mid(index+1);
+
+ if ( !QPixmapCache::find(appKey1, pm) ) {
+ if ( !QPixmapCache::find(appKey2, pm) ) {
+ QImage img;
+ QString f = findPixmap( pix );
+ if ( !f.isEmpty() ) {
+ img.load(f);
+ if ( !img.isNull() ) {
+ pm.convertFromImage(img);
+ if ( f.contains(appName1) ) {
+ QPixmapCache::insert( appKey1, pm);
+ } else {
+ QPixmapCache::insert( appKey2, pm);
+ }
+ }
+ }
+ }
}
return pm;
}
/*!
Returns the QBitmap called \a pix. You should avoid including