+#include "efence.h"
+
#include "display.h"
#include "screen.h"
#include "list.h"
rep = xcb_get_extension_data(dpy->conn, &xcb_##name##_id); \
\
ext = find_extension_##name(dpy) \
- ext->present = rep && rep->present; \
- ext->error = rep && rep->first_error; \
- ext->event = rep && rep->first_event; \
- ext->opcode = rep && rep->major_opcode; \
+ ext->present = rep && rep->present; \
+ ext->error = rep ? rep->first_error : 0; \
+ ext->event = rep ? rep->first_event : 0; \
+ ext->opcode = rep ? rep->major_opcode : 0; \
\
if (ext->present) \
ck_##name = xcb_##name##_query_version(dpy->conn, \
query_statics(d_display_t *dpy)
{
d_atom_query_t atoms[] = {
- { .atom = &dpy->a.atom,
- .name = "ATOM" },
- { .atom = &dpy->a.cardinal,
- .name = "CARDINAL" },
{ .atom = &dpy->a.utf8_string,
.name = "UTF8_STRING" },
- { .atom = &dpy->a.string,
- .name = "STRING" },
- { .atom = &dpy->a.pixmap,
- .name = "PIXMAP" },
{ .atom = &dpy->a.net_wm_window_type,
.name = "_NET_WM_WINDOW_TYPE" },
{ .atom = &dpy->a.net_wm_window_type_desktop,
for (i = 0; atoms[i].atom != NULL; ++i)
reply_atom(dpy, &atoms[i]);
+
+ /* hard-coded ones, you can't request these */
+ dpy->a.atom = 4;
+ dpy->a.cardinal = 6;
+ dpy->a.pixmap = 20;
+ dpy->a.string = 31;
}
d_display_t*
if (dpy && --dpy->ref == 0) {
d_list_it_t *it;
- xcb_disconnect(dpy->conn);
-
for (it = list_top(dpy->screens); it; it = it->next)
screen_unref(it->data);
list_unref(dpy->screens);
+
+ xcb_disconnect(dpy->conn);
free(dpy);
}
}
default: break;
}
+ req = NULL;
if (major_opcode <= 127)
switch (major_opcode) {
case 1: req = "CreateWindow"; break;
case 72: req = "PutImage"; break;
default: break;
}
+ else if (major_opcode == dpy->damage.opcode)
+ switch (minor_opcode)
+ {
+ case 0: req = "DamageQueryVersion"; break;
+ case 1: req = "DamageCreate"; break;
+ case 2: req = "DamageDestroy"; break;
+ case 3: req = "DamageSubtract"; break;
+ default: break;
+ }
+ else if (major_opcode == dpy->render.opcode)
+ switch (minor_opcode)
+ {
+ case 0: req = "RenderQueryVersion"; break;
+ case 1: req = "RenderQueryPictFormats"; break;
+ case 2: req = "RenderQueryPictIndexValues"; break;
+ case 4: req = "RenderCreatePicture"; break;
+ case 5: req = "RenderChangePicture"; break;
+ case 6: req = "RenderSetPictureClipRectangles"; break;
+ case 7: req = "RenderFreePicture"; break;
+ case 8: req = "RenderComposite"; break;
+ case 10: req = "RenderCompositeTrapezoids"; break;
+ case 11: req = "RenderCompositeTriangles"; break;
+ case 12: req = "RenderCompositeTriStrip"; break;
+ case 13: req = "RenderCompositeTriFan"; break;
+ case 17: req = "RenderCreateGlyphSet"; break;
+ case 18: req = "RenderReferenceGlyphSet"; break;
+ case 19: req = "RenderFreeGlyphSet"; break;
+ case 20: req = "RenderAddGlyphs"; break;
+ case 22: req = "RenderFreeGlyphs"; break;
+ case 23: req = "RenderCompositeGlyphs8"; break;
+ case 24: req = "RenderCompositeGlyphs16"; break;
+ case 25: req = "RenderCompositeGlyphs32"; break;
+ case 26: req = "RenderFillRectangles"; break;
+ case 27: req = "RenderCreateCursor"; break;
+ case 28: req = "RenderSetPictureTransform"; break;
+ case 29: req = "RenderQueryFilters"; break;
+ case 30: req = "RenderSetPictureFilter"; break;
+ case 31: req = "RenderCreateAnimCursor"; break;
+ case 32: req = "RenderAddTraps"; break;
+ case 33: req = "RenderCreateSolidFill"; break;
+ case 34: req = "RenderLinearGradient"; break;
+ case 35: req = "RenderRadialGradient"; break;
+ case 36: req = "RenderConicalGradient"; break;
+ default: break;
+ }
+ else if (major_opcode == dpy->composite.opcode)
+ switch (minor_opcode)
+ {
+ case 0: req = "CompositeQueryVersion"; break;
+ case 1: req = "CompositeRedirectWindow"; break;
+ case 2: req = "CompositeRedirectSubwindows"; break;
+ case 3: req = "CompositeUnredirectWindow"; break;
+ case 4: req = "CompositeUnredirectSubwindows"; break;
+ case 5: req = "CompositeCreateRegionFromBorderClip"; break;
+ case 6: req = "CompositeNameWindowPixmap"; break;
+ case 7: req = "CompositeGetOverlayWindow"; break;
+ case 8: req = "CompositeReleaseOverlayWindow"; break;
+ default: break;
+ }
if (name && req)
printf("XError: %s %s!\n",
printf("XError: code %d major opcode %d minor opcode %d!\n",
ev->error_code, major_opcode, minor_opcode);
- abort();
+ //abort();
}
int