Hello,
I try to use X Windows System (Xephyr from "xorg-server 1.6.1-1" package in
ArchLinux).
After compilation and starting of test program (see attach file), I get:
---
[imp...@kb33 x11]$ g++ -g -O0 ./composite_error_test.cc -lX11 -lXcomposite
-lXrender -lXdamage
[imp...@kb33 x11]$ ./a.out
XDamage version 1:1
XComposite version 0:3
XFixes version 4:0
XRender version 0:10
XShape version 1:1
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 154 (Composite)
Minor opcode of failed request: 6 ()
Serial number of failed request: 30
Current serial number in output stream: 33
---
What is the reason of it?
Thank you.
--
Regards,
Alexei Babich, circuit design engineer, Rezonans plc., Chelyabinsk, Russia
http://www.rez.ru
Jabber ID: [email protected]
#include <X11/Xlib.h>
#include <X11/extensions/Xdamage.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/shape.h>
#include <X11/extensions/Xfixes.h>
#include <cstring>
#include <iostream>
XEvent report;
int damage_event, damage_error;
int shape_event, shape_error;
int fixes_event, fixes_error;
int render_event, render_error;
int composite_event, composite_error;
Display *display;
int scrn;
Visual *visual32;
int depth;
Colormap cmap;
long defInputMask;
Window rootW;
XRenderPictFormat *argb32_format;
XRenderPictureAttributes simplePictAttr;
XSetWindowAttributes simpleWinAttr;
void setupEvents(void);
int main (void) {
Window abc,def;
Picture abc_pict, def_pict;
Pixmap abc_pix, def_pix;
if ((display = XOpenDisplay(":1") ) == NULL ) {
std::cout<<"unable to connect to X-server"<<std::endl;
throw 0;
}
setupEvents();
XSynchronize(display, True);
//get Visual, color map, etc.
{
//search available visual with 32-bit depth
//derived from 'xdpyinfo' source
XVisualInfo viproto; /* fill in for getting info */
XVisualInfo *vip; /* returned info */
int nvi = 0;
viproto.depth = 32;
viproto.screen = scrn;
vip = XGetVisualInfo (display, VisualDepthMask | VisualScreenMask, &viproto, &nvi);
if (nvi <1) {
std::cout<<"32-bit visual not found, exiting\n";
throw 0;
}
if (nvi) {
if (nvi>1) {
std::cout<<"More than one 32-bit visual found, use first\n";
}
visual32 = vip->visual;
XFree(vip);
}
}
rootW = DefaultRootWindow(display);
cmap = XCreateColormap(display, rootW, visual32,AllocNone);
argb32_format = XRenderFindVisualFormat(display, visual32);
defInputMask = StructureNotifyMask| SubstructureNotifyMask;
bzero(&simplePictAttr, sizeof(simplePictAttr));
bzero(&simpleWinAttr, sizeof(simpleWinAttr));
simpleWinAttr.colormap = cmap;
simpleWinAttr.event_mask = defInputMask;
simplePictAttr.subwindow_mode = IncludeInferiors;
XSelectInput(display, rootW, defInputMask);
//create two windows
simpleWinAttr.background_pixel = 0x45670123;
abc = XCreateWindow(display, rootW, 50,50, 400,400,0,32,InputOutput,visual32,CWColormap| CWBorderPixel | CWBackPixel | CWEventMask,&simpleWinAttr);
XMapWindow(display, abc);
simpleWinAttr.background_pixel = 0x67012345;
def = XCreateWindow(display, abc, 40,40, 100,100,0,32,InputOutput,visual32,CWColormap| CWBorderPixel | CWBackPixel | CWEventMask,&simpleWinAttr);
XMapWindow(display, def);
//redirect subwindows of root window
XCompositeRedirectSubwindows(display, rootW, CompositeRedirectManual);
//create NameWindowPixmap
abc_pix = XCompositeNameWindowPixmap(display, abc);
def_pix = XCompositeNameWindowPixmap(display, def);
//create picture
abc_pict = XRenderCreatePicture(display, abc_pix, argb32_format, CPSubwindowMode, &simplePictAttr);
def_pict = XRenderCreatePicture(display, def_pix, argb32_format, CPSubwindowMode, &simplePictAttr);
//query tree
{
Window root_return, parent_return;
Window *children = NULL;
unsigned int nchildren;
//next line generates the error, which was described in the my e-mail
if (XQueryTree(display, rootW, &root_return, &parent_return, &children, &nchildren)) {
if (nchildren) {
int cycle;
for (cycle = 0;cycle<nchildren;cycle++) {
std::cout<<"parent= "<<parent_return<<", child="<<children[cycle]<<std::endl;
}
XFree((void *) children);
}
}
}
while (1) {
XNextEvent (display, &report);
}
XCloseDisplay(display);
return 0;
}
void setupEvents(void) {
int minor,major;
minor = major = 0;
if (!XDamageQueryVersion(display, &major, &minor)) {
std::cout<<"Couldn't initialize Xdamage extension\n";
throw 0;
} else {
std::cout<<"XDamage version "<<major<<":"<<minor<<std::endl;
if (!XDamageQueryExtension(display, &damage_event, &damage_error)) {
throw 0;
}
}
minor = major = 0;
if (!XCompositeQueryVersion(display, &major, &minor)) {
std::cout<<"Couldn't initialize Xcomposite extension\n";
throw 0;
} else {
std::cout<<"XComposite version "<<major<<":"<<minor<<std::endl;
if (!XCompositeQueryExtension(display, &composite_event, &composite_error)) {
throw 0;
}
}
minor = major = 0;
if (!XFixesQueryVersion(display, &major, &minor)) {
std::cout<<"Couldn't initialize Xfixes extension\n";
throw 0;
} else {
std::cout<<"XFixes version "<<major<<":"<<minor<<std::endl;
if (!XFixesQueryExtension(display, &fixes_event, &fixes_error)) {
throw 0;
}
}
minor = major = 0;
if (!XRenderQueryVersion(display, &major, &minor)) {
std::cout<<"Couldn't initialize Xrender extension\n";
throw 0;
} else {
std::cout<<"XRender version "<<major<<":"<<minor<<std::endl;
if (!XRenderQueryExtension(display, &render_event, &render_error)) {
throw 0;
}
}
minor = major = 0;
if (!XShapeQueryVersion(display, &major, &minor)) {
std::cout<<"Couldn't initialize Xshape extension\n";
throw 0;
} else {
std::cout<<"XShape version "<<major<<":"<<minor<<std::endl;
if (!XShapeQueryExtension(display, &shape_event, &shape_error)) {
throw 0;
}
}
return;
}_______________________________________________
xorg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xorg