From 661c68fffe49dde5be2bd01f85ef5d0e2e5a0695 Mon Sep 17 00:00:00 2001
From: Robert Loehning <robert.loehning@theqtcompany.com>
Date: Thu, 21 May 2015 16:58:21 +0200
Subject: [PATCH] Target Selector: Fall back to built-in Desktop icon

If the style doesn't offer any icons that have at least 32 pixels

Change-Id: I840d73a0b4bdee695bb68df1c3973ee419db012e
Task-number: QTCREATORBUG-12832
Reviewed-by: Robert Loehning <robert.loehning@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
---
 src/plugins/coreplugin/core.qrc                   |   1 +
 .../images/Desktop.png                            | Bin
 src/plugins/coreplugin/manhattanstyle.cpp         |  14 ++++++++++++++
 src/plugins/coreplugin/manhattanstyle.h           |   1 +
 4 files changed, 16 insertions(+)
 rename src/plugins/{projectexplorer => coreplugin}/images/Desktop.png (100%)

diff --git a/src/plugins/coreplugin/core.qrc b/src/plugins/coreplugin/core.qrc
index 9556742f012..3b20ee263c5 100644
--- a/src/plugins/coreplugin/core.qrc
+++ b/src/plugins/coreplugin/core.qrc
@@ -112,5 +112,6 @@
         <file>images/info@2x.png</file>
         <file>images/dark_fileicon.png</file>
         <file>images/dark_foldericon.png</file>
+        <file>images/Desktop.png</file>
     </qresource>
 </RCC>
diff --git a/src/plugins/projectexplorer/images/Desktop.png b/src/plugins/coreplugin/images/Desktop.png
similarity index 100%
rename from src/plugins/projectexplorer/images/Desktop.png
rename to src/plugins/coreplugin/images/Desktop.png
diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp
index f4c95e8f004..2d87a448a2e 100644
--- a/src/plugins/coreplugin/manhattanstyle.cpp
+++ b/src/plugins/coreplugin/manhattanstyle.cpp
@@ -34,6 +34,7 @@
 
 #include <coreplugin/coreconstants.h>
 
+#include <utils/algorithm.h>
 #include <utils/hostosinfo.h>
 #include <utils/stylehelper.h>
 
@@ -336,6 +337,19 @@ QPixmap ManhattanStyle::standardPixmap(StandardPixmap standardPixmap, const QSty
     return pixmap;
 }
 
+QIcon ManhattanStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const
+{
+    QIcon icon = QProxyStyle::standardIcon(standardIcon, option, widget);
+    if (standardIcon == QStyle::SP_ComputerIcon) {
+        // Ubuntu has in some versions a 16x16 icon, see QTCREATORBUG-12832
+        const QList<QSize> &sizes = icon.availableSizes();
+        if (Utils::allOf(sizes, [](const QSize &size) { return size.width() < 32;})) {
+            icon = QIcon(QLatin1String(":/core/images/Desktop.png"));
+        }
+    }
+    return icon;
+}
+
 int ManhattanStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget,
                               QStyleHintReturn *returnData) const
 {
diff --git a/src/plugins/coreplugin/manhattanstyle.h b/src/plugins/coreplugin/manhattanstyle.h
index 1d9d766b72a..bb7993c93a5 100644
--- a/src/plugins/coreplugin/manhattanstyle.h
+++ b/src/plugins/coreplugin/manhattanstyle.h
@@ -56,6 +56,7 @@ public:
 
     SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = 0) const;
     QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = 0) const;
+    QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const;
     int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const;
     QRect itemRect(QPainter *p, const QRect &r, int flags, bool enabled, const QPixmap *pixmap, const QString &text, int len = -1) const;
     QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const;
-- 
GitLab