void-packages/srcpkgs/kwindowsystem/patches/kdebug-337626.patch

50 lines
1.9 KiB
Diff

commit 9dbb47b07d4b4ec1e3e46098f955d36a318794bb
Author: Thomas Lübking <thomas.luebking@gmail.com>
Date: Mon Nov 17 20:06:20 2014 +0100
ensure to keep image data alive w/ the image
raster QPixmaps re-use the image data (implicitly shared)
deleting them w/ scope will thus cause invalidated
memory in the returned pixmap
BUG: 337626
REVIEW: 121158
diff --git a/src/kxutils.cpp b/src/kxutils.cpp
index 44885e0..c75c08e 100644
--- src/kxutils.cpp
+++ src/kxutils.cpp
@@ -107,19 +107,14 @@ template <typename T> T fromNative(xcb_pixmap_t pixmap)
case 30: {
// Qt doesn't have a matching image format. We need to convert manually
uint32_t *pixels = reinterpret_cast<uint32_t *>(xcb_get_image_data(xImage.data()));
- for (int i = 0; i < xImage.data()->length; ++i) {
+ for (uint i = 0; i < xImage.data()->length; ++i) {
int r = (pixels[i] >> 22) & 0xff;
int g = (pixels[i] >> 12) & 0xff;
int b = (pixels[i] >> 2) & 0xff;
pixels[i] = qRgba(r, g, b, 0xff);
}
- QImage image(reinterpret_cast<uchar *>(pixels), geo->width, geo->height,
- xcb_get_image_data_length(xImage.data()) / geo->height, QImage::Format_ARGB32_Premultiplied);
- if (image.isNull()) {
- return T();
- }
- return T::fromImage(image);
+ // fall through, Qt format is still Format_ARGB32_Premultiplied
}
case 32:
format = QImage::Format_ARGB32_Premultiplied;
@@ -136,7 +131,8 @@ template <typename T> T fromNative(xcb_pixmap_t pixmap)
}
}
QImage image(xcb_get_image_data(xImage.data()), geo->width, geo->height,
- xcb_get_image_data_length(xImage.data()) / geo->height, format);
+ xcb_get_image_data_length(xImage.data()) / geo->height, format, free, xImage.data());
+ xImage.take();
if (image.isNull()) {
return T();
}