NameWindowPixmap problem

Petr Zalyautdinov ya.betmen at gmail.com
Sat Feb 28 12:30:47 PST 2015


Dear All

I try get screenshots for all opened applications, but i have problem with
NameWindowPixmap. I shared my simple example application:
http://pastebin.com/Qw8ZZ2i8.

I make screenshots using method below

QPixmap makeScreenshot(XID xid, Display *display){
    QPixmap qpxmp;
    XCompositeRedirectWindow (display, xid, CompositeRedirectAutomatic);
    XFlush(display);
    Pixmap pixmap = XCompositeNameWindowPixmap (display, xid);
    XSync(display, false);
    qpxmp = QPixmap::fromX11Pixmap(pixmap).copy();
    XFreePixmap (display, pixmap);
    XCompositeUnredirectWindow (display, xid, CompositeRedirectAutomatic);
    return qpxmp;
}

Usually it works, but sometimes I face with problems: pixmap exists, but it
wrong, it could be black, empty or corrupted image. This cases generates
same log entries:
X Error: BadDrawable (invalid Pixmap or Window parameter) 9
  Extension:    139 (RENDER)
  Minor opcode: 4 (RenderCreatePicture)
  Resource id:  0x4a0006d
X Error: RenderBadPicture (invalid Picture parameter) 143
  Extension:    139 (RENDER)
  Minor opcode: 8 (RenderComposite)
  Resource id:  0x24001b4
X Error: RenderBadPicture (invalid Picture parameter) 143
  Extension:    139 (RENDER)
  Minor opcode: 7 (RenderFreePicture)
  Resource id:  0x24001b4

In my example I try get screenshot twice:
QPixmap p = makeScreenshot(wid, display);
p = makeScreenshot(wid, display);

And I have same errors in log, but images usually correct. Also if I remove
line "XFreePixmap (display, pixmap);" then errors disappears.

Actually, I'm nub. What did I do wrong? How I can know moment when pixmap
is ready to use?

Kind regards
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg/attachments/20150301/9112b858/attachment.html>


More information about the xorg mailing list