summaryrefslogtreecommitdiffstats
path: root/src/platformsupport
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport')
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes.cpp15
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes_p.h3
2 files changed, 10 insertions, 8 deletions
diff --git a/src/platformsupport/dbustray/qdbustraytypes.cpp b/src/platformsupport/dbustray/qdbustraytypes.cpp
index de0c3c30a6..b954ffe412 100644
--- a/src/platformsupport/dbustray/qdbustraytypes.cpp
+++ b/src/platformsupport/dbustray/qdbustraytypes.cpp
@@ -93,14 +93,13 @@ QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon)
painter.drawImage((maxSize - im.width()) / 2, (maxSize - im.height()) / 2, im);
im = padded;
}
- QXdgDBusImageStruct kim;
- kim.width = im.width();
- kim.height = im.height();
- kim.data = QByteArray(reinterpret_cast<const char*>(im.constBits()), im.byteCount());
- if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
- for (char *ptr = kim.data.begin(); ptr < kim.data.end(); ptr += 4)
- qToUnaligned(qToBigEndian<quint32>(*ptr), reinterpret_cast<uchar *>(ptr));
- }
+ // copy and endian-convert
+ QXdgDBusImageStruct kim(im.width(), im.height());
+ const uchar *end = im.constBits() + im.byteCount();
+ uchar *dest = reinterpret_cast<uchar *>(kim.data.data());
+ for (const uchar *src = im.constBits(); src < end; src += 4, dest += 4)
+ qToUnaligned(qToBigEndian<quint32>(qFromUnaligned<quint32>(src)), dest);
+
ret << kim;
}
return ret;
diff --git a/src/platformsupport/dbustray/qdbustraytypes_p.h b/src/platformsupport/dbustray/qdbustraytypes_p.h
index 2e1421eccd..c7f8ec0c30 100644
--- a/src/platformsupport/dbustray/qdbustraytypes_p.h
+++ b/src/platformsupport/dbustray/qdbustraytypes_p.h
@@ -49,6 +49,9 @@ QT_BEGIN_NAMESPACE
// Custom message type to send icons across D-Bus
struct QXdgDBusImageStruct
{
+ QXdgDBusImageStruct() { }
+ QXdgDBusImageStruct(int w, int h)
+ : width(w), height(h), data(width * height * 4, 0) { }
int width;
int height;
QByteArray data;