From 74920853a0b7d8fc776695bbb4b91bb49c7a46ad Mon Sep 17 00:00:00 2001
From: Ivan Vizir <define-true-false@yandex.com>
Date: Fri, 5 Jul 2013 12:27:28 +0300
Subject: [PATCH] Small fixes in QJumpList and QWinTaskbarButton.

Use default icon if toHICON() fails. Use qPrintable() to output errors.

Change-Id: I114a753ef34ab5ef6336995067ac11ec9baf17af
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
---
 src/winextras/qjumplist.cpp         | 12 ++++++------
 src/winextras/qwintaskbarbutton.cpp | 18 ++++++++++--------
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/winextras/qjumplist.cpp b/src/winextras/qjumplist.cpp
index f92f40d..f211cca 100644
--- a/src/winextras/qjumplist.cpp
+++ b/src/winextras/qjumplist.cpp
@@ -251,8 +251,8 @@ public:
 
     static void warning(const char *function, HRESULT hresult)
     {
-        QByteArray err = QWinExtras::errorStringFromHresult(hresult).toLocal8Bit();
-        qWarning("QJumpList: %s() failed: %#010x, %s.", function, (unsigned)hresult, err.data());
+        const QString err = QWinExtras::errorStringFromHresult(hresult);
+        qWarning("QJumpList: %s() failed: %#010x, %s.", function, (unsigned)hresult, qPrintable(err));
     }
 
     static QString iconsDirPath()
@@ -330,8 +330,8 @@ public:
         IObjectCollection *collection = 0;
         HRESULT hresult = CoCreateInstance(CLSID_EnumerableObjectCollection, 0, CLSCTX_INPROC_SERVER, IID_IObjectCollection, reinterpret_cast<void **>(&collection));
         if (FAILED(hresult)) {
-            QByteArray err = QWinExtras::errorStringFromHresult(hresult).toLocal8Bit();
-            qWarning("QJumpList: failed to instantiate IObjectCollection: %#010x, %s.", (unsigned)hresult, err.data());
+            const QString err = QWinExtras::errorStringFromHresult(hresult);
+            qWarning("QJumpList: failed to instantiate IObjectCollection: %#010x, %s.", (unsigned)hresult, qPrintable(err));
             return 0;
         }
         Q_FOREACH (QJumpListItem *item, list) {
@@ -426,8 +426,8 @@ public:
         IShellLinkW *link = 0;
         HRESULT hresult = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLinkW, reinterpret_cast<void **>(&link));
         if (FAILED(hresult)) {
-            QByteArray err = QWinExtras::errorStringFromHresult(hresult).toLocal8Bit();
-            qWarning("QJumpList: failed to instantiate IShellLinkW: %#010x, %s.", (unsigned)hresult, err.data());
+            const QString err = QWinExtras::errorStringFromHresult(hresult);
+            qWarning("QJumpList: failed to instantiate IShellLinkW: %#010x, %s.", (unsigned)hresult, qPrintable(err));
             return 0;
         }
 
diff --git a/src/winextras/qwintaskbarbutton.cpp b/src/winextras/qwintaskbarbutton.cpp
index e7e1db1..55cd3ae 100644
--- a/src/winextras/qwintaskbarbutton.cpp
+++ b/src/winextras/qwintaskbarbutton.cpp
@@ -287,13 +287,13 @@ QWinTaskbarButtonPrivate::QWinTaskbarButtonPrivate(QWinTaskbarButton *parent) :
     HRESULT hresult = CoCreateInstance(CLSID_TaskbarList, 0, CLSCTX_INPROC_SERVER, IID_ITaskbarList4, reinterpret_cast<void **>(&pTbList));
     if (FAILED(hresult)) {
         pTbList = 0;
-        QByteArray err = QWinExtras::errorStringFromHresult(hresult).toLocal8Bit();
-        qWarning("QWinTaskbarButton: IID_ITaskbarList4 was not created: %#010x, %s.", (unsigned)hresult, err.data());
+        const QString err = QWinExtras::errorStringFromHresult(hresult);
+        qWarning("QWinTaskbarButton: IID_ITaskbarList4 was not created: %#010x, %s.", (unsigned)hresult, qPrintable(err));
     } else if (FAILED(pTbList->HrInit())) {
         pTbList->Release();
         pTbList = 0;
-        QByteArray err = QWinExtras::errorStringFromHresult(hresult).toLocal8Bit();
-        qWarning("QWinTaskbarButton: IID_ITaskbarList4 was not initialized: %#010x, %s.", (unsigned)hresult, err.data());
+        const QString err = QWinExtras::errorStringFromHresult(hresult);
+        qWarning("QWinTaskbarButton: IID_ITaskbarList4 was not initialized: %#010x, %s.", (unsigned)hresult, qPrintable(err));
     }
 }
 
@@ -309,7 +309,7 @@ HWND QWinTaskbarButtonPrivate::handle()
 
 int QWinTaskbarButtonPrivate::iconSize() const
 {
-    return GetSystemMetrics(SM_CXICON);
+    return GetSystemMetrics(SM_CXSMICON);
 }
 
 TBPFLAG QWinTaskbarButtonPrivate::nativeProgressState(QWinTaskbarButton::ProgressState state)
@@ -337,11 +337,13 @@ void QWinTaskbarButtonPrivate::updateOverlayIcon()
         descrPtr = new wchar_t[overlayIconDescription.length() + 1];
         descrPtr[overlayIconDescription.toWCharArray(descrPtr)] = 0;
     }
-    if (!overlayIcon.isNull()) {
+    if (!overlayIcon.isNull())
         hicon = QWinExtras::toHICON(overlayIcon.pixmap(iconSize()));
-    }
 
-    pTbList->SetOverlayIcon(handle(), hicon, descrPtr);
+    if (hicon)
+        pTbList->SetOverlayIcon(handle(), hicon, descrPtr);
+    else if (!hicon && !overlayIcon.isNull())
+        pTbList->SetOverlayIcon(handle(), (HICON)LoadImage(0, IDI_APPLICATION, IMAGE_ICON, SM_CXSMICON, SM_CYSMICON, LR_SHARED), descrPtr);
 
     if (hicon)
         DeleteObject(hicon);
-- 
GitLab