#include <stdlib.h>
#include <stdio.h>
+#include <xcb/damage.h>
#include <xcb/render.h>
#include <xcb/xfixes.h>
-#include <xcb/damage.h>
+#include <xcb/composite.h>
+
+static void
+query_extensions(d_display_t *dpy)
+{
+ xcb_xfixes_query_version_cookie_t fixes_version_cookie;
+ xcb_render_query_version_cookie_t render_version_cookie;
+ xcb_composite_query_version_cookie_t composite_version_cookie;
+ xcb_damage_query_version_cookie_t damage_version_cookie;
+ xcb_render_query_pict_formats_cookie_t render_formats_cookie;
+
+ const xcb_query_extension_reply_t *rep;
+
+ xcb_prefetch_extension_data(dpy->conn, &xcb_xfixes_id);
+ xcb_prefetch_extension_data(dpy->conn, &xcb_render_id);
+ xcb_prefetch_extension_data(dpy->conn, &xcb_composite_id);
+ xcb_prefetch_extension_data(dpy->conn, &xcb_damage_id);
+
+ rep = xcb_get_extension_data(dpy->conn, &xcb_xfixes_id);
+ dpy->xfixes = rep && rep->present;
+ dpy->xfixes_error = rep && rep->first_error;
+ dpy->xfixes_event = rep && rep->first_event;
+ dpy->xfixes_opcode = rep && rep->major_opcode;
+
+ rep = xcb_get_extension_data(dpy->conn, &xcb_render_id);
+ dpy->render = rep && rep->present;
+ dpy->render_error = rep && rep->first_error;
+ dpy->render_event = rep && rep->first_event;
+ dpy->render_opcode = rep && rep->major_opcode;
+
+ rep = xcb_get_extension_data(dpy->conn, &xcb_composite_id);
+ dpy->composite = rep && rep->present;
+ dpy->composite_error = rep && rep->first_error;
+ dpy->composite_event = rep && rep->first_event;
+ dpy->composite_opcode = rep && rep->major_opcode;
+
+ rep = xcb_get_extension_data(dpy->conn, &xcb_damage_id);
+ dpy->damage = rep && rep->present;
+ dpy->damage_error = rep && rep->first_error;
+ dpy->damage_event = rep && rep->first_event;
+ dpy->damage_opcode = rep && rep->major_opcode;
+}
+
d_display_t*
display_open(const char *name)
dpy = malloc(sizeof(d_display_t));
dpy->conn = conn;
dpy->ref = 1;
+
+ query_extensions(dpy);
}
return dpy;
}
default: break;
}
if (!name)
- switch (ev->error_code - dpy->fixes_error) {
+ switch (ev->error_code - dpy->xfixes_error) {
case XCB_XFIXES_BAD_REGION: name = "BadRegion"; break;
default: break;
}