Xxcbint.h revision 1ab64890
11ab64890Smrg/* Copyright (C) 2003-2006 Jamey Sharp, Josh Triplett
21ab64890Smrg * This file is licensed under the MIT license. See the file COPYING. */
31ab64890Smrg
41ab64890Smrg#ifndef XXCBINT_H
51ab64890Smrg#define XXCBINT_H
61ab64890Smrg
71ab64890Smrg#include <assert.h>
81ab64890Smrg#include <X11/Xlibint.h>
91ab64890Smrg#include <X11/Xlib-xcb.h>
101ab64890Smrg#include "locking.h" /* really just want X11/Xthreads.h but can't have it. */
111ab64890Smrg
121ab64890Smrg#define XCB_SEQUENCE_COMPARE(a,op,b)	((int) ((a) - (b)) op 0)
131ab64890Smrg#define assert_sequence_less(a,b) assert(XCB_SEQUENCE_COMPARE((a), <=, (b)))
141ab64890Smrg
151ab64890Smrgtypedef struct PendingRequest PendingRequest;
161ab64890Smrgstruct PendingRequest {
171ab64890Smrg	PendingRequest *next;
181ab64890Smrg	xcondition_rec condition;
191ab64890Smrg	int waiters; /* Number of threads waiting; -1 if no wait needed */
201ab64890Smrg	unsigned int sequence;
211ab64890Smrg};
221ab64890Smrg
231ab64890Smrgtypedef struct _X11XCBPrivate {
241ab64890Smrg	struct _XLockPtrs lock_fns;
251ab64890Smrg	xcb_connection_t *connection;
261ab64890Smrg	PendingRequest *pending_requests;
271ab64890Smrg	PendingRequest **pending_requests_tail;
281ab64890Smrg	xcb_generic_event_t *next_event;
291ab64890Smrg	const char *request_extra;
301ab64890Smrg	int request_extra_size;
311ab64890Smrg	char *partial_request;
321ab64890Smrg	int partial_request_offset;
331ab64890Smrg	char *reply_data;
341ab64890Smrg	int reply_length;
351ab64890Smrg	int reply_consumed;
361ab64890Smrg	enum XEventQueueOwner event_owner;
371ab64890Smrg	XID next_xid;
381ab64890Smrg} _X11XCBPrivate;
391ab64890Smrg
401ab64890Smrg/* xcb_disp.c */
411ab64890Smrg
421ab64890Smrgint _XConnectXCB(Display *dpy, _Xconst char *display, char **fullnamep, int *screenp);
431ab64890Smrgvoid _XFreeX11XCBStructure(Display *dpy);
441ab64890Smrg
451ab64890Smrg/* xcb_lock.c */
461ab64890Smrg
471ab64890Smrgint _XCBInitDisplayLock(Display *dpy);
481ab64890Smrgvoid _XCBShutdownDisplayLock(Display *dpy);
491ab64890Smrg
501ab64890Smrg/* _XGetXCBBuffer and _XPutXCBBuffer calls must be paired and must not
511ab64890Smrg * be nested. */
521ab64890Smrg
531ab64890Smrgvoid _XGetXCBBuffer(Display *dpy);
541ab64890Smrgvoid _XPutXCBBuffer(Display *dpy);
551ab64890Smrg
561ab64890Smrg#endif /* XXCBINT_H */
57