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

Reply via email to