--- plasma/generic/applets/systemtray/protocols/fdo/x11embedcontainer.cpp 2013-05-28 14:38:21.000000000 -0400 +++ plasma/generic/applets/systemtray/protocols/fdo/x11embedcontainer.cpp 2013-07-02 13:53:47.000000000 -0400 @@ -194,8 +194,7 @@ // Taking a detour via a QPixmap is unfortunately the only way we can get // the window contents into Qt's backing store. - QPixmap pixmap(size()); - pixmap = toX11Pixmap(pixmap); + QPixmap pixmap = toX11Pixmap(QPixmap(size())); pixmap.fill(Qt::transparent); XRenderComposite(x11Info().display(), PictOpSrc, d->picture, None, pixmap.x11PictureHandle(), 0, 0, 0, 0, 0, 0, width(), height()); @@ -234,14 +233,16 @@ { if(pix.handle() != 0) // X11 pixmap return pix; + QPixmap ret; Pixmap xpix = XCreatePixmap(pix.x11Info().display(), RootWindow(pix.x11Info().display(), pix.x11Info().screen()), pix.width(), pix.height(), QX11Info::appDepth()); - QPixmap wrk = QPixmap::fromX11Pixmap(xpix); + { + QPixmap wrk = QPixmap::fromX11Pixmap(xpix, QPixmap::ExplicitlyShared); QPainter paint(&wrk); paint.drawPixmap(0, 0, pix); paint.end(); - QPixmap ret = wrk.copy(); - wrk = QPixmap(); // reset, so that xpix can be freed (QPixmap does not own it) + ret = wrk.copy(); + } // free resources so that xpix can be freed (QPixmap does not own it) XFreePixmap(pix.x11Info().display(), xpix); return ret; }