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