From 4cde7b2ed657e5cc2f5f7c071f4ff0a7dd20d56b Mon Sep 17 00:00:00 2001 From: kh1 Date: Mon, 18 Mar 2013 13:17:58 +0100 Subject: Fix missing wizard icon on a windows static build. Q_IMPORT_PLUGIN() macros are needed in application code only for Qt4, in Qt5 those are automatically generated by qmake. Change-Id: Ic75795be402592a0595bb3aa084d0b7ee9a9f8c5 Reviewed-by: Niels Weber Reviewed-by: Karsten Heimrich Reviewed-by: Tim Jenssen --- src/libs/installer/fileutils.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'src/libs/installer/fileutils.cpp') diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index e2a995dba..315a34f5d 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include @@ -557,20 +558,21 @@ typedef struct { void QInstaller::setApplicationIcon(const QString &application, const QString &icon) { - wchar_t* const path = new wchar_t[application.length() + 1]; - QDir::toNativeSeparators(application).toWCharArray(path); - path[application.length()] = 0; - - HANDLE updateRes = BeginUpdateResource(path, false); - delete[] path; - QFile iconFile(icon); - if (!iconFile.open(QIODevice::ReadOnly)) + if (!iconFile.open(QIODevice::ReadOnly)) { + qWarning() << QString::fromLatin1("Could not use '%1' as application icon: %2.") + .arg(icon, iconFile.errorString()); return; + } - QByteArray temp = iconFile.readAll(); + if (QImageReader::imageFormat(icon) != "ico") { + qWarning() << QString::fromLatin1("Could not use '%1' as application icon, unsupported format %2.") + .arg(icon, QLatin1String(QImageReader::imageFormat(icon))); + return; + } - ICONDIR* ig = reinterpret_cast< ICONDIR* >(temp.data()); + QByteArray temp = iconFile.readAll(); + ICONDIR* ig = reinterpret_cast (temp.data()); DWORD newSize = sizeof(GRPICONDIR) + sizeof(GRPICONDIRENTRY) * (ig->idCount - 1); GRPICONDIR* newDir = reinterpret_cast< GRPICONDIR* >(new char[newSize]); @@ -578,6 +580,7 @@ void QInstaller::setApplicationIcon(const QString &application, const QString &i newDir->idType = ig->idType; newDir->idCount = ig->idCount; + HANDLE updateRes = BeginUpdateResourceW((wchar_t*)QDir::toNativeSeparators(application).utf16(), false); for (int i = 0; i < ig->idCount; ++i) { char* temp1 = temp.data() + ig->idEntries[i].dwImageOffset; DWORD size1 = ig->idEntries[i].dwBytesInRes; @@ -591,16 +594,16 @@ void QInstaller::setApplicationIcon(const QString &application, const QString &i newDir->idEntries[i].dwBytesInRes = ig->idEntries[i].dwBytesInRes; newDir->idEntries[i].nID = i + 1; - UpdateResource(updateRes, RT_ICON, MAKEINTRESOURCE(i + 1), + UpdateResourceW(updateRes, RT_ICON, MAKEINTRESOURCE(i + 1), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), temp1, size1); } - UpdateResource(updateRes, RT_GROUP_ICON, L"IDI_ICON1", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), newDir - , newSize); + UpdateResourceW(updateRes, RT_GROUP_ICON, L"IDI_ICON1", MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), + newDir, newSize); delete [] newDir; - EndUpdateResource(updateRes, false); + EndUpdateResourceW(updateRes, false); } #endif -- cgit v1.2.3