diff options
author | kh1 <karsten.heimrich@digia.com> | 2013-03-18 13:17:58 +0100 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@digia.com> | 2013-03-21 16:30:49 +0100 |
commit | 4cde7b2ed657e5cc2f5f7c071f4ff0a7dd20d56b (patch) | |
tree | 7e90e8778a3e318fa8ef204a9dfd568cc9424910 /src/libs/installer/fileutils.cpp | |
parent | c064509db928d6538ebb7d53a1ad03fcc7025b4d (diff) |
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 <niels.weber@digia.com>
Reviewed-by: Karsten Heimrich <karsten.heimrich@digia.com>
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
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 <QtCore/QTemporaryFile> #include <QtCore/QThread> #include <QtCore/QUrl> +#include <QImageReader> #include <errno.h> @@ -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<ICONDIR*> (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 |