diff options
Diffstat (limited to 'src/platformsupport')
-rw-r--r-- | src/platformsupport/dbustray/qdbustraytypes.cpp | 15 | ||||
-rw-r--r-- | src/platformsupport/dbustray/qdbustraytypes_p.h | 3 |
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; |