summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/fileutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r--src/libs/installer/fileutils.cpp31
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