summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-10 14:17:36 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-01-10 14:17:36 -0600
commit783973a7d6910fee50d90fcfaf439ae3bbb15b8c (patch)
tree8ba000b675371fb351f0130626e2cce41581d85e
parentb477a576734ecc272f81da28fb5b089e914e39c5 (diff)
downloadtdelibs-783973a7d6910fee50d90fcfaf439ae3bbb15b8c.tar.gz
tdelibs-783973a7d6910fee50d90fcfaf439ae3bbb15b8c.zip
Prefer elficon metadata to (often incorrect) system string matching
-rw-r--r--kio/kio/kurifilter.cpp154
1 files changed, 85 insertions, 69 deletions
diff --git a/kio/kio/kurifilter.cpp b/kio/kio/kurifilter.cpp
index afcfd74b3..c7e076eac 100644
--- a/kio/kio/kurifilter.cpp
+++ b/kio/kio/kurifilter.cpp
@@ -179,94 +179,110 @@ TQString KURIFilterData::iconName()
TQString exeName = m_pURI.url();
exeName = exeName.mid( exeName.findRev( '/' ) + 1 ); // strip path if given
KService::Ptr service = KService::serviceByDesktopName( exeName );
- if (service && service->icon() != TQString::fromLatin1( "unknown" ))
- m_strIconName = service->icon();
+#ifndef HAVE_ELFICON
// Try to find an icon with the same name as the binary (useful for non-tde apps)
// FIXME: We should only do this if the binary is in the system path somewhere,
// otherwise TDE could end up showing system icons for user binaries
- else if ( !KGlobal::iconLoader()->loadIcon( exeName, KIcon::NoGroup, 16, KIcon::DefaultState, 0, true ).isNull() )
+ if (service && service->icon() != TQString::fromLatin1( "unknown" )) {
+ m_strIconName = service->icon();
+ }
+ else if ( !KGlobal::iconLoader()->loadIcon( exeName, KIcon::NoGroup, 16, KIcon::DefaultState, 0, true ).isNull() ) {
m_strIconName = exeName;
+ }
else {
- // not found, try to load from elf file (if supported)
- // otherwise use default
+ // use default
+ m_strIconName = TQString::fromLatin1("exec");
+ }
+#else // HAVE_ELFICON
+ // Try to find an icon with the same name as the binary (useful for non-tde apps)
+ // FIXME: We should only do this if the binary is in the system path somewhere,
+ // otherwise TDE could end up showing system icons for user binaries
+ if (service && service->icon() != TQString::fromLatin1( "unknown" )) {
+ m_strIconName = service->icon();
+ }
+ else if ( !KGlobal::iconLoader()->loadIcon( exeName, KIcon::NoGroup, 16, KIcon::DefaultState, 0, true ).isNull() ) {
+ m_strIconName = exeName;
+ }
+ else {
+ // use default
m_strIconName = TQString::fromLatin1("exec");
-#ifdef HAVE_ELFICON
- // Check for an embedded icon
- unsigned int icon_size;
- libr_icon *icon = NULL;
- libr_file *handle = NULL;
- libr_access_t access = LIBR_READ;
- char libr_can_continue = 1;
-
- if((handle = libr_open(const_cast<char*>(m_pURI.path().ascii()), access)) == NULL)
- {
- kdWarning() << "failed to open file" << m_pURI.path() << endl;
- libr_can_continue = 0;
- }
+ }
+ // Try to load from elf file (if supported)
+ // Check for an embedded icon
+ unsigned int icon_size;
+ libr_icon *icon = NULL;
+ libr_file *handle = NULL;
+ libr_access_t access = LIBR_READ;
+ char libr_can_continue = 1;
+
+ if((handle = libr_open(const_cast<char*>(m_pURI.path().ascii()), access)) == NULL)
+ {
+ kdWarning() << "failed to open file" << m_pURI.path() << endl;
+ libr_can_continue = 0;
+ }
+
+ if (libr_can_continue == 1) {
+ icon_size = 32; // FIXME: Is this a reasonable size request for all possible usages of kurifilter?
+ icon = libr_icon_geticon_bysize(handle, icon_size);
if (libr_can_continue == 1) {
- icon_size = 32; // FIXME: Is this a reasonable size request for all possible usages of kurifilter?
- icon = libr_icon_geticon_bysize(handle, icon_size);
-
- if (libr_can_continue == 1) {
- // See if the embedded icon name matches any icon file names already on the system
- // If it does, use the system icon instead of the embedded one
- int iconresnamefound = 0;
- iconentry *entry = NULL;
- iconlist icons;
- if(!get_iconlist(handle, &icons))
- {
- // Failed to obtain a list of ELF icons
- kdWarning() << "failed to obtain ELF icon: " << libr_errmsg() << endl;
-
- // See if there is a system icon we can use
- TQString sysIconName = elf_get_resource(handle, ".metadata_sysicon");
- if (!sysIconName.isEmpty()) {
- if (KGlobal::iconLoader()->iconPath(sysIconName.ascii(), 0, true) != "") {
- m_strIconName = sysIconName;
- }
+ // See if the embedded icon name matches any icon file names already on the system
+ // If it does, use the system icon instead of the embedded one
+ int iconresnamefound = 0;
+ iconentry *entry = NULL;
+ iconlist icons;
+ if(!get_iconlist(handle, &icons))
+ {
+ // Failed to obtain a list of ELF icons
+ kdWarning() << "failed to obtain ELF icon: " << libr_errmsg() << endl;
+
+ // See if there is a system icon we can use
+ TQString sysIconName = elf_get_resource(handle, ".metadata_sysicon");
+ if (!sysIconName.isEmpty()) {
+ if (KGlobal::iconLoader()->iconPath(sysIconName.ascii(), 0, true) != "") {
+ m_strIconName = sysIconName;
}
-
- libr_close(handle);
- libr_can_continue = 0;
}
- else {
- while((entry = get_nexticon(&icons, entry)) != NULL)
+
+ libr_close(handle);
+ libr_can_continue = 0;
+ }
+ else {
+ while((entry = get_nexticon(&icons, entry)) != NULL)
+ {
+ if(icon == NULL)
{
- if(icon == NULL)
- {
- // Try loading this icon as fallback
- icon = libr_icon_geticon_byname(handle, entry->name);
- }
- if (KGlobal::iconLoader()->iconPath(entry->name, 0, true) != "") {
- iconresnamefound = 1;
- m_strIconName = entry->name;
- break;
- }
+ // Try loading this icon as fallback
+ icon = libr_icon_geticon_byname(handle, entry->name);
+ }
+ if (KGlobal::iconLoader()->iconPath(entry->name, 0, true) != "") {
+ iconresnamefound = 1;
+ m_strIconName = entry->name;
+ break;
}
}
+ }
- if (libr_can_continue == 1) {
- if ((iconresnamefound == 0) && (icon)) {
- // Extract the embedded icon
- size_t icon_data_length;
- char* icondata = libr_icon_malloc(icon, &icon_data_length);
- m_customIconPixmap.loadFromData(static_cast<uchar*>(static_cast<void*>(icondata)), icon_data_length); // EVIL CAST
- if (icon_size != 0) {
- TQImage ip = m_customIconPixmap.convertToImage();
- ip = ip.smoothScale(icon_size, icon_size);
- m_customIconPixmap.convertFromImage(ip);
- }
- free(icondata);
- libr_icon_close(icon);
+ if (libr_can_continue == 1) {
+ if ((iconresnamefound == 0) && (icon)) {
+ // Extract the embedded icon
+ size_t icon_data_length;
+ char* icondata = libr_icon_malloc(icon, &icon_data_length);
+ m_customIconPixmap.loadFromData(static_cast<uchar*>(static_cast<void*>(icondata)), icon_data_length); // EVIL CAST
+ if (icon_size != 0) {
+ TQImage ip = m_customIconPixmap.convertToImage();
+ ip = ip.smoothScale(icon_size, icon_size);
+ m_customIconPixmap.convertFromImage(ip);
}
-
- libr_close(handle);
+ free(icondata);
+ libr_icon_close(icon);
}
+
+ libr_close(handle);
}
}
+ }
#endif // HAVE_ELFICON
- }
break;
}
case KURIFilterData::HELP: