5 #include <xcb/render.h>
6 #include <xcb/xfixes.h>
7 #include <xcb/damage.h>
10 display_open(const char *name)
12 d_display_t *dpy = NULL;
13 xcb_connection_t *conn;
15 conn = xcb_connect(name, NULL);
17 dpy = malloc(sizeof(d_display_t));
25 display_ref(d_display_t *dpy)
31 display_unref(d_display_t *dpy)
33 if (dpy && --dpy->ref == 0) {
34 xcb_disconnect(dpy->conn);
40 display_error(d_display_t *dpy, xcb_generic_error_t *ev)
42 const int major_opcode = ((xcb_request_error_t*)ev)->major_opcode;
43 const int minor_opcode = ((xcb_request_error_t*)ev)->minor_opcode;
44 const char *name, *req;
46 /* XXX check if we should ignore it (ev->full_sequence) */
51 switch (ev->error_code) {
52 case XCB_REQUEST: name = "BadRequest"; break;
53 case XCB_VALUE: name = "BadValue"; break;
54 case XCB_WINDOW: name = "BadWindow"; break;
55 case XCB_PIXMAP: name = "BadPixmap"; break;
56 case XCB_MATCH: name = "BadMatch"; break;
57 case XCB_DRAWABLE: name = "BadDrawable"; break;
58 case XCB_G_CONTEXT: name = "BadGC"; break;
62 switch (ev->error_code - dpy->fixes_error) {
63 case XCB_XFIXES_BAD_REGION: name = "BadRegion"; break;
67 switch (ev->error_code - dpy->damage_error) {
68 case XCB_DAMAGE_BAD_DAMAGE: name = "BadDamage"; break;
72 switch (ev->error_code - dpy->render_error) {
73 case XCB_RENDER_PICT_FORMAT: name = "BadPictFormat"; break;
74 case XCB_RENDER_PICT_OP: name = "BadPictOp"; break;
75 case XCB_RENDER_PICTURE: name = "BadPicture"; break;
76 case XCB_RENDER_GLYPH_SET: name = "BadGlyphSet"; break;
77 case XCB_RENDER_GLYPH: name = "BadGlyph"; break;
81 if (major_opcode <= 127)
82 switch (major_opcode) {
83 case 1: req = "CreateWindow"; break;
84 case 2: req = "ChangeWindowAttributes"; break;
85 case 3: req = "GetWindowAttributes"; break;
86 case 14: req = "GetGeometry"; break;
87 case 15: req = "QueryTree"; break;
88 case 18: req = "ChangeProperty"; break;
89 case 20: req = "GetProperty"; break;
90 case 22: req = "SetSelectionOwner"; break;
91 case 23: req = "GetSelectionOwner"; break;
92 case 53: req = "CreatePixmap"; break;
93 case 54: req = "FreePixmap"; break;
94 case 55: req = "CreateGC"; break;
95 case 56: req = "ChangeGC"; break;
96 case 60: req = "FreeGC"; break;
97 case 72: req = "PutImage"; break;
102 printf("XError: %s %s!\n",
105 printf("XError: %s major opcode %d minor opcode %d!\n",
106 name, major_opcode, minor_opcode);
108 printf("XError: code %d major opcode %d minor opcode %d!\n",
109 ev->error_code, major_opcode, minor_opcode);