2007-03-29 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / X11Structs.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software",, to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 // 
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 // 
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2004 Novell, Inc.
21 //
22 // Authors:
23 //      Peter Bartok    pbartok@novell.com
24 //
25
26
27 // NOT COMPLETE
28
29 using System;
30 using System.ComponentModel;
31 using System.Collections;
32 using System.Drawing;
33 using System.Diagnostics;
34 using System.Runtime.InteropServices;
35
36 /// X11 Version
37 namespace System.Windows.Forms {
38         //
39         // In the structures below, fields of type long are mapped to IntPtr.
40         // This will work on all platforms where sizeof(long)==sizeof(void*), which
41         // is almost all platforms except WIN64.
42         //
43
44         [StructLayout(LayoutKind.Sequential)]
45         internal struct XAnyEvent {
46                 internal XEventName     type;
47                 internal IntPtr         serial;
48                 internal bool           send_event;
49                 internal IntPtr         display;
50                 internal IntPtr         window;
51         }
52
53         [StructLayout(LayoutKind.Sequential)]
54         internal struct XKeyEvent {
55                 internal XEventName     type;
56                 internal IntPtr         serial;
57                 internal bool           send_event;
58                 internal IntPtr         display;
59                 internal IntPtr         window;
60                 internal IntPtr         root;
61                 internal IntPtr         subwindow;
62                 internal IntPtr         time;
63                 internal int            x;
64                 internal int            y;
65                 internal int            x_root;
66                 internal int            y_root;
67                 internal int            state;
68                 internal int            keycode;
69                 internal bool           same_screen;
70         }
71
72         [StructLayout(LayoutKind.Sequential)]
73         internal struct XButtonEvent {
74                 internal XEventName     type;
75                 internal IntPtr         serial;
76                 internal bool           send_event;
77                 internal IntPtr         display;
78                 internal IntPtr         window;
79                 internal IntPtr         root;
80                 internal IntPtr         subwindow;
81                 internal IntPtr         time;
82                 internal int            x;
83                 internal int            y;
84                 internal int            x_root;
85                 internal int            y_root;
86                 internal int            state;
87                 internal int            button;
88                 internal bool           same_screen;
89         }
90
91         [StructLayout(LayoutKind.Sequential)]
92         internal struct XMotionEvent {
93                 internal XEventName     type;
94                 internal IntPtr         serial;
95                 internal bool           send_event;
96                 internal IntPtr         display;
97                 internal IntPtr         window;
98                 internal IntPtr         root;
99                 internal IntPtr         subwindow;
100                 internal IntPtr         time;
101                 internal int            x;
102                 internal int            y;
103                 internal int            x_root;
104                 internal int            y_root;
105                 internal int            state;
106                 internal byte           is_hint;
107                 internal bool           same_screen;
108         }
109
110         [StructLayout(LayoutKind.Sequential)]
111         internal struct XCrossingEvent {
112                 internal XEventName     type;
113                 internal IntPtr         serial;
114                 internal bool           send_event;
115                 internal IntPtr         display;
116                 internal IntPtr         window;
117                 internal IntPtr         root;
118                 internal IntPtr         subwindow;
119                 internal IntPtr         time;
120                 internal int            x;
121                 internal int            y;
122                 internal int            x_root;
123                 internal int            y_root;
124                 internal NotifyMode     mode;
125                 internal NotifyDetail   detail;
126                 internal bool           same_screen;
127                 internal bool           focus;
128                 internal int            state;
129         }
130
131         [StructLayout(LayoutKind.Sequential)]
132         internal struct XFocusChangeEvent {
133                 internal XEventName     type;
134                 internal IntPtr         serial;
135                 internal bool           send_event;
136                 internal IntPtr         display;
137                 internal IntPtr         window;
138                 internal int            mode;
139                 internal NotifyDetail   detail;
140         }
141
142         [StructLayout(LayoutKind.Sequential)]
143         internal struct XKeymapEvent {
144                 internal XEventName     type;
145                 internal IntPtr         serial;
146                 internal bool           send_event;
147                 internal IntPtr         display;
148                 internal IntPtr         window;
149                 internal byte           key_vector0;
150                 internal byte           key_vector1;
151                 internal byte           key_vector2;
152                 internal byte           key_vector3;
153                 internal byte           key_vector4;
154                 internal byte           key_vector5;
155                 internal byte           key_vector6;
156                 internal byte           key_vector7;
157                 internal byte           key_vector8;
158                 internal byte           key_vector9;
159                 internal byte           key_vector10;
160                 internal byte           key_vector11;
161                 internal byte           key_vector12;
162                 internal byte           key_vector13;
163                 internal byte           key_vector14;
164                 internal byte           key_vector15;
165                 internal byte           key_vector16;
166                 internal byte           key_vector17;
167                 internal byte           key_vector18;
168                 internal byte           key_vector19;
169                 internal byte           key_vector20;
170                 internal byte           key_vector21;
171                 internal byte           key_vector22;
172                 internal byte           key_vector23;
173                 internal byte           key_vector24;
174                 internal byte           key_vector25;
175                 internal byte           key_vector26;
176                 internal byte           key_vector27;
177                 internal byte           key_vector28;
178                 internal byte           key_vector29;
179                 internal byte           key_vector30;
180                 internal byte           key_vector31;
181         }
182
183         [StructLayout(LayoutKind.Sequential)]
184         internal struct XExposeEvent {
185                 internal XEventName     type;
186                 internal IntPtr         serial;
187                 internal bool           send_event;
188                 internal IntPtr         display;
189                 internal IntPtr         window;
190                 internal int            x;
191                 internal int            y;
192                 internal int            width;
193                 internal int            height;
194                 internal int            count;
195         }
196
197         [StructLayout(LayoutKind.Sequential)]
198         internal struct XGraphicsExposeEvent {
199                 internal XEventName     type;
200                 internal IntPtr         serial;
201                 internal bool           send_event;
202                 internal IntPtr         display;
203                 internal IntPtr         drawable;
204                 internal int            x;
205                 internal int            y;
206                 internal int            width;
207                 internal int            height;
208                 internal int            count;
209                 internal int            major_code;
210                 internal int            minor_code;
211         }
212
213         [StructLayout(LayoutKind.Sequential)]
214         internal struct XNoExposeEvent {
215                 internal XEventName     type;
216                 internal IntPtr         serial;
217                 internal bool           send_event;
218                 internal IntPtr         display;
219                 internal IntPtr         drawable;
220                 internal int            major_code;
221                 internal int            minor_code;
222         }
223
224         [StructLayout(LayoutKind.Sequential)]
225         internal struct XVisibilityEvent {
226                 internal XEventName     type;
227                 internal IntPtr         serial;
228                 internal bool           send_event;
229                 internal IntPtr         display;
230                 internal IntPtr         window;
231                 internal int            state;
232         }
233
234         [StructLayout(LayoutKind.Sequential)]
235         internal struct XCreateWindowEvent {
236                 internal XEventName     type;
237                 internal IntPtr         serial;
238                 internal bool           send_event;
239                 internal IntPtr         display;
240                 internal IntPtr         parent;
241                 internal IntPtr         window;
242                 internal int            x;
243                 internal int            y;
244                 internal int            width;
245                 internal int            height;
246                 internal int            border_width;
247                 internal bool           override_redirect;
248         }
249
250         [StructLayout(LayoutKind.Sequential)]
251         internal struct XDestroyWindowEvent {
252                 internal XEventName     type;
253                 internal IntPtr         serial;
254                 internal bool           send_event;
255                 internal IntPtr         display;
256                 internal IntPtr         xevent;
257                 internal IntPtr         window;
258         }
259
260         [StructLayout(LayoutKind.Sequential)]
261         internal struct XUnmapEvent {
262                 internal XEventName     type;
263                 internal IntPtr         serial;
264                 internal bool           send_event;
265                 internal IntPtr         display;
266                 internal IntPtr         xevent;
267                 internal IntPtr         window;
268                 internal bool           from_configure;
269         }
270
271         [StructLayout(LayoutKind.Sequential)]
272         internal struct XMapEvent {
273                 internal XEventName     type;
274                 internal IntPtr         serial;
275                 internal bool           send_event;
276                 internal IntPtr         display;
277                 internal IntPtr         xevent;
278                 internal IntPtr         window;
279                 internal bool           override_redirect;
280         }
281
282         [StructLayout(LayoutKind.Sequential)]
283         internal struct XMapRequestEvent {
284                 internal XEventName     type;
285                 internal IntPtr         serial;
286                 internal bool           send_event;
287                 internal IntPtr         display;
288                 internal IntPtr         parent;
289                 internal IntPtr         window;
290         }
291
292         [StructLayout(LayoutKind.Sequential)]
293         internal struct XReparentEvent {
294                 internal XEventName     type;
295                 internal IntPtr         serial;
296                 internal bool           send_event;
297                 internal IntPtr         display;
298                 internal IntPtr         xevent;
299                 internal IntPtr         window;
300                 internal IntPtr         parent;
301                 internal int            x;
302                 internal int            y;
303                 internal bool           override_redirect;
304         }
305
306         [StructLayout(LayoutKind.Sequential)]
307         internal struct XConfigureEvent {
308                 internal XEventName     type;
309                 internal IntPtr         serial;
310                 internal bool           send_event;
311                 internal IntPtr         display;
312                 internal IntPtr         xevent;
313                 internal IntPtr         window;
314                 internal int            x;
315                 internal int            y;
316                 internal int            width;
317                 internal int            height;
318                 internal int            border_width;
319                 internal IntPtr         above;
320                 internal bool           override_redirect;
321         }
322
323         [StructLayout(LayoutKind.Sequential)]
324         internal struct XGravityEvent {
325                 internal XEventName     type;
326                 internal IntPtr         serial;
327                 internal bool           send_event;
328                 internal IntPtr         display;
329                 internal IntPtr         xevent;
330                 internal IntPtr         window;
331                 internal int            x;
332                 internal int            y;
333         }
334
335         [StructLayout(LayoutKind.Sequential)]
336         internal struct XResizeRequestEvent {
337                 internal XEventName     type;
338                 internal IntPtr         serial;
339                 internal bool           send_event;
340                 internal IntPtr         display;
341                 internal IntPtr         window;
342                 internal int            width;
343                 internal int            height;
344         }
345
346         [StructLayout(LayoutKind.Sequential)]
347         internal struct XConfigureRequestEvent {
348                 internal XEventName     type;
349                 internal IntPtr         serial;
350                 internal bool           send_event;
351                 internal IntPtr         display;
352                 internal IntPtr         parent;
353                 internal IntPtr         window;
354                 internal int            x;
355                 internal int            y;
356                 internal int            width;
357                 internal int            height;
358                 internal int            border_width;
359                 internal IntPtr         above;
360                 internal int            detail;
361                 internal IntPtr         value_mask;
362         }
363
364         [StructLayout(LayoutKind.Sequential)]
365         internal struct XCirculateEvent {
366                 internal XEventName     type;
367                 internal IntPtr         serial;
368                 internal bool           send_event;
369                 internal IntPtr         display;
370                 internal IntPtr         xevent;
371                 internal IntPtr         window;
372                 internal int            place;
373         }
374
375         [StructLayout(LayoutKind.Sequential)]
376         internal struct XCirculateRequestEvent {
377                 internal XEventName     type;
378                 internal IntPtr         serial;
379                 internal bool           send_event;
380                 internal IntPtr         display;
381                 internal IntPtr         parent;
382                 internal IntPtr         window;
383                 internal int            place;
384         }
385
386         [StructLayout(LayoutKind.Sequential)]
387         internal struct XPropertyEvent {
388                 internal XEventName     type;
389                 internal IntPtr         serial;
390                 internal bool           send_event;
391                 internal IntPtr         display;
392                 internal IntPtr         window;
393                 internal IntPtr         atom;
394                 internal IntPtr         time;
395                 internal int            state;
396         }
397
398         [StructLayout(LayoutKind.Sequential)]
399         internal struct XSelectionClearEvent {
400                 internal XEventName     type;
401                 internal IntPtr         serial;
402                 internal bool           send_event;
403                 internal IntPtr         display;
404                 internal IntPtr         window;
405                 internal IntPtr         selection;
406                 internal IntPtr         time;
407         }
408
409         [StructLayout(LayoutKind.Sequential)]
410         internal struct XSelectionRequestEvent {
411                 internal XEventName     type;
412                 internal IntPtr         serial;
413                 internal bool           send_event;
414                 internal IntPtr         display;
415                 internal IntPtr         owner;
416                 internal IntPtr         requestor;
417                 internal IntPtr         selection;
418                 internal IntPtr         target;
419                 internal IntPtr         property;
420                 internal IntPtr         time;
421         }
422
423         [StructLayout(LayoutKind.Sequential)]
424         internal struct XSelectionEvent {
425                 internal XEventName     type;
426                 internal IntPtr         serial;
427                 internal bool           send_event;
428                 internal IntPtr         display;
429                 internal IntPtr         requestor;
430                 internal IntPtr         selection;
431                 internal IntPtr         target;
432                 internal IntPtr         property;
433                 internal IntPtr         time;
434         }
435
436         [StructLayout(LayoutKind.Sequential)]
437         internal struct XColormapEvent {
438                 internal XEventName     type;
439                 internal IntPtr         serial;
440                 internal bool           send_event;
441                 internal IntPtr         display;
442                 internal IntPtr         window;
443                 internal IntPtr         colormap;
444                 internal bool           c_new;
445                 internal int            state;
446         }
447
448         [StructLayout(LayoutKind.Sequential)]
449         internal struct XClientMessageEvent {
450                 internal XEventName     type;
451                 internal IntPtr         serial;
452                 internal bool           send_event;
453                 internal IntPtr         display;
454                 internal IntPtr         window;
455                 internal IntPtr         message_type;
456                 internal int            format;
457                 internal IntPtr         ptr1;
458                 internal IntPtr         ptr2;
459                 internal IntPtr         ptr3;
460                 internal IntPtr         ptr4;
461                 internal IntPtr         ptr5;
462         }
463
464         [StructLayout(LayoutKind.Sequential)]
465         internal struct XMappingEvent {
466                 internal XEventName     type;
467                 internal IntPtr         serial;
468                 internal bool           send_event;
469                 internal IntPtr         display;
470                 internal IntPtr         window;
471                 internal int            request;
472                 internal int            first_keycode;
473                 internal int            count;
474         }
475
476         [StructLayout(LayoutKind.Sequential)]
477         internal struct XErrorEvent {
478                 internal XEventName     type;
479                 internal IntPtr         display;
480                 internal IntPtr         resourceid;
481                 internal IntPtr         serial;
482                 internal byte           error_code;
483                 internal XRequest       request_code;
484                 internal byte           minor_code;
485         }
486
487         [StructLayout(LayoutKind.Sequential)]
488         internal struct XEventPad {
489                 internal IntPtr pad0;
490                 internal IntPtr pad1;
491                 internal IntPtr pad2;
492                 internal IntPtr pad3;
493                 internal IntPtr pad4;
494                 internal IntPtr pad5;
495                 internal IntPtr pad6;
496                 internal IntPtr pad7;
497                 internal IntPtr pad8;
498                 internal IntPtr pad9;
499                 internal IntPtr pad10;
500                 internal IntPtr pad11;
501                 internal IntPtr pad12;
502                 internal IntPtr pad13;
503                 internal IntPtr pad14;
504                 internal IntPtr pad15;
505                 internal IntPtr pad16;
506                 internal IntPtr pad17;
507                 internal IntPtr pad18;
508                 internal IntPtr pad19;
509                 internal IntPtr pad20;
510                 internal IntPtr pad21;
511                 internal IntPtr pad22;
512                 internal IntPtr pad23;
513         }
514
515         [StructLayout(LayoutKind.Explicit)]
516         internal struct XEvent {
517                 [ FieldOffset(0) ] internal XEventName type;
518                 [ FieldOffset(0) ] internal XAnyEvent AnyEvent;
519                 [ FieldOffset(0) ] internal XKeyEvent KeyEvent;
520                 [ FieldOffset(0) ] internal XButtonEvent ButtonEvent;
521                 [ FieldOffset(0) ] internal XMotionEvent MotionEvent;
522                 [ FieldOffset(0) ] internal XCrossingEvent CrossingEvent;
523                 [ FieldOffset(0) ] internal XFocusChangeEvent FocusChangeEvent;
524                 [ FieldOffset(0) ] internal XExposeEvent ExposeEvent;
525                 [ FieldOffset(0) ] internal XGraphicsExposeEvent GraphicsExposeEvent;
526                 [ FieldOffset(0) ] internal XNoExposeEvent NoExposeEvent;
527                 [ FieldOffset(0) ] internal XVisibilityEvent VisibilityEvent;
528                 [ FieldOffset(0) ] internal XCreateWindowEvent CreateWindowEvent;
529                 [ FieldOffset(0) ] internal XDestroyWindowEvent DestroyWindowEvent;
530                 [ FieldOffset(0) ] internal XUnmapEvent UnmapEvent;
531                 [ FieldOffset(0) ] internal XMapEvent MapEvent;
532                 [ FieldOffset(0) ] internal XMapRequestEvent MapRequestEvent;
533                 [ FieldOffset(0) ] internal XReparentEvent ReparentEvent;
534                 [ FieldOffset(0) ] internal XConfigureEvent ConfigureEvent;
535                 [ FieldOffset(0) ] internal XGravityEvent GravityEvent;
536                 [ FieldOffset(0) ] internal XResizeRequestEvent ResizeRequestEvent;
537                 [ FieldOffset(0) ] internal XConfigureRequestEvent ConfigureRequestEvent;
538                 [ FieldOffset(0) ] internal XCirculateEvent CirculateEvent;
539                 [ FieldOffset(0) ] internal XCirculateRequestEvent CirculateRequestEvent;
540                 [ FieldOffset(0) ] internal XPropertyEvent PropertyEvent;
541                 [ FieldOffset(0) ] internal XSelectionClearEvent SelectionClearEvent;
542                 [ FieldOffset(0) ] internal XSelectionRequestEvent SelectionRequestEvent;
543                 [ FieldOffset(0) ] internal XSelectionEvent SelectionEvent;
544                 [ FieldOffset(0) ] internal XColormapEvent ColormapEvent;
545                 [ FieldOffset(0) ] internal XClientMessageEvent ClientMessageEvent;
546                 [ FieldOffset(0) ] internal XMappingEvent MappingEvent;
547                 [ FieldOffset(0) ] internal XErrorEvent ErrorEvent;
548                 [ FieldOffset(0) ] internal XKeymapEvent KeymapEvent;
549
550                 //[MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst=24)]
551                 //[ FieldOffset(0) ] internal int[] pad;
552                 [ FieldOffset(0) ] internal XEventPad Pad;
553                 public override string ToString() {
554                         return type.ToString();
555                 }
556         }
557
558         [StructLayout(LayoutKind.Sequential)]
559         internal struct XSetWindowAttributes {
560                 internal IntPtr         background_pixmap;
561                 internal IntPtr         background_pixel;
562                 internal IntPtr         border_pixmap;
563                 internal IntPtr         border_pixel;
564                 internal Gravity        bit_gravity;
565                 internal Gravity        win_gravity;
566                 internal int            backing_store;
567                 internal IntPtr         backing_planes;
568                 internal IntPtr         backing_pixel;
569                 internal bool           save_under;
570                 internal IntPtr         event_mask;
571                 internal IntPtr         do_not_propagate_mask;
572                 internal bool           override_redirect;
573                 internal IntPtr         colormap;
574                 internal IntPtr         cursor;
575         }
576
577         [StructLayout(LayoutKind.Sequential)]
578         internal struct XWindowAttributes {
579                 internal int            x;
580                 internal int            y;
581                 internal int            width;
582                 internal int            height;
583                 internal int            border_width;
584                 internal int            depth;
585                 internal IntPtr         visual;
586                 internal IntPtr         root;
587                 internal int            c_class;
588                 internal Gravity        bit_gravity;
589                 internal Gravity        win_gravity;
590                 internal int            backing_store;
591                 internal IntPtr         backing_planes;
592                 internal IntPtr         backing_pixel;
593                 internal bool           save_under;
594                 internal IntPtr         colormap;
595                 internal bool           map_installed;
596                 internal MapState       map_state;
597                 internal IntPtr         all_event_masks;
598                 internal IntPtr         your_event_mask;
599                 internal IntPtr         do_not_propagate_mask;
600                 internal bool           override_direct;
601                 internal IntPtr         screen;
602         }
603
604         [StructLayout(LayoutKind.Sequential)]
605         internal struct XTextProperty {
606                 internal string         value;
607                 internal IntPtr         encoding;
608                 internal int            format;
609                 internal IntPtr         nitems;
610         }
611
612         internal enum XWindowClass {
613                 InputOutput     = 1,
614                 InputOnly       = 2
615         }
616
617         internal enum XEventName {
618                 KeyPress                = 2,
619                 KeyRelease              = 3,
620                 ButtonPress             = 4,
621                 ButtonRelease           = 5,
622                 MotionNotify            = 6,
623                 EnterNotify             = 7,
624                 LeaveNotify             = 8,
625                 FocusIn                 = 9,
626                 FocusOut                = 10,
627                 KeymapNotify            = 11,
628                 Expose                  = 12,
629                 GraphicsExpose          = 13,
630                 NoExpose                = 14,
631                 VisibilityNotify        = 15,
632                 CreateNotify            = 16,
633                 DestroyNotify           = 17,
634                 UnmapNotify             = 18,
635                 MapNotify               = 19,
636                 MapRequest              = 20,
637                 ReparentNotify          = 21,
638                 ConfigureNotify         = 22,
639                 ConfigureRequest        = 23,
640                 GravityNotify           = 24,
641                 ResizeRequest           = 25,
642                 CirculateNotify         = 26,
643                 CirculateRequest        = 27,
644                 PropertyNotify          = 28,
645                 SelectionClear          = 29,
646                 SelectionRequest        = 30,
647                 SelectionNotify         = 31,
648                 ColormapNotify          = 32,
649                 ClientMessage           = 33,
650                 MappingNotify           = 34,
651
652                 LASTEvent
653         }
654
655         [Flags]
656         internal enum SetWindowValuemask {
657                 Nothing         = 0,
658                 BackPixmap      = 1,
659                 BackPixel       = 2,
660                 BorderPixmap    = 4,
661                 BorderPixel     = 8,
662                 BitGravity      = 16,
663                 WinGravity      = 32,
664                 BackingStore    = 64,
665                 BackingPlanes   = 128,
666                 BackingPixel    = 256,
667                 OverrideRedirect = 512,
668                 SaveUnder       = 1024,
669                 EventMask       = 2048,
670                 DontPropagate   = 4096,
671                 ColorMap        = 8192,
672                 Cursor          = 16384
673         }
674
675         internal enum CreateWindowArgs {
676                 CopyFromParent  = 0,
677                 ParentRelative  = 1,
678                 InputOutput     = 1,
679                 InputOnly       = 2
680         }
681
682         internal enum Gravity {
683                 ForgetGravity   = 0,
684                 NorthWestGravity= 1,
685                 NorthGravity    = 2,
686                 NorthEastGravity= 3,
687                 WestGravity     = 4,
688                 CenterGravity   = 5,
689                 EastGravity     = 6,
690                 SouthWestGravity= 7,
691                 SouthGravity    = 8,
692                 SouthEastGravity= 9,
693                 StaticGravity   = 10
694         }
695
696         internal enum XKeySym : uint {
697                 XK_BackSpace    = 0xFF08,
698                 XK_Tab          = 0xFF09,
699                 XK_Clear        = 0xFF0B,
700                 XK_Return       = 0xFF0D,
701                 XK_Home         = 0xFF50,
702                 XK_Left         = 0xFF51,
703                 XK_Up           = 0xFF52,
704                 XK_Right        = 0xFF53,
705                 XK_Down         = 0xFF54,
706                 XK_Page_Up      = 0xFF55,
707                 XK_Page_Down    = 0xFF56,
708                 XK_End          = 0xFF57,
709                 XK_Begin        = 0xFF58,
710                 XK_Menu         = 0xFF67,
711                 XK_Shift_L      = 0xFFE1,
712                 XK_Shift_R      = 0xFFE2,
713                 XK_Control_L    = 0xFFE3,
714                 XK_Control_R    = 0xFFE4,
715                 XK_Caps_Lock    = 0xFFE5,
716                 XK_Shift_Lock   = 0xFFE6,       
717                 XK_Meta_L       = 0xFFE7,
718                 XK_Meta_R       = 0xFFE8,
719                 XK_Alt_L        = 0xFFE9,
720                 XK_Alt_R        = 0xFFEA,
721                 XK_Super_L      = 0xFFEB,
722                 XK_Super_R      = 0xFFEC,
723                 XK_Hyper_L      = 0xFFED,
724                 XK_Hyper_R      = 0xFFEE,
725         }
726
727         [Flags]
728         internal enum EventMask {
729                 NoEventMask             = 0,
730                 KeyPressMask            = 1<<0,
731                 KeyReleaseMask          = 1<<1,
732                 ButtonPressMask         = 1<<2,
733                 ButtonReleaseMask       = 1<<3,
734                 EnterWindowMask         = 1<<4,
735                 LeaveWindowMask         = 1<<5,
736                 PointerMotionMask       = 1<<6,
737                 PointerMotionHintMask   = 1<<7,
738                 Button1MotionMask       = 1<<8,
739                 Button2MotionMask       = 1<<9,
740                 Button3MotionMask       = 1<<10,
741                 Button4MotionMask       = 1<<11,
742                 Button5MotionMask       = 1<<12,
743                 ButtonMotionMask        = 1<<13,
744                 KeymapStateMask         = 1<<14,
745                 ExposureMask            = 1<<15,
746                 VisibilityChangeMask    = 1<<16,
747                 StructureNotifyMask     = 1<<17,
748                 ResizeRedirectMask      = 1<<18,
749                 SubstructureNotifyMask  = 1<<19,
750                 SubstructureRedirectMask= 1<<20,
751                 FocusChangeMask         = 1<<21,
752                 PropertyChangeMask      = 1<<22,
753                 ColormapChangeMask      = 1<<23,
754                 OwnerGrabButtonMask     = 1<<24
755         }
756
757         internal enum GrabMode {
758                 GrabModeSync            = 0,
759                 GrabModeAsync           = 1
760         }
761
762         [StructLayout(LayoutKind.Sequential)]
763         internal struct XStandardColormap {
764                 internal IntPtr         colormap;
765                 internal IntPtr         red_max;
766                 internal IntPtr         red_mult;
767                 internal IntPtr         green_max;
768                 internal IntPtr         green_mult;
769                 internal IntPtr         blue_max;
770                 internal IntPtr         blue_mult;
771                 internal IntPtr         base_pixel;
772                 internal IntPtr         visualid;
773                 internal IntPtr         killid;
774         }
775
776         [StructLayout(LayoutKind.Sequential, Pack=2)]
777         internal struct XColor {
778                 internal IntPtr         pixel;
779                 internal ushort         red;
780                 internal ushort         green;
781                 internal ushort         blue;
782                 internal byte           flags;
783                 internal byte           pad;
784         }
785
786         internal enum Atom {
787                 AnyPropertyType         = 0,
788                 XA_PRIMARY              = 1,
789                 XA_SECONDARY            = 2,
790                 XA_ARC                  = 3,
791                 XA_ATOM                 = 4,
792                 XA_BITMAP               = 5,
793                 XA_CARDINAL             = 6,
794                 XA_COLORMAP             = 7,
795                 XA_CURSOR               = 8,
796                 XA_CUT_BUFFER0          = 9,
797                 XA_CUT_BUFFER1          = 10,
798                 XA_CUT_BUFFER2          = 11,
799                 XA_CUT_BUFFER3          = 12,
800                 XA_CUT_BUFFER4          = 13,
801                 XA_CUT_BUFFER5          = 14,
802                 XA_CUT_BUFFER6          = 15,
803                 XA_CUT_BUFFER7          = 16,
804                 XA_DRAWABLE             = 17,
805                 XA_FONT                 = 18,
806                 XA_INTEGER              = 19,
807                 XA_PIXMAP               = 20,
808                 XA_POINT                = 21,
809                 XA_RECTANGLE            = 22,
810                 XA_RESOURCE_MANAGER     = 23,
811                 XA_RGB_COLOR_MAP        = 24,
812                 XA_RGB_BEST_MAP         = 25,
813                 XA_RGB_BLUE_MAP         = 26,
814                 XA_RGB_DEFAULT_MAP      = 27,
815                 XA_RGB_GRAY_MAP         = 28,
816                 XA_RGB_GREEN_MAP        = 29,
817                 XA_RGB_RED_MAP          = 30,
818                 XA_STRING               = 31,
819                 XA_VISUALID             = 32,
820                 XA_WINDOW               = 33,
821                 XA_WM_COMMAND           = 34,
822                 XA_WM_HINTS             = 35,
823                 XA_WM_CLIENT_MACHINE    = 36,
824                 XA_WM_ICON_NAME         = 37,
825                 XA_WM_ICON_SIZE         = 38,
826                 XA_WM_NAME              = 39,
827                 XA_WM_NORMAL_HINTS      = 40,
828                 XA_WM_SIZE_HINTS        = 41,
829                 XA_WM_ZOOM_HINTS        = 42,
830                 XA_MIN_SPACE            = 43,
831                 XA_NORM_SPACE           = 44,
832                 XA_MAX_SPACE            = 45,
833                 XA_END_SPACE            = 46,
834                 XA_SUPERSCRIPT_X        = 47,
835                 XA_SUPERSCRIPT_Y        = 48,
836                 XA_SUBSCRIPT_X          = 49,
837                 XA_SUBSCRIPT_Y          = 50,
838                 XA_UNDERLINE_POSITION   = 51,
839                 XA_UNDERLINE_THICKNESS  = 52,
840                 XA_STRIKEOUT_ASCENT     = 53,
841                 XA_STRIKEOUT_DESCENT    = 54,
842                 XA_ITALIC_ANGLE         = 55,
843                 XA_X_HEIGHT             = 56,
844                 XA_QUAD_WIDTH           = 57,
845                 XA_WEIGHT               = 58,
846                 XA_POINT_SIZE           = 59,
847                 XA_RESOLUTION           = 60,
848                 XA_COPYRIGHT            = 61,
849                 XA_NOTICE               = 62,
850                 XA_FONT_NAME            = 63,
851                 XA_FAMILY_NAME          = 64,
852                 XA_FULL_NAME            = 65,
853                 XA_CAP_HEIGHT           = 66,
854                 XA_WM_CLASS             = 67,
855                 XA_WM_TRANSIENT_FOR     = 68,
856
857                 XA_LAST_PREDEFINED      = 68
858         }
859
860         [StructLayout(LayoutKind.Sequential)]
861         internal struct XScreen {
862                 internal IntPtr         ext_data;
863                 internal IntPtr         display;
864                 internal IntPtr         root;
865                 internal int            width;
866                 internal int            height;
867                 internal int            mwidth;
868                 internal int            mheight;
869                 internal int            ndepths;
870                 internal IntPtr         depths;
871                 internal int            root_depth;
872                 internal IntPtr         root_visual;
873                 internal IntPtr         default_gc;
874                 internal IntPtr         cmap;
875                 internal IntPtr         white_pixel;
876                 internal IntPtr         black_pixel;
877                 internal int            max_maps;
878                 internal int            min_maps;
879                 internal int            backing_store;
880                 internal bool           save_unders;
881                 internal IntPtr     root_input_mask;
882         }
883
884         [Flags]
885         internal enum ChangeWindowFlags {
886                 CWX                     = 1<<0,
887                 CWY                     = 1<<1,
888                 CWWidth                 = 1<<2,
889                 CWHeight                = 1<<3,
890                 CWBorderWidth           = 1<<4,
891                 CWSibling               = 1<<5,
892                 CWStackMode             = 1<<6
893         }
894
895         internal enum StackMode {
896                 Above                   = 0,
897                 Below                   = 1,
898                 TopIf                   = 2,
899                 BottomIf                = 3,
900                 Opposite                = 4
901         }
902
903         [StructLayout(LayoutKind.Sequential)]
904         internal struct XWindowChanges {
905                 internal int            x;
906                 internal int            y;
907                 internal int            width;
908                 internal int            height;
909                 internal int            border_width;
910                 internal IntPtr         sibling;
911                 internal StackMode      stack_mode;
912         }       
913
914         [Flags]
915         internal enum ColorFlags {
916                 DoRed                   = 1<<0,
917                 DoGreen                 = 1<<1,
918                 DoBlue                  = 1<<2
919         }
920
921         internal enum NotifyMode {
922                 NotifyNormal            = 0,
923                 NotifyGrab              = 1,
924                 NotifyUngrab            = 2
925         }
926
927         internal enum NotifyDetail {
928                 NotifyAncestor          = 0,
929                 NotifyVirtual           = 1,
930                 NotifyInferior          = 2,
931                 NotifyNonlinear         = 3,
932                 NotifyNonlinearVirtual  = 4,
933                 NotifyPointer           = 5,
934                 NotifyPointerRoot       = 6,
935                 NotifyDetailNone        = 7
936         }
937
938         [StructLayout(LayoutKind.Sequential)]
939         internal struct MotifWmHints {
940                 internal IntPtr         flags;
941                 internal IntPtr         functions;
942                 internal IntPtr     decorations;
943                 internal IntPtr         input_mode;
944                 internal IntPtr         status;
945         }
946
947         [Flags]
948         internal enum MotifFlags {
949                 Functions               = 1,
950                 Decorations             = 2,
951                 InputMode               = 4,
952                 Status                  = 8
953         }
954
955         [Flags]
956         internal enum MotifFunctions {
957                 All                     = 0x01,
958                 Resize                  = 0x02,
959                 Move                    = 0x04,
960                 Minimize                = 0x08,
961                 Maximize                = 0x10,
962                 Close                   = 0x20
963         }
964
965         [Flags]
966         internal enum MotifDecorations {
967                 All                     = 0x01,
968                 Border                  = 0x02,
969                 ResizeH                 = 0x04,
970                 Title                   = 0x08,
971                 Menu                    = 0x10,
972                 Minimize                = 0x20,
973                 Maximize                = 0x40,
974                 
975         }
976
977         [Flags]
978         internal enum MotifInputMode {
979                 Modeless                = 0,
980                 ApplicationModal        = 1,
981                 SystemModal             = 2,
982                 FullApplicationModal    = 3
983         }
984
985         [Flags]
986         internal enum KeyMasks {
987                 ShiftMask               = (1 << 0),
988                 LockMask                = (1 << 1),
989                 ControlMask             = (1 << 2),
990                 Mod1Mask                = (1 << 3),
991                 Mod2Mask                = (1 << 4),
992                 Mod3Mask                = (1 << 5),
993                 Mod4Mask                = (1 << 6),
994                 Mod5Mask                = (1 << 7),
995
996                 ModMasks                = Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask
997         }
998
999         [StructLayout (LayoutKind.Sequential)]
1000         internal struct XModifierKeymap {
1001                 public int max_keypermod;
1002                 public IntPtr modifiermap;
1003         } 
1004
1005         internal enum PropertyMode {
1006                 Replace                 = 0,
1007                 Prepend                 = 1,
1008                 Append                  = 2
1009         }
1010
1011         [StructLayout (LayoutKind.Sequential)]
1012         internal struct XKeyBoardState {
1013                 public int key_click_percent;
1014                 public int bell_percent;
1015                 public uint bell_pitch, bell_duration;
1016                 public IntPtr led_mask;
1017                 public int global_auto_repeat;
1018                 public AutoRepeats auto_repeats;
1019
1020                 [StructLayout (LayoutKind.Explicit)]
1021                         public struct AutoRepeats {
1022                         [FieldOffset (0)]
1023                         public byte first;
1024                                 
1025                         [FieldOffset (31)]
1026                         public byte last;
1027                 }
1028         }
1029
1030         [Flags]
1031         internal enum GCFunction {
1032                 GCFunction              = 1<<0,
1033                 GCPlaneMask             = 1<<1,
1034                 GCForeground            = 1<<2,
1035                 GCBackground            = 1<<3,
1036                 GCLineWidth             = 1<<4,
1037                 GCLineStyle             = 1<<5,
1038                 GCCapStyle              = 1<<6,
1039                 GCJoinStyle             = 1<<7,
1040                 GCFillStyle             = 1<<8,
1041                 GCFillRule              = 1<<9, 
1042                 GCTile                  = 1<<10,
1043                 GCStipple               = 1<<11,
1044                 GCTileStipXOrigin       = 1<<12,
1045                 GCTileStipYOrigin       = 1<<13,
1046                 GCFont                  = 1<<14,
1047                 GCSubwindowMode         = 1<<15,
1048                 GCGraphicsExposures     = 1<<16,
1049                 GCClipXOrigin           = 1<<17,
1050                 GCClipYOrigin           = 1<<18,
1051                 GCClipMask              = 1<<19,
1052                 GCDashOffset            = 1<<20,
1053                 GCDashList              = 1<<21,
1054                 GCArcMode               = 1<<22
1055         }
1056
1057         internal enum GCJoinStyle {
1058                 JoinMiter               = 0,
1059                 JoinRound               = 1,
1060                 JoinBevel               = 2
1061         }
1062
1063         internal enum GCLineStyle {
1064                 LineSolid               = 0,
1065                 LineOnOffDash           = 1,
1066                 LineDoubleDash          = 2
1067         }
1068
1069         internal enum GCCapStyle {
1070                 CapNotLast              = 0,
1071                 CapButt                 = 1,
1072                 CapRound                = 2,
1073                 CapProjecting           = 3
1074         }
1075
1076         internal enum GCFillStyle {
1077                 FillSolid               = 0,
1078                 FillTiled               = 1,
1079                 FillStippled            = 2,
1080                 FillOpaqueStppled       = 3
1081         }
1082
1083         internal enum GCFillRule {
1084                 EvenOddRule             = 0,
1085                 WindingRule             = 1
1086         }
1087
1088         internal enum GCArcMode {
1089                 ArcChord                = 0,
1090                 ArcPieSlice             = 1
1091         }
1092
1093         internal enum GCSubwindowMode {
1094                 ClipByChildren          = 0,
1095                 IncludeInferiors        = 1
1096         }
1097
1098         [StructLayout (LayoutKind.Sequential)]
1099         internal struct XGCValues {
1100                 internal GXFunction             function;
1101                 internal IntPtr                 plane_mask;
1102                 internal IntPtr                 foreground;
1103                 internal IntPtr                 background;
1104                 internal int                    line_width;
1105                 internal GCLineStyle            line_style;
1106                 internal GCCapStyle             cap_style;
1107                 internal GCJoinStyle            join_style;
1108                 internal GCFillStyle            fill_style;
1109                 internal GCFillRule             fill_rule;
1110                 internal GCArcMode              arc_mode;
1111                 internal IntPtr                 tile;
1112                 internal IntPtr                 stipple;
1113                 internal int                    ts_x_origin;
1114                 internal int                    ts_y_origin;
1115                 internal IntPtr                 font;
1116                 internal GCSubwindowMode        subwindow_mode;
1117                 internal bool                   graphics_exposures;
1118                 internal int                    clip_x_origin;
1119                 internal int                    clib_y_origin;
1120                 internal IntPtr                 clip_mask;
1121                 internal int                    dash_offset;
1122                 internal byte                   dashes;
1123         }
1124
1125         internal enum GXFunction {
1126                 GXclear                         = 0x0,          /* 0 */
1127                 GXand                           = 0x1,          /* src AND dst */
1128                 GXandReverse                    = 0x2,          /* src AND NOT dst */
1129                 GXcopy                          = 0x3,          /* src */
1130                 GXandInverted                   = 0x4,          /* NOT src AND dst */
1131                 GXnoop                          = 0x5,          /* dst */
1132                 GXxor                           = 0x6,          /* src XOR dst */
1133                 GXor                            = 0x7,          /* src OR dst */
1134                 GXnor                           = 0x8,          /* NOT src AND NOT dst */
1135                 GXequiv                         = 0x9,          /* NOT src XOR dst */
1136                 GXinvert                        = 0xa,          /* NOT dst */
1137                 GXorReverse                     = 0xb,          /* src OR NOT dst */
1138                 GXcopyInverted                  = 0xc,          /* NOT src */
1139                 GXorInverted                    = 0xd,          /* NOT src OR dst */
1140                 GXnand                          = 0xe,          /* NOT src OR NOT dst */
1141                 GXset                           = 0xf           /* 1 */
1142         }
1143
1144         internal enum NetWindowManagerState {
1145                 Remove                          = 0,
1146                 Add                             = 1,
1147                 Toggle                          = 2
1148         }
1149
1150         internal enum RevertTo {
1151                 None                            = 0,
1152                 PointerRoot                     = 1,
1153                 Parent                          = 2
1154         }
1155
1156         internal enum MapState {
1157                 IsUnmapped                      = 0,
1158                 IsUnviewable                    = 1,
1159                 IsViewable                      = 2
1160         }
1161
1162         internal enum CursorFontShape {
1163                 XC_X_cursor                     = 0,
1164                 XC_arrow                        = 2,
1165                 XC_based_arrow_down             = 4,
1166                 XC_based_arrow_up               = 6,
1167                 XC_boat                         = 8,
1168                 XC_bogosity                     = 10,
1169                 XC_bottom_left_corner           = 12,
1170                 XC_bottom_right_corner          = 14,
1171                 XC_bottom_side                  = 16,
1172                 XC_bottom_tee                   = 18,
1173                 XC_box_spiral                   = 20,
1174                 XC_center_ptr                   = 22,
1175
1176                 XC_circle                       = 24,
1177                 XC_clock                        = 26,
1178                 XC_coffee_mug                   = 28,
1179                 XC_cross                        = 30,
1180                 XC_cross_reverse                = 32,
1181                 XC_crosshair                    = 34,
1182                 XC_diamond_cross                = 36,
1183                 XC_dot                          = 38,
1184                 XC_dotbox                       = 40,
1185                 XC_double_arrow                 = 42,
1186                 XC_draft_large                  = 44,
1187                 XC_draft_small                  = 46,
1188
1189                 XC_draped_box                   = 48,
1190                 XC_exchange                     = 50,
1191                 XC_fleur                        = 52,
1192                 XC_gobbler                      = 54,
1193                 XC_gumby                        = 56,
1194                 XC_hand1                        = 58,
1195                 XC_hand2                        = 60,
1196                 XC_heart                        = 62,
1197                 XC_icon                         = 64,
1198                 XC_iron_cross                   = 66,
1199                 XC_left_ptr                     = 68,
1200                 XC_left_side                    = 70,
1201
1202                 XC_left_tee                     = 72,
1203                 XC_left_button                  = 74,
1204                 XC_ll_angle                     = 76,
1205                 XC_lr_angle                     = 78,
1206                 XC_man                          = 80,
1207                 XC_middlebutton                 = 82,
1208                 XC_mouse                        = 84,
1209                 XC_pencil                       = 86,
1210                 XC_pirate                       = 88,
1211                 XC_plus                         = 90,
1212                 XC_question_arrow               = 92,
1213                 XC_right_ptr                    = 94,
1214
1215                 XC_right_side                   = 96,
1216                 XC_right_tee                    = 98,
1217                 XC_rightbutton                  = 100,
1218                 XC_rtl_logo                     = 102,
1219                 XC_sailboat                     = 104,
1220                 XC_sb_down_arrow                = 106,
1221                 XC_sb_h_double_arrow            = 108,
1222                 XC_sb_left_arrow                = 110,
1223                 XC_sb_right_arrow               = 112,
1224                 XC_sb_up_arrow                  = 114,
1225                 XC_sb_v_double_arrow            = 116,
1226                 XC_sb_shuttle                   = 118,
1227
1228                 XC_sizing                       = 120,
1229                 XC_spider                       = 122,
1230                 XC_spraycan                     = 124,
1231                 XC_star                         = 126,
1232                 XC_target                       = 128,
1233                 XC_tcross                       = 130,
1234                 XC_top_left_arrow               = 132,
1235                 XC_top_left_corner              = 134,
1236                 XC_top_right_corner             = 136,
1237                 XC_top_side                     = 138,
1238                 XC_top_tee                      = 140,
1239                 XC_trek                         = 142,
1240
1241                 XC_ul_angle                     = 144,
1242                 XC_umbrella                     = 146,
1243                 XC_ur_angle                     = 148,
1244                 XC_watch                        = 150,
1245                 XC_xterm                        = 152,
1246                 XC_num_glyphs                   = 154
1247         }
1248
1249         internal enum SystrayRequest {
1250                 SYSTEM_TRAY_REQUEST_DOCK        = 0,
1251                 SYSTEM_TRAY_BEGIN_MESSAGE       = 1,
1252                 SYSTEM_TRAY_CANCEL_MESSAGE      = 2
1253         }
1254
1255         [Flags]
1256         internal enum XSizeHintsFlags  {
1257                 USPosition                      = (1 << 0),
1258                 USSize                          = (1 << 1),
1259                 PPosition                       = (1 << 2),
1260                 PSize                           = (1 << 3),
1261                 PMinSize                        = (1 << 4),
1262                 PMaxSize                        = (1 << 5),
1263                 PResizeInc                      = (1 << 6),
1264                 PAspect                         = (1 << 7),
1265                 PAllHints                       = (PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect),
1266                 PBaseSize                       = (1 << 8),
1267                 PWinGravity                     = (1 << 9),
1268         }
1269
1270         [StructLayout(LayoutKind.Sequential)]
1271         internal struct XSizeHints {
1272                 internal IntPtr                 flags;
1273                 internal int                    x;
1274                 internal int                    y;
1275                 internal int                    width;
1276                 internal int                    height;
1277                 internal int                    min_width;
1278                 internal int                    min_height;
1279                 internal int                    max_width;
1280                 internal int                    max_height;
1281                 internal int                    width_inc;
1282                 internal int                    height_inc;
1283                 internal int                    min_aspect_x;
1284                 internal int                    min_aspect_y;
1285                 internal int                    max_aspect_x;
1286                 internal int                    max_aspect_y;
1287                 internal int                    base_width;
1288                 internal int                    base_height;
1289                 internal int                    win_gravity;
1290         }
1291
1292         [Flags]
1293         internal enum XWMHintsFlags {
1294                 InputHint                       = (1 << 0),
1295                 StateHint                       = (1 << 1),
1296                 IconPixmapHint                  = (1 << 2),
1297                 IconWindowHint                  = (1 << 3),
1298                 IconPositionHint                = (1 << 4),
1299                 IconMaskHint                    = (1 << 5),
1300                 WindowGroupHint                 = (1 << 6),
1301                 AllHints                        = (InputHint | StateHint | IconPixmapHint | IconWindowHint | IconPositionHint | IconMaskHint | WindowGroupHint)
1302         }
1303
1304         internal enum XInitialState {
1305                 DontCareState                   = 0,
1306                 NormalState                     = 1,
1307                 ZoomState                       = 2,
1308                 IconicState                     = 3,
1309                 InactiveState                   = 4
1310         }
1311
1312         [StructLayout(LayoutKind.Sequential)]
1313         internal struct XWMHints {
1314                 internal IntPtr                 flags;
1315                 internal bool                   input;
1316                 internal XInitialState          initial_state;
1317                 internal IntPtr                 icon_pixmap;
1318                 internal IntPtr                 icon_window;
1319                 internal int                    icon_x;
1320                 internal int                    icon_y;
1321                 internal IntPtr                 icon_mask;
1322                 internal IntPtr                 window_group;
1323         }
1324
1325         [StructLayout(LayoutKind.Sequential)]
1326         internal struct XIconSize {
1327                 internal int                    min_width;
1328                 internal int                    min_height;
1329                 internal int                    max_width;
1330                 internal int                    max_height;
1331                 internal int                    width_inc;
1332                 internal int                    height_inc;
1333         }
1334
1335         internal struct CaretStruct {
1336                 internal Timer  Timer;                          // Blink interval
1337                 internal IntPtr Hwnd;                           // Window owning the caret
1338                 internal IntPtr Window;                         // Actual X11 handle of the window
1339                 internal int    X;                              // X position of the caret
1340                 internal int    Y;                              // Y position of the caret
1341                 internal int    Width;                          // Width of the caret; if no image used
1342                 internal int    Height;                         // Height of the caret, if no image used
1343                 internal bool   Visible;                        // Is caret visible?
1344                 internal bool   On;                             // Caret blink display state: On/Off
1345                 internal IntPtr gc;                             // Graphics context
1346                 internal bool   Paused;                         // Don't update right now
1347         }
1348
1349         internal struct HoverStruct {
1350                 internal Timer  Timer;                          // for hovering
1351                 internal IntPtr Window;                         // Last window we entered; used to generate WM_MOUSEHOVER (handle is X11 handle)
1352                 internal int    X;                              // Last MouseMove X coordinate; used to generate WM_MOUSEHOVER
1353                 internal int    Y;                              // Last MouseMove Y coordinate; used to generate WM_MOUSEHOVER
1354                 internal Size   Size;                           // Size of the rectangle the mouse has to stay in to generate hover
1355                 internal int    Interval;                       // in milliseconds, how long to hold before hover is generated
1356                 internal IntPtr Atom;                           // X Atom
1357         }
1358
1359         internal struct ClickStruct {
1360                 internal IntPtr Hwnd;                           // 
1361                 internal Msg    Message;                        // 
1362                 internal IntPtr wParam;                         // 
1363                 internal IntPtr lParam;                         // 
1364                 internal long   Time;                           // Last time we received a mouse click
1365                 internal bool   Pending;                        // True if we haven't sent the last mouse click
1366         }
1367
1368         internal struct GrabStruct {
1369                 internal bool           Confined;               // Is the current grab (if any) confined to grab_area?
1370                 internal IntPtr         Hwnd;                   // The window that is grabbed
1371                 internal Rectangle      Area;                   // The area the current grab is confined to
1372         }
1373
1374         internal struct ClipboardStruct {
1375                 internal object         Item;                   // Object on the clipboard
1376                 internal object         Type;                   // Type if object on the clipboard
1377                 internal ArrayList      Formats;                // list of formats available in the clipboard
1378                 internal bool           Retrieving;             // true if we are requesting an item
1379                 internal bool           Enumerating;            // true if we are enumerating through all known types
1380                 internal XplatUI.ObjectToClipboard Converter;
1381         }
1382
1383         internal delegate int  XErrorHandler(IntPtr DisplayHandle, ref XErrorEvent error_event);
1384
1385         internal enum XRequest : byte {
1386                 X_CreateWindow                  = 1,
1387                 X_ChangeWindowAttributes        = 2,
1388                 X_GetWindowAttributes           = 3,
1389                 X_DestroyWindow                 = 4,
1390                 X_DestroySubwindows             = 5,
1391                 X_ChangeSaveSet                 = 6,
1392                 X_ReparentWindow                = 7,
1393                 X_MapWindow                     = 8,
1394                 X_MapSubwindows                 = 9,
1395                 X_UnmapWindow                   = 10,
1396                 X_UnmapSubwindows               = 11,
1397                 X_ConfigureWindow               = 12,
1398                 X_CirculateWindow               = 13,
1399                 X_GetGeometry                   = 14,
1400                 X_QueryTree                     = 15,
1401                 X_InternAtom                    = 16,
1402                 X_GetAtomName                   = 17,
1403                 X_ChangeProperty                = 18,
1404                 X_DeleteProperty                = 19,
1405                 X_GetProperty                   = 20,
1406                 X_ListProperties                = 21,
1407                 X_SetSelectionOwner             = 22,
1408                 X_GetSelectionOwner             = 23,
1409                 X_ConvertSelection              = 24,
1410                 X_SendEvent                     = 25,
1411                 X_GrabPointer                   = 26,
1412                 X_UngrabPointer                 = 27,
1413                 X_GrabButton                    = 28,
1414                 X_UngrabButton                  = 29,
1415                 X_ChangeActivePointerGrab       = 30,
1416                 X_GrabKeyboard                  = 31,
1417                 X_UngrabKeyboard                = 32,
1418                 X_GrabKey                       = 33,
1419                 X_UngrabKey                     = 34,
1420                 X_AllowEvents                   = 35,
1421                 X_GrabServer                    = 36,
1422                 X_UngrabServer                  = 37,
1423                 X_QueryPointer                  = 38,
1424                 X_GetMotionEvents               = 39,
1425                 X_TranslateCoords               = 40,
1426                 X_WarpPointer                   = 41,
1427                 X_SetInputFocus                 = 42,
1428                 X_GetInputFocus                 = 43,
1429                 X_QueryKeymap                   = 44,
1430                 X_OpenFont                      = 45,
1431                 X_CloseFont                     = 46,
1432                 X_QueryFont                     = 47,
1433                 X_QueryTextExtents              = 48,
1434                 X_ListFonts                     = 49,
1435                 X_ListFontsWithInfo             = 50,
1436                 X_SetFontPath                   = 51,
1437                 X_GetFontPath                   = 52,
1438                 X_CreatePixmap                  = 53,
1439                 X_FreePixmap                    = 54,
1440                 X_CreateGC                      = 55,
1441                 X_ChangeGC                      = 56,
1442                 X_CopyGC                        = 57,
1443                 X_SetDashes                     = 58,
1444                 X_SetClipRectangles             = 59,
1445                 X_FreeGC                        = 60,
1446                 X_ClearArea                     = 61,
1447                 X_CopyArea                      = 62,
1448                 X_CopyPlane                     = 63,
1449                 X_PolyPoint                     = 64,
1450                 X_PolyLine                      = 65,
1451                 X_PolySegment                   = 66,
1452                 X_PolyRectangle                 = 67,
1453                 X_PolyArc                       = 68,
1454                 X_FillPoly                      = 69,
1455                 X_PolyFillRectangle             = 70,
1456                 X_PolyFillArc                   = 71,
1457                 X_PutImage                      = 72,
1458                 X_GetImage                      = 73,
1459                 X_PolyText8                     = 74,
1460                 X_PolyText16                    = 75,
1461                 X_ImageText8                    = 76,
1462                 X_ImageText16                   = 77,
1463                 X_CreateColormap                = 78,
1464                 X_FreeColormap                  = 79,
1465                 X_CopyColormapAndFree           = 80,
1466                 X_InstallColormap               = 81,
1467                 X_UninstallColormap             = 82,
1468                 X_ListInstalledColormaps        = 83,
1469                 X_AllocColor                    = 84,
1470                 X_AllocNamedColor               = 85,
1471                 X_AllocColorCells               = 86,
1472                 X_AllocColorPlanes              = 87,
1473                 X_FreeColors                    = 88,
1474                 X_StoreColors                   = 89,
1475                 X_StoreNamedColor               = 90,
1476                 X_QueryColors                   = 91,
1477                 X_LookupColor                   = 92,
1478                 X_CreateCursor                  = 93,
1479                 X_CreateGlyphCursor             = 94,
1480                 X_FreeCursor                    = 95,
1481                 X_RecolorCursor                 = 96,
1482                 X_QueryBestSize                 = 97,
1483                 X_QueryExtension                = 98,
1484                 X_ListExtensions                = 99,
1485                 X_ChangeKeyboardMapping         = 100,
1486                 X_GetKeyboardMapping            = 101,
1487                 X_ChangeKeyboardControl         = 102,
1488                 X_GetKeyboardControl            = 103,
1489                 X_Bell                          = 104,
1490                 X_ChangePointerControl          = 105,
1491                 X_GetPointerControl             = 106,
1492                 X_SetScreenSaver                = 107,
1493                 X_GetScreenSaver                = 108,
1494                 X_ChangeHosts                   = 109,
1495                 X_ListHosts                     = 110,
1496                 X_SetAccessControl              = 111,
1497                 X_SetCloseDownMode              = 112,
1498                 X_KillClient                    = 113,
1499                 X_RotateProperties              = 114,
1500                 X_ForceScreenSaver              = 115,
1501                 X_SetPointerMapping             = 116,
1502                 X_GetPointerMapping             = 117,
1503                 X_SetModifierMapping            = 118,
1504                 X_GetModifierMapping            = 119,
1505                 X_NoOperation                   = 127
1506         }
1507
1508         [Flags]
1509         internal enum XIMProperties {
1510                 XIMPreeditArea          = 0x0001,
1511                 XIMPreeditCallbacks     = 0x0002,
1512                 XIMPreeditPosition      = 0x0004,
1513                 XIMPreeditNothing       = 0x0008,
1514                 XIMPreeditNone          = 0x0010,
1515                 XIMStatusArea           = 0x0100,
1516                 XIMStatusCallbacks      = 0x0200,
1517                 XIMStatusNothing        = 0x0400,
1518                 XIMStatusNone           = 0x0800,
1519         }
1520
1521         [Flags]
1522         internal enum WindowType {
1523                 Client                  = 1,
1524                 Whole                   = 2,
1525                 Both                    = 3
1526         }
1527
1528         internal enum XEmbedMessage {
1529                 EmbeddedNotify = 0,
1530                 WindowActivate = 1,
1531                 WindowDeactivate = 2,
1532                 RequestFocus = 3,
1533                 FocusIn = 4,
1534                 FocusOut = 5,
1535                 FocusNext = 6,
1536                 FocusPrev = 7,
1537                 /* 8-9 were used for XEMBED_GRAB_KEY/XEMBED_UNGRAB_KEY */
1538                 ModalityOn = 10,
1539                 ModalityOff = 11,
1540                 RegisterAccelerator = 12,
1541                 UnregisterAccelerator = 13,
1542                 ActivateAccelerator = 14
1543         }
1544 }