1 /* $XConsortium: Xlib.h,v 11.221 93/07/02 14:13:28 gildea Exp $ */
2 /*
3  * Copyright 1985, 1986, 1987, 1991 by the Massachusetts Institute of Technology
4  *
5  * Permission to use, copy, modify, and distribute this software and its
6  * documentation for any purpose and without fee is hereby granted, provided
7  * that the above copyright notice appear in all copies and that both that
8  * copyright notice and this permission notice appear in supporting
9  * documentation, and that the name of M.I.T. not be used in advertising
10  * or publicity pertaining to distribution of the software without specific,
11  * written prior permission. M.I.T. makes no representations about the
12  * suitability of this software for any purpose.  It is provided "as is"
13  * without express or implied warranty.
14  *
15  * X Window System is a Trademark of MIT.
16  *
17  */
18 
19 
20 /*
21  *	Xlib.h - Header definition and support file for the C subroutine
22  *	interface library (Xlib) to the X Window System Protocol (V11).
23  *	Structures and symbols starting with "_" are private to the library.
24  */
25 #ifndef _XLIB_H_
26 #define _XLIB_H_
27 
28 #define XlibSpecificationRelease 5
29 
30 #if !defined(MAC_OSX_TK)
31 #   include <X11/X.h>
32 #endif
33 #ifdef MAC_OSX_TK
34 #   include <X11/X.h>
35 #   define Cursor XCursor
36 #   define Region XRegion
37 #endif
38 
39 /* applications should not depend on these two headers being included! */
40 #include <X11/Xfuncproto.h>
41 
42 #ifndef X_WCHAR
43 #ifdef X_NOT_STDC_ENV
44 #define X_WCHAR
45 #endif
46 #endif
47 
48 #ifndef X_WCHAR
49 #include <stddef.h>
50 #else
51 /* replace this with #include or typedef appropriate for your system */
52 typedef unsigned long wchar_t;
53 #endif
54 
55 typedef char *XPointer;
56 
57 #define Bool int
58 #if defined(MAC_OSX_TK)
59 /* Use define rather than typedef, since may need to undefine this later */
60 #define Status int
61 #else
62 typedef int Status;
63 #endif
64 #define True 1
65 #define False 0
66 
67 #define QueuedAlready 0
68 #define QueuedAfterReading 1
69 #define QueuedAfterFlush 2
70 
71 #define ConnectionNumber(dpy) 	((dpy)->fd)
72 #define RootWindow(dpy, scr) 	(((dpy)->screens[(scr)]).root)
73 #define DefaultScreen(dpy) 	((dpy)->default_screen)
74 #define DefaultRootWindow(dpy) 	(((dpy)->screens[(dpy)->default_screen]).root)
75 #define DefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual)
76 #define DefaultGC(dpy, scr) 	(((dpy)->screens[(scr)]).default_gc)
77 #define BlackPixel(dpy, scr) 	(((dpy)->screens[(scr)]).black_pixel)
78 #define WhitePixel(dpy, scr) 	(((dpy)->screens[(scr)]).white_pixel)
79 #define AllPlanes 		((unsigned long)~0L)
80 #define QLength(dpy) 		((dpy)->qlen)
81 #define DisplayWidth(dpy, scr) 	(((dpy)->screens[(scr)]).width)
82 #define DisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height)
83 #define DisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth)
84 #define DisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight)
85 #define DisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
86 #define DisplayCells(dpy, scr) 	(DefaultVisual((dpy), (scr))->map_entries)
87 #define ScreenCount(dpy) 	((dpy)->nscreens)
88 #define ServerVendor(dpy) 	((dpy)->vendor)
89 #define ProtocolVersion(dpy) 	((dpy)->proto_major_version)
90 #define ProtocolRevision(dpy) 	((dpy)->proto_minor_version)
91 #define VendorRelease(dpy) 	((dpy)->release)
92 #define DisplayString(dpy) 	((dpy)->display_name)
93 #define DefaultDepth(dpy, scr) 	(((dpy)->screens[(scr)]).root_depth)
94 #define DefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap)
95 #define BitmapUnit(dpy) 	((dpy)->bitmap_unit)
96 #define BitmapBitOrder(dpy) 	((dpy)->bitmap_bit_order)
97 #define BitmapPad(dpy) 		((dpy)->bitmap_pad)
98 #define ImageByteOrder(dpy) 	((dpy)->byte_order)
99 #define NextRequest(dpy)	((dpy)->request + 1)
100 #define LastKnownRequestProcessed(dpy)	((dpy)->request)
101 
102 /* macros for screen oriented applications (toolkit) */
103 #define ScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)]))
104 #define DefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen]))
105 #define DisplayOfScreen(s)	((s)->display)
106 #define RootWindowOfScreen(s)	((s)->root)
107 #define BlackPixelOfScreen(s)	((s)->black_pixel)
108 #define WhitePixelOfScreen(s)	((s)->white_pixel)
109 #define DefaultColormapOfScreen(s)((s)->cmap)
110 #define DefaultDepthOfScreen(s)	((s)->root_depth)
111 #define DefaultGCOfScreen(s)	((s)->default_gc)
112 #define DefaultVisualOfScreen(s)((s)->root_visual)
113 #define WidthOfScreen(s)	((s)->width)
114 #define HeightOfScreen(s)	((s)->height)
115 #define WidthMMOfScreen(s)	((s)->mwidth)
116 #define HeightMMOfScreen(s)	((s)->mheight)
117 #define PlanesOfScreen(s)	((s)->root_depth)
118 #define CellsOfScreen(s)	(DefaultVisualOfScreen((s))->map_entries)
119 #define MinCmapsOfScreen(s)	((s)->min_maps)
120 #define MaxCmapsOfScreen(s)	((s)->max_maps)
121 #define DoesSaveUnders(s)	((s)->save_unders)
122 #define DoesBackingStore(s)	((s)->backing_store)
123 #define EventMaskOfScreen(s)	((s)->root_input_mask)
124 
125 /*
126  * Extensions need a way to hang private data on some structures.
127  */
128 typedef struct _XExtData {
129 	int number;		/* number returned by XRegisterExtension */
130 	struct _XExtData *next;	/* next item on list of data for structure */
131 	int (*free_private)();	/* called to free private storage */
132 	XPointer private_data;	/* data private to this extension. */
133 } XExtData;
134 
135 /*
136  * This file contains structures used by the extension mechanism.
137  */
138 typedef struct {		/* public to extension, cannot be changed */
139 	int extension;		/* extension number */
140 	int major_opcode;	/* major op-code assigned by server */
141 	int first_event;	/* first event number for the extension */
142 	int first_error;	/* first error number for the extension */
143 } XExtCodes;
144 
145 /*
146  * Data structure for retrieving info about pixmap formats.
147  */
148 
149 typedef struct {
150     int depth;
151     int bits_per_pixel;
152     int scanline_pad;
153 } XPixmapFormatValues;
154 
155 
156 /*
157  * Data structure for setting graphics context.
158  */
159 typedef struct {
160 	int function;		/* logical operation */
161 	unsigned long plane_mask;/* plane mask */
162 	unsigned long foreground;/* foreground pixel */
163 	unsigned long background;/* background pixel */
164 	int line_width;		/* line width */
165 	int line_style;	 	/* LineSolid, LineOnOffDash, LineDoubleDash */
166 	int cap_style;	  	/* CapNotLast, CapButt,
167 				   CapRound, CapProjecting */
168 	int join_style;	 	/* JoinMiter, JoinRound, JoinBevel */
169 	int fill_style;	 	/* FillSolid, FillTiled,
170 				   FillStippled, FillOpaeueStippled */
171 	int fill_rule;	  	/* EvenOddRule, WindingRule */
172 	int arc_mode;		/* ArcChord, ArcPieSlice */
173 	Pixmap tile;		/* tile pixmap for tiling operations */
174 	Pixmap stipple;		/* stipple 1 plane pixmap for stipping */
175 	int ts_x_origin;	/* offset for tile or stipple operations */
176 	int ts_y_origin;
177         Font font;	        /* default text font for text operations */
178 	int subwindow_mode;     /* ClipByChildren, IncludeInferiors */
179 	Bool graphics_exposures;/* boolean, should exposures be generated */
180 	int clip_x_origin;	/* origin for clipping */
181 	int clip_y_origin;
182 	Pixmap clip_mask;	/* bitmap clipping; other calls for rects */
183 	int dash_offset;	/* patterned/dashed line information */
184 	char dashes;
185 } XGCValues;
186 
187 /*
188  * Graphics context.  The contents of this structure are implementation
189  * dependent.  A GC should be treated as opaque by application code.
190  */
191 
192 typedef XGCValues *GC;
193 
194 /*
195  * Visual structure; contains information about colormapping possible.
196  */
197 typedef struct {
198 	XExtData *ext_data;	/* hook for extension to hang data */
199 	VisualID visualid;	/* visual id of this visual */
200 #if defined(__cplusplus) || defined(c_plusplus)
201 	int c_class;		/* C++ class of screen (monochrome, etc.) */
202 #else
203 	int class;		/* class of screen (monochrome, etc.) */
204 #endif
205 	unsigned long red_mask, green_mask, blue_mask;	/* mask values */
206 	int bits_per_rgb;	/* log base 2 of distinct color values */
207 	int map_entries;	/* color map entries */
208 } Visual;
209 
210 /*
211  * Depth structure; contains information for each possible depth.
212  */
213 typedef struct {
214 	int depth;		/* this depth (Z) of the depth */
215 	int nvisuals;		/* number of Visual types at this depth */
216 	Visual *visuals;	/* list of visuals possible at this depth */
217 } Depth;
218 
219 /*
220  * Information about the screen.  The contents of this structure are
221  * implementation dependent.  A Screen should be treated as opaque
222  * by application code.
223  */
224 typedef struct {
225 	XExtData *ext_data;	/* hook for extension to hang data */
226 	struct _XDisplay *display;/* back pointer to display structure */
227 	Window root;		/* Root window id. */
228 	int width, height;	/* width and height of screen */
229 	int mwidth, mheight;	/* width and height of  in millimeters */
230 	int ndepths;		/* number of depths possible */
231 	Depth *depths;		/* list of allowable depths on the screen */
232 	int root_depth;		/* bits per pixel */
233 	Visual *root_visual;	/* root visual */
234 	GC default_gc;		/* GC for the root root visual */
235 	Colormap cmap;		/* default color map */
236 	unsigned long white_pixel;
237 	unsigned long black_pixel;	/* White and Black pixel values */
238 	int max_maps, min_maps;	/* max and min color maps */
239 	int backing_store;	/* Never, WhenMapped, Always */
240 	Bool save_unders;
241 	long root_input_mask;	/* initial root input mask */
242 } Screen;
243 
244 /*
245  * Format structure; describes ZFormat data the screen will understand.
246  */
247 typedef struct {
248 	XExtData *ext_data;	/* hook for extension to hang data */
249 	int depth;		/* depth of this image format */
250 	int bits_per_pixel;	/* bits/pixel at this depth */
251 	int scanline_pad;	/* scanline must padded to this multiple */
252 } ScreenFormat;
253 
254 /*
255  * Data structure for setting window attributes.
256  */
257 typedef struct {
258     Pixmap background_pixmap;	/* background or None or ParentRelative */
259     unsigned long background_pixel;	/* background pixel */
260     Pixmap border_pixmap;	/* border of the window */
261     unsigned long border_pixel;	/* border pixel value */
262     int bit_gravity;		/* one of bit gravity values */
263     int win_gravity;		/* one of the window gravity values */
264     int backing_store;		/* NotUseful, WhenMapped, Always */
265     unsigned long backing_planes;/* planes to be preseved if possible */
266     unsigned long backing_pixel;/* value to use in restoring planes */
267     Bool save_under;		/* should bits under be saved? (popups) */
268     long event_mask;		/* set of events that should be saved */
269     long do_not_propagate_mask;	/* set of events that should not propagate */
270     Bool override_redirect;	/* boolean value for override-redirect */
271     Colormap colormap;		/* color map to be associated with window */
272     Cursor cursor;		/* cursor to be displayed (or None) */
273 } XSetWindowAttributes;
274 
275 typedef struct {
276     int x, y;			/* location of window */
277     int width, height;		/* width and height of window */
278     int border_width;		/* border width of window */
279     int depth;          	/* depth of window */
280     Visual *visual;		/* the associated visual structure */
281     Window root;        	/* root of screen containing window */
282 #if defined(__cplusplus) || defined(c_plusplus)
283     int c_class;		/* C++ InputOutput, InputOnly*/
284 #else
285     int class;			/* InputOutput, InputOnly*/
286 #endif
287     int bit_gravity;		/* one of bit gravity values */
288     int win_gravity;		/* one of the window gravity values */
289     int backing_store;		/* NotUseful, WhenMapped, Always */
290     unsigned long backing_planes;/* planes to be preserved if possible */
291     unsigned long backing_pixel;/* value to be used when restoring planes */
292     Bool save_under;		/* boolean, should bits under be saved? */
293     Colormap colormap;		/* color map to be associated with window */
294     Bool map_installed;		/* boolean, is color map currently installed*/
295     int map_state;		/* IsUnmapped, IsUnviewable, IsViewable */
296     long all_event_masks;	/* set of events all people have interest in*/
297     long your_event_mask;	/* my event mask */
298     long do_not_propagate_mask; /* set of events that should not propagate */
299     Bool override_redirect;	/* boolean value for override-redirect */
300     Screen *screen;		/* back pointer to correct screen */
301 } XWindowAttributes;
302 
303 /*
304  * Data structure for host setting; getting routines.
305  *
306  */
307 
308 typedef struct {
309 	int family;		/* for example FamilyInternet */
310 	int length;		/* length of address, in bytes */
311 	char *address;		/* pointer to where to find the bytes */
312 } XHostAddress;
313 
314 /*
315  * Data structure for "image" data, used by image manipulation routines.
316  */
317 typedef struct _XImage {
318     int width, height;		/* size of image */
319     int xoffset;		/* number of pixels offset in X direction */
320     int format;			/* XYBitmap, XYPixmap, ZPixmap */
321     char *data;			/* pointer to image data */
322     int byte_order;		/* data byte order, LSBFirst, MSBFirst */
323     int bitmap_unit;		/* quant. of scanline 8, 16, 32 */
324     int bitmap_bit_order;	/* LSBFirst, MSBFirst */
325     int bitmap_pad;		/* 8, 16, 32 either XY or ZPixmap */
326     int depth;			/* depth of image */
327     int bytes_per_line;		/* accelarator to next line */
328     int bits_per_pixel;		/* bits per pixel (ZPixmap) */
329     unsigned long red_mask;	/* bits in z arrangment */
330     unsigned long green_mask;
331     unsigned long blue_mask;
332     XPointer obdata;		/* hook for the object routines to hang on */
333     struct funcs {		/* image manipulation routines */
334 	struct _XImage *(*create_image)();
335 #if NeedFunctionPrototypes
336 	int (*destroy_image)        (struct _XImage *);
337 	unsigned long (*get_pixel)  (struct _XImage *, int, int);
338 	int (*put_pixel)            (struct _XImage *, int, int, unsigned long);
339 	struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int);
340 	int (*add_pixel)            (struct _XImage *, long);
341 #else
342 	int (*destroy_image)();
343 	unsigned long (*get_pixel)();
344 	int (*put_pixel)();
345 	struct _XImage *(*sub_image)();
346 	int (*add_pixel)();
347 #endif
348 	} f;
349 } XImage;
350 
351 /*
352  * Data structure for XReconfigureWindow
353  */
354 typedef struct {
355     int x, y;
356     int width, height;
357     int border_width;
358     Window sibling;
359     int stack_mode;
360 } XWindowChanges;
361 
362 /*
363  * Data structure used by color operations
364  */
365 typedef struct {
366 	unsigned long pixel;
367 	unsigned short red, green, blue;
368 	char flags;  /* do_red, do_green, do_blue */
369 	char pad;
370 } XColor;
371 
372 /*
373  * Data structures for graphics operations.  On most machines, these are
374  * congruent with the wire protocol structures, so reformatting the data
375  * can be avoided on these architectures.
376  */
377 typedef struct {
378     short x1, y1, x2, y2;
379 } XSegment;
380 
381 typedef struct {
382     short x, y;
383 } XPoint;
384 
385 typedef struct {
386     short x, y;
387     unsigned short width, height;
388 } XRectangle;
389 
390 typedef struct {
391     short x, y;
392     unsigned short width, height;
393     short angle1, angle2;
394 } XArc;
395 
396 
397 /* Data structure for XChangeKeyboardControl */
398 
399 typedef struct {
400         int key_click_percent;
401         int bell_percent;
402         int bell_pitch;
403         int bell_duration;
404         int led;
405         int led_mode;
406         int key;
407         int auto_repeat_mode;   /* On, Off, Default */
408 } XKeyboardControl;
409 
410 /* Data structure for XGetKeyboardControl */
411 
412 typedef struct {
413         int key_click_percent;
414 	int bell_percent;
415 	unsigned int bell_pitch, bell_duration;
416 	unsigned long led_mask;
417 	int global_auto_repeat;
418 	char auto_repeats[32];
419 } XKeyboardState;
420 
421 /* Data structure for XGetMotionEvents.  */
422 
423 typedef struct {
424         Time time;
425 	short x, y;
426 } XTimeCoord;
427 
428 /* Data structure for X{Set,Get}ModifierMapping */
429 
430 typedef struct {
431  	int max_keypermod;	/* The server's max # of keys per modifier */
432  	KeyCode *modifiermap;	/* An 8 by max_keypermod array of modifiers */
433 } XModifierKeymap;
434 
435 
436 /*
437  * Display datatype maintaining display specific data.
438  * The contents of this structure are implementation dependent.
439  * A Display should be treated as opaque by application code.
440  */
441 typedef struct _XDisplay {
442 	XExtData *ext_data;	/* hook for extension to hang data */
443 	struct _XFreeFuncs *free_funcs; /* internal free functions */
444 	int fd;			/* Network socket. */
445 	int conn_checker;         /* ugly thing used by _XEventsQueued */
446 	int proto_major_version;/* maj. version of server's X protocol */
447 	int proto_minor_version;/* minor version of servers X protocol */
448 	char *vendor;		/* vendor of the server hardware */
449         XID resource_base;	/* resource ID base */
450 	XID resource_mask;	/* resource ID mask bits */
451 	XID resource_id;	/* allocator current ID */
452 	int resource_shift;	/* allocator shift to correct bits */
453 	XID (*resource_alloc)(); /* allocator function */
454 	int byte_order;		/* screen byte order, LSBFirst, MSBFirst */
455 	int bitmap_unit;	/* padding and data requirements */
456 	int bitmap_pad;		/* padding requirements on bitmaps */
457 	int bitmap_bit_order;	/* LeastSignificant or MostSignificant */
458 	int nformats;		/* number of pixmap formats in list */
459 	ScreenFormat *pixmap_format;	/* pixmap format list */
460 	int vnumber;		/* Xlib's X protocol version number. */
461 	int release;		/* release of the server */
462 	struct _XSQEvent *head, *tail;	/* Input event queue. */
463 	int qlen;		/* Length of input event queue */
464 	unsigned long request;	/* sequence number of last request. */
465 	char *last_req;		/* beginning of last request, or dummy */
466 	char *buffer;		/* Output buffer starting address. */
467 	char *bufptr;		/* Output buffer index pointer. */
468 	char *bufmax;		/* Output buffer maximum+1 address. */
469 	unsigned max_request_size; /* maximum number 32 bit words in request*/
470 	struct _XrmHashBucketRec *db;
471 	int (*synchandler)();	/* Synchronization handler */
472 	char *display_name;	/* "host:display" string used on this connect*/
473 	int default_screen;	/* default screen for operations */
474 	int nscreens;		/* number of screens on this server*/
475 	Screen *screens;	/* pointer to list of screens */
476 	unsigned long motion_buffer;	/* size of motion buffer */
477 	unsigned long flags;	/* internal connection flags */
478 	int min_keycode;	/* minimum defined keycode */
479 	int max_keycode;	/* maximum defined keycode */
480 	KeySym *keysyms;	/* This server's keysyms */
481 	XModifierKeymap *modifiermap;	/* This server's modifier keymap */
482 	int keysyms_per_keycode;/* number of rows */
483 	char *xdefaults;	/* contents of defaults from server */
484 	char *scratch_buffer;	/* place to hang scratch buffer */
485 	unsigned long scratch_length;	/* length of scratch buffer */
486 	int ext_number;		/* extension number on this display */
487 	struct _XExten *ext_procs; /* extensions initialized on this display */
488 	/*
489 	 * the following can be fixed size, as the protocol defines how
490 	 * much address space is available.
491 	 * While this could be done using the extension vector, there
492 	 * may be MANY events processed, so a search through the extension
493 	 * list to find the right procedure for each event might be
494 	 * expensive if many extensions are being used.
495 	 */
496 	Bool (*event_vec[128])();  /* vector for wire to event */
497 	Status (*wire_vec[128])(); /* vector for event to wire */
498 	KeySym lock_meaning;	   /* for XLookupString */
499 	struct _XLockInfo *lock;   /* multi-thread state, display lock */
500 	struct _XInternalAsync *async_handlers; /* for internal async */
501 	unsigned long bigreq_size; /* max size of big requests */
502 	struct _XLockPtrs *lock_fns; /* pointers to threads functions */
503 	/* things above this line should not move, for binary compatibility */
504 	struct _XKeytrans *key_bindings; /* for XLookupString */
505 	Font cursor_font;	   /* for XCreateFontCursor */
506 	struct _XDisplayAtoms *atoms; /* for XInternAtom */
507 	unsigned int mode_switch;  /* keyboard group modifiers */
508 	struct _XContextDB *context_db; /* context database */
509 	Bool (**error_vec)();      /* vector for wire to error */
510 	/*
511 	 * Xcms information
512 	 */
513 	struct {
514 	   XPointer defaultCCCs;  /* pointer to an array of default XcmsCCC */
515 	   XPointer clientCmaps;  /* pointer to linked list of XcmsCmapRec */
516 	   XPointer perVisualIntensityMaps;
517 				  /* linked list of XcmsIntensityMap */
518 	} cms;
519 	struct _XIMFilter *im_filters;
520 	struct _XSQEvent *qfree; /* unallocated event queue elements */
521 	unsigned long next_event_serial_num; /* inserted into next queue elt */
522 	int (*savedsynchandler)(); /* user synchandler when Xlib usurps */
523 } Display;
524 
525 #if NeedFunctionPrototypes	/* prototypes require event type definitions */
526 #undef _XEVENT_
527 #endif
528 #ifndef _XEVENT_
529 
530 #define XMaxTransChars 4
531 
532 /*
533  * Definitions of specific events.
534  */
535 typedef struct {
536 	int type;		/* of event */
537 	unsigned long serial;	/* # of last request processed by server */
538 	Bool send_event;	/* true if this came from a SendEvent request */
539 	Display *display;	/* Display the event was read from */
540 	Window window;	        /* "event" window it is reported relative to */
541 	Window root;	        /* root window that the event occured on */
542 	Window subwindow;	/* child window */
543 	Time time;		/* milliseconds */
544 	int x, y;		/* pointer x, y coordinates in event window */
545 	int x_root, y_root;	/* coordinates relative to root */
546 	unsigned int state;	/* key or button mask */
547 	unsigned int keycode;	/* detail */
548 	Bool same_screen;	/* same screen flag */
549         char trans_chars[XMaxTransChars];
550 				/* translated characters */
551 	int nbytes;
552 } XKeyEvent;
553 typedef XKeyEvent XKeyPressedEvent;
554 typedef XKeyEvent XKeyReleasedEvent;
555 
556 typedef struct {
557 	int type;		/* of event */
558 	unsigned long serial;	/* # of last request processed by server */
559 	Bool send_event;	/* true if this came from a SendEvent request */
560 	Display *display;	/* Display the event was read from */
561 	Window window;	        /* "event" window it is reported relative to */
562 	Window root;	        /* root window that the event occured on */
563 	Window subwindow;	/* child window */
564 	Time time;		/* milliseconds */
565 	int x, y;		/* pointer x, y coordinates in event window */
566 	int x_root, y_root;	/* coordinates relative to root */
567 	unsigned int state;	/* key or button mask */
568 	unsigned int button;	/* detail */
569 	Bool same_screen;	/* same screen flag */
570 } XButtonEvent;
571 typedef XButtonEvent XButtonPressedEvent;
572 typedef XButtonEvent XButtonReleasedEvent;
573 
574 typedef struct {
575 	int type;		/* of event */
576 	unsigned long serial;	/* # of last request processed by server */
577 	Bool send_event;	/* true if this came from a SendEvent request */
578 	Display *display;	/* Display the event was read from */
579 	Window window;	        /* "event" window reported relative to */
580 	Window root;	        /* root window that the event occured on */
581 	Window subwindow;	/* child window */
582 	Time time;		/* milliseconds */
583 	int x, y;		/* pointer x, y coordinates in event window */
584 	int x_root, y_root;	/* coordinates relative to root */
585 	unsigned int state;	/* key or button mask */
586 	char is_hint;		/* detail */
587 	Bool same_screen;	/* same screen flag */
588 } XMotionEvent;
589 typedef XMotionEvent XPointerMovedEvent;
590 
591 typedef struct {
592 	int type;		/* of event */
593 	unsigned long serial;	/* # of last request processed by server */
594 	Bool send_event;	/* true if this came from a SendEvent request */
595 	Display *display;	/* Display the event was read from */
596 	Window window;	        /* "event" window reported relative to */
597 	Window root;	        /* root window that the event occured on */
598 	Window subwindow;	/* child window */
599 	Time time;		/* milliseconds */
600 	int x, y;		/* pointer x, y coordinates in event window */
601 	int x_root, y_root;	/* coordinates relative to root */
602 	int mode;		/* NotifyNormal, NotifyGrab, NotifyUngrab */
603 	int detail;
604 	/*
605 	 * NotifyAncestor, NotifyVirtual, NotifyInferior,
606 	 * NotifyNonlinear,NotifyNonlinearVirtual
607 	 */
608 	Bool same_screen;	/* same screen flag */
609 	Bool focus;		/* boolean focus */
610 	unsigned int state;	/* key or button mask */
611 } XCrossingEvent;
612 typedef XCrossingEvent XEnterWindowEvent;
613 typedef XCrossingEvent XLeaveWindowEvent;
614 
615 typedef struct {
616 	int type;		/* FocusIn or FocusOut */
617 	unsigned long serial;	/* # of last request processed by server */
618 	Bool send_event;	/* true if this came from a SendEvent request */
619 	Display *display;	/* Display the event was read from */
620 	Window window;		/* window of event */
621 	int mode;		/* NotifyNormal, NotifyGrab, NotifyUngrab */
622 	int detail;
623 	/*
624 	 * NotifyAncestor, NotifyVirtual, NotifyInferior,
625 	 * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer,
626 	 * NotifyPointerRoot, NotifyDetailNone
627 	 */
628 } XFocusChangeEvent;
629 typedef XFocusChangeEvent XFocusInEvent;
630 typedef XFocusChangeEvent XFocusOutEvent;
631 
632 /* generated on EnterWindow and FocusIn  when KeyMapState selected */
633 typedef struct {
634 	int type;
635 	unsigned long serial;	/* # of last request processed by server */
636 	Bool send_event;	/* true if this came from a SendEvent request */
637 	Display *display;	/* Display the event was read from */
638 	Window window;
639 	char key_vector[32];
640 } XKeymapEvent;
641 
642 typedef struct {
643 	int type;
644 	unsigned long serial;	/* # of last request processed by server */
645 	Bool send_event;	/* true if this came from a SendEvent request */
646 	Display *display;	/* Display the event was read from */
647 	Window window;
648 	int x, y;
649 	int width, height;
650 	int count;		/* if non-zero, at least this many more */
651 } XExposeEvent;
652 
653 typedef struct {
654 	int type;
655 	unsigned long serial;	/* # of last request processed by server */
656 	Bool send_event;	/* true if this came from a SendEvent request */
657 	Display *display;	/* Display the event was read from */
658 	Drawable drawable;
659 	int x, y;
660 	int width, height;
661 	int count;		/* if non-zero, at least this many more */
662 	int major_code;		/* core is CopyArea or CopyPlane */
663 	int minor_code;		/* not defined in the core */
664 } XGraphicsExposeEvent;
665 
666 typedef struct {
667 	int type;
668 	unsigned long serial;	/* # of last request processed by server */
669 	Bool send_event;	/* true if this came from a SendEvent request */
670 	Display *display;	/* Display the event was read from */
671 	Drawable drawable;
672 	int major_code;		/* core is CopyArea or CopyPlane */
673 	int minor_code;		/* not defined in the core */
674 } XNoExposeEvent;
675 
676 typedef struct {
677 	int type;
678 	unsigned long serial;	/* # of last request processed by server */
679 	Bool send_event;	/* true if this came from a SendEvent request */
680 	Display *display;	/* Display the event was read from */
681 	Window window;
682 	int state;		/* Visibility state */
683 } XVisibilityEvent;
684 
685 typedef struct {
686 	int type;
687 	unsigned long serial;	/* # of last request processed by server */
688 	Bool send_event;	/* true if this came from a SendEvent request */
689 	Display *display;	/* Display the event was read from */
690 	Window parent;		/* parent of the window */
691 	Window window;		/* window id of window created */
692 	int x, y;		/* window location */
693 	int width, height;	/* size of window */
694 	int border_width;	/* border width */
695 	Bool override_redirect;	/* creation should be overridden */
696 } XCreateWindowEvent;
697 
698 typedef struct {
699 	int type;
700 	unsigned long serial;	/* # of last request processed by server */
701 	Bool send_event;	/* true if this came from a SendEvent request */
702 	Display *display;	/* Display the event was read from */
703 	Window event;
704 	Window window;
705 } XDestroyWindowEvent;
706 
707 typedef struct {
708 	int type;
709 	unsigned long serial;	/* # of last request processed by server */
710 	Bool send_event;	/* true if this came from a SendEvent request */
711 	Display *display;	/* Display the event was read from */
712 	Window event;
713 	Window window;
714 	Bool from_configure;
715 } XUnmapEvent;
716 
717 typedef struct {
718 	int type;
719 	unsigned long serial;	/* # of last request processed by server */
720 	Bool send_event;	/* true if this came from a SendEvent request */
721 	Display *display;	/* Display the event was read from */
722 	Window event;
723 	Window window;
724 	Bool override_redirect;	/* boolean, is override set... */
725 } XMapEvent;
726 
727 typedef struct {
728 	int type;
729 	unsigned long serial;	/* # of last request processed by server */
730 	Bool send_event;	/* true if this came from a SendEvent request */
731 	Display *display;	/* Display the event was read from */
732 	Window parent;
733 	Window window;
734 } XMapRequestEvent;
735 
736 typedef struct {
737 	int type;
738 	unsigned long serial;	/* # of last request processed by server */
739 	Bool send_event;	/* true if this came from a SendEvent request */
740 	Display *display;	/* Display the event was read from */
741 	Window event;
742 	Window window;
743 	Window parent;
744 	int x, y;
745 	Bool override_redirect;
746 } XReparentEvent;
747 
748 typedef struct {
749 	int type;
750 	unsigned long serial;	/* # of last request processed by server */
751 	Bool send_event;	/* true if this came from a SendEvent request */
752 	Display *display;	/* Display the event was read from */
753 	Window event;
754 	Window window;
755 	int x, y;
756 	int width, height;
757 	int border_width;
758 	Window above;
759 	Bool override_redirect;
760 } XConfigureEvent;
761 
762 typedef struct {
763 	int type;
764 	unsigned long serial;	/* # of last request processed by server */
765 	Bool send_event;	/* true if this came from a SendEvent request */
766 	Display *display;	/* Display the event was read from */
767 	Window event;
768 	Window window;
769 	int x, y;
770 } XGravityEvent;
771 
772 typedef struct {
773 	int type;
774 	unsigned long serial;	/* # of last request processed by server */
775 	Bool send_event;	/* true if this came from a SendEvent request */
776 	Display *display;	/* Display the event was read from */
777 	Window window;
778 	int width, height;
779 } XResizeRequestEvent;
780 
781 typedef struct {
782 	int type;
783 	unsigned long serial;	/* # of last request processed by server */
784 	Bool send_event;	/* true if this came from a SendEvent request */
785 	Display *display;	/* Display the event was read from */
786 	Window parent;
787 	Window window;
788 	int x, y;
789 	int width, height;
790 	int border_width;
791 	Window above;
792 	int detail;		/* Above, Below, TopIf, BottomIf, Opposite */
793 	unsigned long value_mask;
794 } XConfigureRequestEvent;
795 
796 typedef struct {
797 	int type;
798 	unsigned long serial;	/* # of last request processed by server */
799 	Bool send_event;	/* true if this came from a SendEvent request */
800 	Display *display;	/* Display the event was read from */
801 	Window event;
802 	Window window;
803 	int place;		/* PlaceOnTop, PlaceOnBottom */
804 } XCirculateEvent;
805 
806 typedef struct {
807 	int type;
808 	unsigned long serial;	/* # of last request processed by server */
809 	Bool send_event;	/* true if this came from a SendEvent request */
810 	Display *display;	/* Display the event was read from */
811 	Window parent;
812 	Window window;
813 	int place;		/* PlaceOnTop, PlaceOnBottom */
814 } XCirculateRequestEvent;
815 
816 typedef struct {
817 	int type;
818 	unsigned long serial;	/* # of last request processed by server */
819 	Bool send_event;	/* true if this came from a SendEvent request */
820 	Display *display;	/* Display the event was read from */
821 	Window window;
822 	Atom atom;
823 	Time time;
824 	int state;		/* NewValue, Deleted */
825 } XPropertyEvent;
826 
827 typedef struct {
828 	int type;
829 	unsigned long serial;	/* # of last request processed by server */
830 	Bool send_event;	/* true if this came from a SendEvent request */
831 	Display *display;	/* Display the event was read from */
832 	Window window;
833 	Atom selection;
834 	Time time;
835 } XSelectionClearEvent;
836 
837 typedef struct {
838 	int type;
839 	unsigned long serial;	/* # of last request processed by server */
840 	Bool send_event;	/* true if this came from a SendEvent request */
841 	Display *display;	/* Display the event was read from */
842 	Window owner;
843 	Window requestor;
844 	Atom selection;
845 	Atom target;
846 	Atom property;
847 	Time time;
848 } XSelectionRequestEvent;
849 
850 typedef struct {
851 	int type;
852 	unsigned long serial;	/* # of last request processed by server */
853 	Bool send_event;	/* true if this came from a SendEvent request */
854 	Display *display;	/* Display the event was read from */
855 	Window requestor;
856 	Atom selection;
857 	Atom target;
858 	Atom property;		/* ATOM or None */
859 	Time time;
860 } XSelectionEvent;
861 
862 typedef struct {
863 	int type;
864 	unsigned long serial;	/* # of last request processed by server */
865 	Bool send_event;	/* true if this came from a SendEvent request */
866 	Display *display;	/* Display the event was read from */
867 	Window window;
868 	Colormap colormap;	/* COLORMAP or None */
869 #if defined(__cplusplus) || defined(c_plusplus)
870 	Bool c_new;		/* C++ */
871 #else
872 	Bool new;
873 #endif
874 	int state;		/* ColormapInstalled, ColormapUninstalled */
875 } XColormapEvent;
876 
877 typedef struct {
878 	int type;
879 	unsigned long serial;	/* # of last request processed by server */
880 	Bool send_event;	/* true if this came from a SendEvent request */
881 	Display *display;	/* Display the event was read from */
882 	Window window;
883 	Atom message_type;
884 	int format;
885 	union {
886 		char b[20];
887 		short s[10];
888 		long l[5];
889 		} data;
890 } XClientMessageEvent;
891 
892 typedef struct {
893 	int type;
894 	unsigned long serial;	/* # of last request processed by server */
895 	Bool send_event;	/* true if this came from a SendEvent request */
896 	Display *display;	/* Display the event was read from */
897 	Window window;		/* unused */
898 	int request;		/* one of MappingModifier, MappingKeyboard,
899 				   MappingPointer */
900 	int first_keycode;	/* first keycode */
901 	int count;		/* defines range of change w. first_keycode*/
902 } XMappingEvent;
903 
904 typedef struct {
905 	int type;
906 	Display *display;	/* Display the event was read from */
907 	XID resourceid;		/* resource id */
908 	unsigned long serial;	/* serial number of failed request */
909 	unsigned char error_code;	/* error code of failed request */
910 	unsigned char request_code;	/* Major op-code of failed request */
911 	unsigned char minor_code;	/* Minor op-code of failed request */
912 } XErrorEvent;
913 
914 typedef struct {
915 	int type;
916 	unsigned long serial;	/* # of last request processed by server */
917 	Bool send_event;	/* true if this came from a SendEvent request */
918 	Display *display;/* Display the event was read from */
919 	Window window;	/* window on which event was requested in event mask */
920 } XAnyEvent;
921 
922 /*
923  * this union is defined so Xlib can always use the same sized
924  * event structure internally, to avoid memory fragmentation.
925  */
926 typedef union _XEvent {
927         int type;		/* must not be changed; first element */
928 	XAnyEvent xany;
929 	XKeyEvent xkey;
930 	XButtonEvent xbutton;
931 	XMotionEvent xmotion;
932 	XCrossingEvent xcrossing;
933 	XFocusChangeEvent xfocus;
934 	XExposeEvent xexpose;
935 	XGraphicsExposeEvent xgraphicsexpose;
936 	XNoExposeEvent xnoexpose;
937 	XVisibilityEvent xvisibility;
938 	XCreateWindowEvent xcreatewindow;
939 	XDestroyWindowEvent xdestroywindow;
940 	XUnmapEvent xunmap;
941 	XMapEvent xmap;
942 	XMapRequestEvent xmaprequest;
943 	XReparentEvent xreparent;
944 	XConfigureEvent xconfigure;
945 	XGravityEvent xgravity;
946 	XResizeRequestEvent xresizerequest;
947 	XConfigureRequestEvent xconfigurerequest;
948 	XCirculateEvent xcirculate;
949 	XCirculateRequestEvent xcirculaterequest;
950 	XPropertyEvent xproperty;
951 	XSelectionClearEvent xselectionclear;
952 	XSelectionRequestEvent xselectionrequest;
953 	XSelectionEvent xselection;
954 	XColormapEvent xcolormap;
955 	XClientMessageEvent xclient;
956 	XMappingEvent xmapping;
957 	XErrorEvent xerror;
958 	XKeymapEvent xkeymap;
959 	long pad[24];
960 } XEvent;
961 #endif
962 
963 #define XAllocID(dpy) ((*(dpy)->resource_alloc)((dpy)))
964 
965 /*
966  * per character font metric information.
967  */
968 typedef struct {
969     short	lbearing;	/* origin to left edge of raster */
970     short	rbearing;	/* origin to right edge of raster */
971     short	width;		/* advance to next char's origin */
972     short	ascent;		/* baseline to top edge of raster */
973     short	descent;	/* baseline to bottom edge of raster */
974     unsigned short attributes;	/* per char flags (not predefined) */
975 } XCharStruct;
976 
977 /*
978  * To allow arbitrary information with fonts, there are additional properties
979  * returned.
980  */
981 typedef struct {
982     Atom name;
983     unsigned long card32;
984 } XFontProp;
985 
986 typedef struct {
987     XExtData	*ext_data;	/* hook for extension to hang data */
988     Font        fid;            /* Font id for this font */
989     unsigned	direction;	/* hint about direction the font is painted */
990     unsigned	min_char_or_byte2;/* first character */
991     unsigned	max_char_or_byte2;/* last character */
992     unsigned	min_byte1;	/* first row that exists */
993     unsigned	max_byte1;	/* last row that exists */
994     Bool	all_chars_exist;/* flag if all characters have non-zero size*/
995     unsigned	default_char;	/* char to print for undefined character */
996     int         n_properties;   /* how many properties there are */
997     XFontProp	*properties;	/* pointer to array of additional properties*/
998     XCharStruct	min_bounds;	/* minimum bounds over all existing char*/
999     XCharStruct	max_bounds;	/* maximum bounds over all existing char*/
1000     XCharStruct	*per_char;	/* first_char to last_char information */
1001     int		ascent;		/* log. extent above baseline for spacing */
1002     int		descent;	/* log. descent below baseline for spacing */
1003 } XFontStruct;
1004 
1005 /*
1006  * PolyText routines take these as arguments.
1007  */
1008 typedef struct {
1009     char *chars;		/* pointer to string */
1010     int nchars;			/* number of characters */
1011     int delta;			/* delta between strings */
1012     Font font;			/* font to print it in, None don't change */
1013 } XTextItem;
1014 
1015 typedef struct {		/* normal 16 bit characters are two bytes */
1016     unsigned char byte1;
1017     unsigned char byte2;
1018 } XChar2b;
1019 
1020 typedef struct {
1021     XChar2b *chars;		/* two byte characters */
1022     int nchars;			/* number of characters */
1023     int delta;			/* delta between strings */
1024     Font font;			/* font to print it in, None don't change */
1025 } XTextItem16;
1026 
1027 
1028 typedef union { Display *display;
1029 		GC gc;
1030 		Visual *visual;
1031 		Screen *screen;
1032 		ScreenFormat *pixmap_format;
1033 		XFontStruct *font; } XEDataObject;
1034 
1035 typedef struct {
1036     XRectangle      max_ink_extent;
1037     XRectangle      max_logical_extent;
1038 } XFontSetExtents;
1039 
1040 typedef struct _XFontSet *XFontSet;
1041 
1042 typedef struct {
1043     char           *chars;
1044     int             nchars;
1045     int             delta;
1046     XFontSet        font_set;
1047 } XmbTextItem;
1048 
1049 typedef struct {
1050     wchar_t        *chars;
1051     int             nchars;
1052     int             delta;
1053     XFontSet        font_set;
1054 } XwcTextItem;
1055 
1056 typedef void (*XIMProc)();
1057 
1058 typedef struct _XIM *XIM;
1059 typedef struct _XIC *XIC;
1060 
1061 typedef unsigned long XIMStyle;
1062 
1063 typedef struct {
1064     unsigned short count_styles;
1065     XIMStyle *supported_styles;
1066 } XIMStyles;
1067 
1068 #define XIMPreeditArea		0x0001L
1069 #define XIMPreeditCallbacks	0x0002L
1070 #define XIMPreeditPosition	0x0004L
1071 #define XIMPreeditNothing	0x0008L
1072 #define XIMPreeditNone		0x0010L
1073 #define XIMStatusArea		0x0100L
1074 #define XIMStatusCallbacks	0x0200L
1075 #define XIMStatusNothing	0x0400L
1076 #define XIMStatusNone		0x0800L
1077 
1078 #define XNVaNestedList "XNVaNestedList"
1079 #define XNClientWindow "clientWindow"
1080 #define XNInputStyle "inputStyle"
1081 #define XNFocusWindow "focusWindow"
1082 #define XNResourceName "resourceName"
1083 #define XNResourceClass "resourceClass"
1084 #define XNGeometryCallback "geometryCallback"
1085 #define XNFilterEvents "filterEvents"
1086 #define XNPreeditStartCallback "preeditStartCallback"
1087 #define XNPreeditDoneCallback "preeditDoneCallback"
1088 #define XNPreeditDrawCallback "preeditDrawCallback"
1089 #define XNPreeditCaretCallback "preeditCaretCallback"
1090 #define XNPreeditAttributes "preeditAttributes"
1091 #define XNStatusStartCallback "statusStartCallback"
1092 #define XNStatusDoneCallback "statusDoneCallback"
1093 #define XNStatusDrawCallback "statusDrawCallback"
1094 #define XNStatusAttributes "statusAttributes"
1095 #define XNArea "area"
1096 #define XNAreaNeeded "areaNeeded"
1097 #define XNSpotLocation "spotLocation"
1098 #define XNColormap "colorMap"
1099 #define XNStdColormap "stdColorMap"
1100 #define XNForeground "foreground"
1101 #define XNBackground "background"
1102 #define XNBackgroundPixmap "backgroundPixmap"
1103 #define XNFontSet "fontSet"
1104 #define XNLineSpace "lineSpace"
1105 #define XNCursor "cursor"
1106 
1107 #define XBufferOverflow		-1
1108 #define XLookupNone		1
1109 #define XLookupChars		2
1110 #define XLookupKeySym		3
1111 #define XLookupBoth		4
1112 
1113 #if NeedFunctionPrototypes
1114 typedef void *XVaNestedList;
1115 #else
1116 typedef XPointer XVaNestedList;
1117 #endif
1118 
1119 typedef struct {
1120     XPointer client_data;
1121     XIMProc callback;
1122 } XIMCallback;
1123 
1124 typedef unsigned long XIMFeedback;
1125 
1126 #define XIMReverse	1
1127 #define XIMUnderline	(1<<1)
1128 #define XIMHighlight	(1<<2)
1129 #define XIMPrimary 	(1<<5)
1130 #define XIMSecondary	(1<<6)
1131 #define XIMTertiary 	(1<<7)
1132 
1133 typedef struct _XIMText {
1134     unsigned short length;
1135     XIMFeedback *feedback;
1136     Bool encoding_is_wchar;
1137     union {
1138 	char *multi_byte;
1139 	wchar_t *wide_char;
1140     } string;
1141 } XIMText;
1142 
1143 typedef struct _XIMPreeditDrawCallbackStruct {
1144     int caret;		/* Cursor offset within pre-edit string */
1145     int chg_first;	/* Starting change position */
1146     int chg_length;	/* Length of the change in character count */
1147     XIMText *text;
1148 } XIMPreeditDrawCallbackStruct;
1149 
1150 typedef enum {
1151     XIMForwardChar, XIMBackwardChar,
1152     XIMForwardWord, XIMBackwardWord,
1153     XIMCaretUp, XIMCaretDown,
1154     XIMNextLine, XIMPreviousLine,
1155     XIMLineStart, XIMLineEnd,
1156     XIMAbsolutePosition,
1157     XIMDontChange
1158 } XIMCaretDirection;
1159 
1160 typedef enum {
1161     XIMIsInvisible,	/* Disable caret feedback */
1162     XIMIsPrimary,	/* UI defined caret feedback */
1163     XIMIsSecondary	/* UI defined caret feedback */
1164 } XIMCaretStyle;
1165 
1166 typedef struct _XIMPreeditCaretCallbackStruct {
1167     int position;		 /* Caret offset within pre-edit string */
1168     XIMCaretDirection direction; /* Caret moves direction */
1169     XIMCaretStyle style;	 /* Feedback of the caret */
1170 } XIMPreeditCaretCallbackStruct;
1171 
1172 typedef enum {
1173     XIMTextType,
1174     XIMBitmapType
1175 } XIMStatusDataType;
1176 
1177 typedef struct _XIMStatusDrawCallbackStruct {
1178     XIMStatusDataType type;
1179     union {
1180 	XIMText *text;
1181 	Pixmap  bitmap;
1182     } data;
1183 } XIMStatusDrawCallbackStruct;
1184 
1185 typedef int (*XErrorHandler) (	    /* WARNING, this type not in Xlib spec */
1186 #if NeedFunctionPrototypes
1187     Display*		/* display */,
1188     XErrorEvent*	/* error_event */
1189 #endif
1190 );
1191 
1192 _XFUNCPROTOBEGIN
1193 
1194 
1195 
1196 #include "tkIntXlibDecls.h"
1197 
1198 _XFUNCPROTOEND
1199 
1200 #if defined(MAC_OSX_TK)
1201 #   undef Cursor
1202 #   undef Region
1203 #endif
1204 
1205 #endif /* _XLIB_H_ */
1206