]> granicus.if.org Git - transmission/commitdiff
Use QMimeDatabase to get icon names when compiling against Qt 5+
authorMike Gelfand <mikedld@mikedld.com>
Thu, 1 Jan 2015 02:28:18 +0000 (02:28 +0000)
committerMike Gelfand <mikedld@mikedld.com>
Thu, 1 Jan 2015 02:28:18 +0000 (02:28 +0000)
qt/utils.cc

index f0667603ac74b2b4c3fc53e2e70aaa811a0e1518..b4f663def7ef1350ec4f4d8551e8e8b960d41724 100644 (file)
 #include <QSet>
 #include <QStyle>
 
+#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
+#include <QMimeDatabase>
+#include <QMimeType>
+#endif
+
 #include <libtransmission/transmission.h>
 #include <libtransmission/utils.h> // tr_formatter
 
@@ -106,10 +111,14 @@ namespace
 } // namespace
 #endif
 
+#include <QDebug>
 QIcon
 Utils::guessMimeIcon (const QString& filename)
 {
+  static const QIcon fallback = qApp->style ()->standardIcon (QStyle::SP_FileIcon);
+
 #ifdef _WIN32
+
   QIcon icon;
 
   if (!filename.isEmpty ())
@@ -121,20 +130,24 @@ Utils::guessMimeIcon (const QString& filename)
       addAssociatedFileIcon (fileInfo, SHGFI_LARGEICON, icon);
     }
 
-  if (icon.isNull ())
-    icon = qApp->style ()->standardIcon (QStyle::SP_FileIcon);
+  if (!icon.isNull ())
+    return icon;
+
+#elif QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
+
+  QMimeDatabase mimeDb;
+  QMimeType mimeType = mimeDb.mimeTypeForFile (filename, QMimeDatabase::MatchExtension);
+  if (mimeType.isValid ())
+    return QIcon::fromTheme (mimeType.iconName (), QIcon::fromTheme (mimeType.genericIconName (), fallback));
 
-  return icon;
 #else
+
   enum { DISK, DOCUMENT, PICTURE, VIDEO, ARCHIVE, AUDIO, APP, TYPE_COUNT };
-  static QIcon fallback;
   static QIcon fileIcons[TYPE_COUNT];
   static QSet<QString> suffixes[TYPE_COUNT];
 
   if (fileIcons[0].isNull ())
     {
-      fallback = qApp->style()->standardIcon (QStyle::SP_FileIcon);
-
       suffixes[DISK] << QString::fromLatin1("iso");
       fileIcons[DISK]= QIcon::fromTheme (QString::fromLatin1("media-optical"), fallback);
 
@@ -183,8 +196,9 @@ Utils::guessMimeIcon (const QString& filename)
     if (suffixes[i].contains (suffix))
       return fileIcons[i];
 
-  return fallback;
 #endif
+
+  return fallback;
 }
 
 bool