summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/applnk.cpp130
-rw-r--r--library/resource.cpp13
2 files changed, 90 insertions, 53 deletions
diff --git a/library/applnk.cpp b/library/applnk.cpp
index 1c1a227..80f2c62 100644
--- a/library/applnk.cpp
+++ b/library/applnk.cpp
@@ -980,19 +980,54 @@ void AppLnk::removeLinkFile()
#endif
}
}
+class AppLnkImagePrivate {
+public :
+ AppLnkImagePrivate( const QString & ImageName ) {
+ IconName = ImageName;
+ Small = 0;
+ Big = 0;
+ }
+ ~AppLnkImagePrivate( ) {
+ if ( Small ) delete Small;
+ if ( Big ) delete Big;
+ }
+
+ inline QPixmap * small( void ) {
+ if( ! Small ) {
+ QImage unscaledIcon = Resource::loadImage( IconName );
+ // works as long as smallSize remains static
+ Small = new QPixmap();
+ Small->convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
+ }
+ return Small;
+ }
+
+ inline QPixmap * big( void ) {
+ if( ! Big ) {
+ QImage unscaledIcon = Resource::loadImage( IconName );
+ // works as long as bigSize remains static
+ Big = new QPixmap();
+ Big->convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
+ }
+ return Big;
+ }
+
+ QString IconName;
+ QPixmap * Small;
+ QPixmap * Big;
+};
+
class AppLnkSetPrivate {
public:
AppLnkSetPrivate()
{
- typPix.setAutoDelete(TRUE);
- typPixBig.setAutoDelete(TRUE);
- typName.setAutoDelete(TRUE);
+ typPix.setAutoDelete(TRUE);
+ typName.setAutoDelete(TRUE);
}
- QDict<QPixmap> typPix;
- QDict<QPixmap> typPixBig;
+ QDict<AppLnkImagePrivate> typPix;
QDict<QString> typName;
};
/*!
@@ -1085,57 +1120,54 @@ void AppLnkSet::findChildren(const QString &dr, const QString& typ, const QStrin
QDir dir( dr );
QString typNameLocal = typName;
if ( dir.exists( ".directory" ) ) {
- Config config( dr + "/.directory", Config::File );
- config.setGroup( "Desktop Entry" );
- typNameLocal = config.readEntry( "Name", typNameLocal );
- if ( !typ.isEmpty() ) {
- QString iconFile = config.readEntry( "Icon", "AppsIcon" );
- QImage unscaledIcon = Resource::loadImage( iconFile );
- QPixmap pm, bpm;
- pm.convertFromImage( unscaledIcon.smoothScale( smallSize, smallSize ) );
- bpm.convertFromImage( unscaledIcon.smoothScale( bigSize, bigSize ) );
- d->typPix.insert(typ, new QPixmap(pm));
- d->typPixBig.insert(typ, new QPixmap(bpm));
- d->typName.insert(typ, new QString(typNameLocal));
- }
+ Config config( dr + "/.directory", Config::File );
+ config.setGroup( "Desktop Entry" );
+ typNameLocal = config.readEntry( "Name", typNameLocal );
+ if ( !typ.isEmpty() ) {
+ d->typPix.insert( typ,
+ new AppLnkImagePrivate( config.readEntry( "Icon", "AppsIcon" ) )
+ );
+ d->typName.insert(typ, new QString(typNameLocal));
+
+ }
}
const QFileInfoList *list = dir.entryInfoList();
if ( list ) {
- QFileInfo* fi;
- bool cadded=FALSE;
- for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) {
- QString bn = fi->fileName();
-// qDebug("findChildren "+bn);
- if ( bn[0] != '.' && bn != "CVS" ) {
- if ( fi->isDir() ) {
- QString c = typ.isNull() ? bn : typ+"/"+bn;
- QString d = typNameLocal.isNull() ? bn : typNameLocal+"/"+bn;
- findChildren(fi->filePath(), c, d, depth );
- } else {
- if ( fi->extension(FALSE) == "desktop" ) {
- AppLnk* app = new AppLnk( fi->filePath() );
+ QFileInfo* fi;
+ bool cadded=FALSE;
+ for ( QFileInfoListIterator it(*list); (fi=*it); ++it ) {
+ QString bn = fi->fileName();
+ // qDebug("findChildren "+bn);
+ if ( bn[0] != '.' && bn != "CVS" ) {
+ if ( fi->isDir() ) {
+ QString c = typ.isNull() ? bn : typ+"/"+bn;
+ QString d = typNameLocal.isNull() ? bn : typNameLocal+"/"+bn;
+ findChildren(fi->filePath(), c, d, depth );
+ } else {
+ if ( fi->extension(FALSE) == "desktop" ) {
+ AppLnk* app = new AppLnk( fi->filePath() );
#ifdef QT_NO_QWS_MULTIPROCESS
- if ( !Global::isBuiltinCommand( app->exec() ) )
- delete app;
- else
+ if ( !Global::isBuiltinCommand( app->exec() ) )
+ delete app;
+ else
#endif
- {
- if ( !typ.isEmpty() ) {
- if ( !cadded ) {
- typs.append(typ);
- cadded = TRUE;
- }
- app->setType(typ);
+ {
+ if ( !typ.isEmpty() ) {
+ if ( !cadded ) {
+ typs.append(typ);
+ cadded = TRUE;
+ }
+ app->setType(typ);
+ }
+ add(app);
+ }
+ }
}
- add(app);
- }
}
- }
}
- }
}
}
/*!
@@ -1191,10 +1223,10 @@ QString AppLnkSet::typeName( const QString& t ) const
for documents the type is the document's MIME type.
*/
QPixmap AppLnkSet::typePixmap( const QString& t ) const
{
- QPixmap *pm = d->typPix.find(t);
- return pm ? *pm : QPixmap();
+ AppLnkImagePrivate *alip = d->typPix.find(t);
+ return alip ? *(alip->small()) : QPixmap();
}
/*!
Returns the large pixmap associated with type \a t.
@@ -1203,10 +1235,10 @@ QPixmap AppLnkSet::typePixmap( const QString& t ) const
for documents the type is the document's MIME type.
*/
QPixmap AppLnkSet::typeBigPixmap( const QString& t ) const
{
- QPixmap *pm = d->typPixBig.find(t);
- return pm ? *pm : QPixmap();
+ AppLnkImagePrivate *alip = d->typPix.find(t);
+ return alip ? *(alip->big()) : QPixmap();
}
/*!
Returns the AppLnk with the given \a id.
diff --git a/library/resource.cpp b/library/resource.cpp
index cfa0d26..b31876f 100644
--- a/library/resource.cpp
+++ b/library/resource.cpp
@@ -58,15 +58,21 @@ 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).
*/
+#include <stdio.h>
QPixmap Resource::loadPixmap( const QString &pix )
{
- QPixmap pm;
+ QPixmap pm; // null pixmap
QString key="QPE_"+pix;
if ( !QPixmapCache::find(key,pm) ) {
- pm.convertFromImage(loadImage(pix));
- QPixmapCache::insert(key,pm);
+ QImage I = loadImage(pix);
+ if( I.isNull() ) {
+ qWarning( "Could not load %s", pix.latin1() );
+ } else {
+ pm.convertFromImage(I);
+ QPixmapCache::insert(key,pm);
+ }
}
return pm;
}
@@ -100,9 +106,8 @@ QString Resource::findPixmap( const QString &pix )
f = picsPath + pix + ".xpm";
if ( QFile( f ).exists() )
return f;
-
// All formats...
QStrList fileFormats = QImageIO::inputFormats();
QString ff = fileFormats.first();
while ( fileFormats.current() ) {