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:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
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.
20 // Copyright (c) 2004 Novell, Inc.
23 // Peter Bartok pbartok@novell.com
30 using System.ComponentModel;
31 using System.Collections;
33 using System.Diagnostics;
34 using System.Runtime.InteropServices;
37 namespace System.Windows.Forms {
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.
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;
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;
61 internal IntPtr subwindow;
69 internal bool same_screen;
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;
80 internal IntPtr subwindow;
88 internal bool same_screen;
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;
99 internal IntPtr subwindow;
100 internal IntPtr time;
106 internal byte is_hint;
107 internal bool same_screen;
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;
124 internal NotifyMode mode;
125 internal NotifyDetail detail;
126 internal bool same_screen;
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;
139 internal NotifyDetail detail;
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;
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;
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;
209 internal int major_code;
210 internal int minor_code;
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;
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;
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;
246 internal int border_width;
247 internal bool override_redirect;
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;
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;
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;
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;
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;
303 internal bool override_redirect;
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;
318 internal int border_width;
319 internal IntPtr above;
320 internal bool override_redirect;
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;
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;
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;
358 internal int border_width;
359 internal IntPtr above;
361 internal IntPtr value_mask;
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;
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;
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;
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;
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;
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;
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;
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;
457 internal IntPtr ptr1;
458 internal IntPtr ptr2;
459 internal IntPtr ptr3;
460 internal IntPtr ptr4;
461 internal IntPtr ptr5;
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;
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;
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;
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;
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() {
556 case XEventName.ButtonPress:
557 case XEventName.ButtonRelease:
558 return ToString (ButtonEvent);
559 case XEventName.CirculateNotify:
560 case XEventName.CirculateRequest:
561 return ToString (CirculateEvent);
562 case XEventName.ClientMessage:
563 return ToString (ClientMessageEvent);
564 case XEventName.ColormapNotify:
565 return ToString (ColormapEvent);
566 case XEventName.ConfigureNotify:
567 return ToString (ConfigureEvent);
568 case XEventName.ConfigureRequest:
569 return ToString (ConfigureRequestEvent);
570 case XEventName.CreateNotify:
571 return ToString (CreateWindowEvent);
572 case XEventName.DestroyNotify:
573 return ToString (DestroyWindowEvent);
574 case XEventName.Expose:
575 return ToString (ExposeEvent);
576 case XEventName.FocusIn:
577 case XEventName.FocusOut:
578 return ToString (FocusChangeEvent);
579 case XEventName.GraphicsExpose:
580 return ToString (GraphicsExposeEvent);
581 case XEventName.GravityNotify:
582 return ToString (GravityEvent);
583 case XEventName.KeymapNotify:
584 return ToString (KeymapEvent);
585 case XEventName.MapNotify:
586 return ToString (MapEvent);
587 case XEventName.MappingNotify:
588 return ToString (MappingEvent);
589 case XEventName.MapRequest:
590 return ToString (MapRequestEvent);
591 case XEventName.MotionNotify:
592 return ToString (MotionEvent);
593 case XEventName.NoExpose:
594 return ToString (NoExposeEvent);
595 case XEventName.PropertyNotify:
596 return ToString (PropertyEvent);
597 case XEventName.ReparentNotify:
598 return ToString (ReparentEvent);
599 case XEventName.ResizeRequest:
600 return ToString (ResizeRequestEvent);
601 case XEventName.SelectionClear:
602 return ToString (SelectionClearEvent);
603 case XEventName.SelectionNotify:
604 return ToString (SelectionEvent);
605 case XEventName.SelectionRequest:
606 return ToString (SelectionRequestEvent);
607 case XEventName.UnmapNotify:
608 return ToString (UnmapEvent);
609 case XEventName.VisibilityNotify:
610 return ToString (VisibilityEvent);
611 case XEventName.EnterNotify:
612 case XEventName.LeaveNotify:
613 return ToString (CrossingEvent);
615 return type.ToString ();
619 public static string ToString (object ev)
621 string result = string.Empty;
622 Type type = ev.GetType ();
623 Reflection.FieldInfo [] fields = type.GetFields (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance);
624 for (int i = 0; i < fields.Length; i++) {
625 if (result != string.Empty) {
628 object value = fields [i].GetValue (ev);
629 result += fields [i].Name + "=" + (value == null ? "<null>" : value.ToString ());
631 return type.Name + " (" + result + ")";
635 [StructLayout(LayoutKind.Sequential)]
636 internal struct XSetWindowAttributes {
637 internal IntPtr background_pixmap;
638 internal IntPtr background_pixel;
639 internal IntPtr border_pixmap;
640 internal IntPtr border_pixel;
641 internal Gravity bit_gravity;
642 internal Gravity win_gravity;
643 internal int backing_store;
644 internal IntPtr backing_planes;
645 internal IntPtr backing_pixel;
646 internal bool save_under;
647 internal IntPtr event_mask;
648 internal IntPtr do_not_propagate_mask;
649 internal bool override_redirect;
650 internal IntPtr colormap;
651 internal IntPtr cursor;
654 [StructLayout(LayoutKind.Sequential)]
655 internal struct XWindowAttributes {
660 internal int border_width;
662 internal IntPtr visual;
663 internal IntPtr root;
664 internal int c_class;
665 internal Gravity bit_gravity;
666 internal Gravity win_gravity;
667 internal int backing_store;
668 internal IntPtr backing_planes;
669 internal IntPtr backing_pixel;
670 internal bool save_under;
671 internal IntPtr colormap;
672 internal bool map_installed;
673 internal MapState map_state;
674 internal IntPtr all_event_masks;
675 internal IntPtr your_event_mask;
676 internal IntPtr do_not_propagate_mask;
677 internal bool override_direct;
678 internal IntPtr screen;
680 public override string ToString ()
682 return XEvent.ToString (this);
686 [StructLayout(LayoutKind.Sequential)]
687 internal struct XTextProperty {
688 internal string value;
689 internal IntPtr encoding;
691 internal IntPtr nitems;
694 internal enum XWindowClass {
699 internal enum XEventName {
713 VisibilityNotify = 15,
720 ConfigureNotify = 22,
721 ConfigureRequest = 23,
724 CirculateNotify = 26,
725 CirculateRequest = 27,
728 SelectionRequest = 30,
729 SelectionNotify = 31,
738 internal enum SetWindowValuemask {
749 OverrideRedirect = 512,
752 DontPropagate = 4096,
757 internal enum SendEventValues {
762 internal enum CreateWindowArgs {
769 internal enum Gravity {
783 internal enum XKeySym : uint {
784 XK_BackSpace = 0xFF08,
794 XK_Page_Down = 0xFF56,
800 XK_Control_L = 0xFFE3,
801 XK_Control_R = 0xFFE4,
802 XK_Caps_Lock = 0xFFE5,
803 XK_Shift_Lock = 0xFFE6,
815 internal enum EventMask {
818 KeyReleaseMask = 1<<1,
819 ButtonPressMask = 1<<2,
820 ButtonReleaseMask = 1<<3,
821 EnterWindowMask = 1<<4,
822 LeaveWindowMask = 1<<5,
823 PointerMotionMask = 1<<6,
824 PointerMotionHintMask = 1<<7,
825 Button1MotionMask = 1<<8,
826 Button2MotionMask = 1<<9,
827 Button3MotionMask = 1<<10,
828 Button4MotionMask = 1<<11,
829 Button5MotionMask = 1<<12,
830 ButtonMotionMask = 1<<13,
831 KeymapStateMask = 1<<14,
832 ExposureMask = 1<<15,
833 VisibilityChangeMask = 1<<16,
834 StructureNotifyMask = 1<<17,
835 ResizeRedirectMask = 1<<18,
836 SubstructureNotifyMask = 1<<19,
837 SubstructureRedirectMask= 1<<20,
838 FocusChangeMask = 1<<21,
839 PropertyChangeMask = 1<<22,
840 ColormapChangeMask = 1<<23,
841 OwnerGrabButtonMask = 1<<24
844 internal enum GrabMode {
849 [StructLayout(LayoutKind.Sequential)]
850 internal struct XStandardColormap {
851 internal IntPtr colormap;
852 internal IntPtr red_max;
853 internal IntPtr red_mult;
854 internal IntPtr green_max;
855 internal IntPtr green_mult;
856 internal IntPtr blue_max;
857 internal IntPtr blue_mult;
858 internal IntPtr base_pixel;
859 internal IntPtr visualid;
860 internal IntPtr killid;
863 [StructLayout(LayoutKind.Sequential, Pack=2)]
864 internal struct XColor {
865 internal IntPtr pixel;
867 internal ushort green;
868 internal ushort blue;
897 XA_RESOURCE_MANAGER = 23,
898 XA_RGB_COLOR_MAP = 24,
899 XA_RGB_BEST_MAP = 25,
900 XA_RGB_BLUE_MAP = 26,
901 XA_RGB_DEFAULT_MAP = 27,
902 XA_RGB_GRAY_MAP = 28,
903 XA_RGB_GREEN_MAP = 29,
910 XA_WM_CLIENT_MACHINE = 36,
911 XA_WM_ICON_NAME = 37,
912 XA_WM_ICON_SIZE = 38,
914 XA_WM_NORMAL_HINTS = 40,
915 XA_WM_SIZE_HINTS = 41,
916 XA_WM_ZOOM_HINTS = 42,
921 XA_SUPERSCRIPT_X = 47,
922 XA_SUPERSCRIPT_Y = 48,
925 XA_UNDERLINE_POSITION = 51,
926 XA_UNDERLINE_THICKNESS = 52,
927 XA_STRIKEOUT_ASCENT = 53,
928 XA_STRIKEOUT_DESCENT = 54,
929 XA_ITALIC_ANGLE = 55,
942 XA_WM_TRANSIENT_FOR = 68,
944 XA_LAST_PREDEFINED = 68
947 [StructLayout(LayoutKind.Sequential)]
948 internal struct XScreen {
949 internal IntPtr ext_data;
950 internal IntPtr display;
951 internal IntPtr root;
955 internal int mheight;
956 internal int ndepths;
957 internal IntPtr depths;
958 internal int root_depth;
959 internal IntPtr root_visual;
960 internal IntPtr default_gc;
961 internal IntPtr cmap;
962 internal IntPtr white_pixel;
963 internal IntPtr black_pixel;
964 internal int max_maps;
965 internal int min_maps;
966 internal int backing_store;
967 internal bool save_unders;
968 internal IntPtr root_input_mask;
972 internal enum ChangeWindowFlags {
977 CWBorderWidth = 1<<4,
982 internal enum StackMode {
990 [StructLayout(LayoutKind.Sequential)]
991 internal struct XWindowChanges {
996 internal int border_width;
997 internal IntPtr sibling;
998 internal StackMode stack_mode;
1002 internal enum ColorFlags {
1008 internal enum NotifyMode {
1014 internal enum NotifyDetail {
1018 NotifyNonlinear = 3,
1019 NotifyNonlinearVirtual = 4,
1021 NotifyPointerRoot = 6,
1022 NotifyDetailNone = 7
1025 [StructLayout(LayoutKind.Sequential)]
1026 internal struct MotifWmHints {
1027 internal IntPtr flags;
1028 internal IntPtr functions;
1029 internal IntPtr decorations;
1030 internal IntPtr input_mode;
1031 internal IntPtr status;
1033 public override string ToString ()
1035 return string.Format("MotifWmHints <flags={0}, functions={1}, decorations={2}, input_mode={3}, status={4}", (MotifFlags) flags.ToInt32 (), (MotifFunctions) functions.ToInt32 (), (MotifDecorations) decorations.ToInt32 (), (MotifInputMode) input_mode.ToInt32 (), status.ToInt32 ());
1040 internal enum MotifFlags {
1048 internal enum MotifFunctions {
1058 internal enum MotifDecorations {
1070 internal enum MotifInputMode {
1072 ApplicationModal = 1,
1074 FullApplicationModal = 3
1078 internal enum KeyMasks {
1079 ShiftMask = (1 << 0),
1080 LockMask = (1 << 1),
1081 ControlMask = (1 << 2),
1082 Mod1Mask = (1 << 3),
1083 Mod2Mask = (1 << 4),
1084 Mod3Mask = (1 << 5),
1085 Mod4Mask = (1 << 6),
1086 Mod5Mask = (1 << 7),
1088 ModMasks = Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask
1092 internal enum MouseKeyMasks {
1093 Button1Mask = (1 << 8),
1094 Button2Mask = (1 << 9),
1095 Button3Mask = (1 << 10),
1096 Button4Mask = (1 << 11),
1097 Button5Mask = (1 << 12),
1100 [StructLayout (LayoutKind.Sequential)]
1101 internal struct XModifierKeymap {
1102 public int max_keypermod;
1103 public IntPtr modifiermap;
1106 internal enum PropertyMode {
1112 [StructLayout (LayoutKind.Sequential)]
1113 internal struct XKeyBoardState {
1114 public int key_click_percent;
1115 public int bell_percent;
1116 public uint bell_pitch, bell_duration;
1117 public IntPtr led_mask;
1118 public int global_auto_repeat;
1119 public AutoRepeats auto_repeats;
1121 [StructLayout (LayoutKind.Explicit)]
1122 public struct AutoRepeats {
1132 internal enum GCFunction {
1135 GCForeground = 1<<2,
1136 GCBackground = 1<<3,
1145 GCTileStipXOrigin = 1<<12,
1146 GCTileStipYOrigin = 1<<13,
1148 GCSubwindowMode = 1<<15,
1149 GCGraphicsExposures = 1<<16,
1150 GCClipXOrigin = 1<<17,
1151 GCClipYOrigin = 1<<18,
1153 GCDashOffset = 1<<20,
1158 internal enum GCJoinStyle {
1164 internal enum GCLineStyle {
1170 internal enum GCCapStyle {
1177 internal enum GCFillStyle {
1181 FillOpaqueStppled = 3
1184 internal enum GCFillRule {
1189 internal enum GCArcMode {
1194 internal enum GCSubwindowMode {
1196 IncludeInferiors = 1
1199 [StructLayout (LayoutKind.Sequential)]
1200 internal struct XGCValues {
1201 internal GXFunction function;
1202 internal IntPtr plane_mask;
1203 internal IntPtr foreground;
1204 internal IntPtr background;
1205 internal int line_width;
1206 internal GCLineStyle line_style;
1207 internal GCCapStyle cap_style;
1208 internal GCJoinStyle join_style;
1209 internal GCFillStyle fill_style;
1210 internal GCFillRule fill_rule;
1211 internal GCArcMode arc_mode;
1212 internal IntPtr tile;
1213 internal IntPtr stipple;
1214 internal int ts_x_origin;
1215 internal int ts_y_origin;
1216 internal IntPtr font;
1217 internal GCSubwindowMode subwindow_mode;
1218 internal bool graphics_exposures;
1219 internal int clip_x_origin;
1220 internal int clib_y_origin;
1221 internal IntPtr clip_mask;
1222 internal int dash_offset;
1223 internal byte dashes;
1226 internal enum GXFunction {
1227 GXclear = 0x0, /* 0 */
1228 GXand = 0x1, /* src AND dst */
1229 GXandReverse = 0x2, /* src AND NOT dst */
1230 GXcopy = 0x3, /* src */
1231 GXandInverted = 0x4, /* NOT src AND dst */
1232 GXnoop = 0x5, /* dst */
1233 GXxor = 0x6, /* src XOR dst */
1234 GXor = 0x7, /* src OR dst */
1235 GXnor = 0x8, /* NOT src AND NOT dst */
1236 GXequiv = 0x9, /* NOT src XOR dst */
1237 GXinvert = 0xa, /* NOT dst */
1238 GXorReverse = 0xb, /* src OR NOT dst */
1239 GXcopyInverted = 0xc, /* NOT src */
1240 GXorInverted = 0xd, /* NOT src OR dst */
1241 GXnand = 0xe, /* NOT src OR NOT dst */
1245 internal enum NetWindowManagerState {
1251 internal enum RevertTo {
1257 internal enum MapState {
1263 internal enum CursorFontShape {
1266 XC_based_arrow_down = 4,
1267 XC_based_arrow_up = 6,
1270 XC_bottom_left_corner = 12,
1271 XC_bottom_right_corner = 14,
1272 XC_bottom_side = 16,
1281 XC_cross_reverse = 32,
1283 XC_diamond_cross = 36,
1286 XC_double_arrow = 42,
1287 XC_draft_large = 44,
1288 XC_draft_small = 46,
1304 XC_left_button = 74,
1308 XC_middlebutton = 82,
1313 XC_question_arrow = 92,
1318 XC_rightbutton = 100,
1321 XC_sb_down_arrow = 106,
1322 XC_sb_h_double_arrow = 108,
1323 XC_sb_left_arrow = 110,
1324 XC_sb_right_arrow = 112,
1325 XC_sb_up_arrow = 114,
1326 XC_sb_v_double_arrow = 116,
1327 XC_sb_shuttle = 118,
1335 XC_top_left_arrow = 132,
1336 XC_top_left_corner = 134,
1337 XC_top_right_corner = 136,
1350 internal enum SystrayRequest {
1351 SYSTEM_TRAY_REQUEST_DOCK = 0,
1352 SYSTEM_TRAY_BEGIN_MESSAGE = 1,
1353 SYSTEM_TRAY_CANCEL_MESSAGE = 2
1356 internal enum NetWmStateRequest {
1357 _NET_WM_STATE_REMOVE = 0,
1358 _NET_WM_STATE_ADD = 1,
1359 _NET_WM_STATE_TOGGLE = 2
1362 internal enum NetWmMoveResize {
1363 _NET_WM_MOVERESIZE_SIZE_TOPLEFT = 0,
1364 _NET_WM_MOVERESIZE_SIZE_TOP = 1,
1365 _NET_WM_MOVERESIZE_SIZE_TOPRIGHT = 2,
1366 _NET_WM_MOVERESIZE_SIZE_RIGHT = 3,
1367 _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT = 4,
1368 _NET_WM_MOVERESIZE_SIZE_BOTTOM = 5,
1369 _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT = 6,
1370 _NET_WM_MOVERESIZE_SIZE_LEFT = 7,
1371 _NET_WM_MOVERESIZE_MOVE = 8,
1372 _NET_WM_MOVERESIZE_SIZE_KEYBOARD = 9,
1373 _NET_WM_MOVERESIZE_MOVE_KEYBOARD = 10,
1374 _NET_WM_MOVERESIZE_CANCEL = 11
1378 internal enum XSizeHintsFlags {
1379 USPosition = (1 << 0),
1381 PPosition = (1 << 2),
1383 PMinSize = (1 << 4),
1384 PMaxSize = (1 << 5),
1385 PResizeInc = (1 << 6),
1387 PAllHints = (PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect),
1388 PBaseSize = (1 << 8),
1389 PWinGravity = (1 << 9),
1392 [StructLayout(LayoutKind.Sequential)]
1393 internal struct XSizeHints {
1394 internal IntPtr flags;
1398 internal int height;
1399 internal int min_width;
1400 internal int min_height;
1401 internal int max_width;
1402 internal int max_height;
1403 internal int width_inc;
1404 internal int height_inc;
1405 internal int min_aspect_x;
1406 internal int min_aspect_y;
1407 internal int max_aspect_x;
1408 internal int max_aspect_y;
1409 internal int base_width;
1410 internal int base_height;
1411 internal int win_gravity;
1415 internal enum XWMHintsFlags {
1416 InputHint = (1 << 0),
1417 StateHint = (1 << 1),
1418 IconPixmapHint = (1 << 2),
1419 IconWindowHint = (1 << 3),
1420 IconPositionHint = (1 << 4),
1421 IconMaskHint = (1 << 5),
1422 WindowGroupHint = (1 << 6),
1423 AllHints = (InputHint | StateHint | IconPixmapHint | IconWindowHint | IconPositionHint | IconMaskHint | WindowGroupHint)
1426 internal enum XInitialState {
1434 [StructLayout(LayoutKind.Sequential)]
1435 internal struct XWMHints {
1436 internal IntPtr flags;
1437 internal bool input;
1438 internal XInitialState initial_state;
1439 internal IntPtr icon_pixmap;
1440 internal IntPtr icon_window;
1441 internal int icon_x;
1442 internal int icon_y;
1443 internal IntPtr icon_mask;
1444 internal IntPtr window_group;
1447 [StructLayout(LayoutKind.Sequential)]
1448 internal struct XIconSize {
1449 internal int min_width;
1450 internal int min_height;
1451 internal int max_width;
1452 internal int max_height;
1453 internal int width_inc;
1454 internal int height_inc;
1457 internal struct CaretStruct {
1458 internal Timer Timer; // Blink interval
1459 internal IntPtr Hwnd; // Window owning the caret
1460 internal IntPtr Window; // Actual X11 handle of the window
1461 internal int X; // X position of the caret
1462 internal int Y; // Y position of the caret
1463 internal int Width; // Width of the caret; if no image used
1464 internal int Height; // Height of the caret, if no image used
1465 internal bool Visible; // Is caret visible?
1466 internal bool On; // Caret blink display state: On/Off
1467 internal IntPtr gc; // Graphics context
1468 internal bool Paused; // Don't update right now
1471 internal struct HoverStruct {
1472 internal Timer Timer; // for hovering
1473 internal IntPtr Window; // Last window we entered; used to generate WM_MOUSEHOVER (handle is X11 handle)
1474 internal int X; // Last MouseMove X coordinate; used to generate WM_MOUSEHOVER
1475 internal int Y; // Last MouseMove Y coordinate; used to generate WM_MOUSEHOVER
1476 internal Size Size; // Size of the rectangle the mouse has to stay in to generate hover
1477 internal int Interval; // in milliseconds, how long to hold before hover is generated
1478 internal IntPtr Atom; // X Atom
1481 internal struct ClickStruct {
1482 internal IntPtr Hwnd; //
1483 internal Msg Message; //
1484 internal IntPtr wParam; //
1485 internal IntPtr lParam; //
1486 internal long Time; // Last time we received a mouse click
1487 internal bool Pending; // True if we haven't sent the last mouse click
1490 internal struct GrabStruct {
1491 internal bool Confined; // Is the current grab (if any) confined to grab_area?
1492 internal IntPtr Hwnd; // The window that is grabbed
1493 internal Rectangle Area; // The area the current grab is confined to
1496 internal delegate int XErrorHandler(IntPtr DisplayHandle, ref XErrorEvent error_event);
1498 internal enum XRequest : byte {
1500 X_ChangeWindowAttributes = 2,
1501 X_GetWindowAttributes = 3,
1502 X_DestroyWindow = 4,
1503 X_DestroySubwindows = 5,
1504 X_ChangeSaveSet = 6,
1505 X_ReparentWindow = 7,
1507 X_MapSubwindows = 9,
1509 X_UnmapSubwindows = 11,
1510 X_ConfigureWindow = 12,
1511 X_CirculateWindow = 13,
1516 X_ChangeProperty = 18,
1517 X_DeleteProperty = 19,
1519 X_ListProperties = 21,
1520 X_SetSelectionOwner = 22,
1521 X_GetSelectionOwner = 23,
1522 X_ConvertSelection = 24,
1525 X_UngrabPointer = 27,
1527 X_UngrabButton = 29,
1528 X_ChangeActivePointerGrab = 30,
1529 X_GrabKeyboard = 31,
1530 X_UngrabKeyboard = 32,
1535 X_UngrabServer = 37,
1536 X_QueryPointer = 38,
1537 X_GetMotionEvents = 39,
1538 X_TranslateCoords = 40,
1540 X_SetInputFocus = 42,
1541 X_GetInputFocus = 43,
1546 X_QueryTextExtents = 48,
1548 X_ListFontsWithInfo = 50,
1551 X_CreatePixmap = 53,
1557 X_SetClipRectangles = 59,
1565 X_PolyRectangle = 67,
1568 X_PolyFillRectangle = 70,
1576 X_CreateColormap = 78,
1577 X_FreeColormap = 79,
1578 X_CopyColormapAndFree = 80,
1579 X_InstallColormap = 81,
1580 X_UninstallColormap = 82,
1581 X_ListInstalledColormaps = 83,
1583 X_AllocNamedColor = 85,
1584 X_AllocColorCells = 86,
1585 X_AllocColorPlanes = 87,
1588 X_StoreNamedColor = 90,
1591 X_CreateCursor = 93,
1592 X_CreateGlyphCursor = 94,
1594 X_RecolorCursor = 96,
1595 X_QueryBestSize = 97,
1596 X_QueryExtension = 98,
1597 X_ListExtensions = 99,
1598 X_ChangeKeyboardMapping = 100,
1599 X_GetKeyboardMapping = 101,
1600 X_ChangeKeyboardControl = 102,
1601 X_GetKeyboardControl = 103,
1603 X_ChangePointerControl = 105,
1604 X_GetPointerControl = 106,
1605 X_SetScreenSaver = 107,
1606 X_GetScreenSaver = 108,
1607 X_ChangeHosts = 109,
1609 X_SetAccessControl = 111,
1610 X_SetCloseDownMode = 112,
1612 X_RotateProperties = 114,
1613 X_ForceScreenSaver = 115,
1614 X_SetPointerMapping = 116,
1615 X_GetPointerMapping = 117,
1616 X_SetModifierMapping = 118,
1617 X_GetModifierMapping = 119,
1622 internal enum XIMProperties {
1623 XIMPreeditArea = 0x0001,
1624 XIMPreeditCallbacks = 0x0002,
1625 XIMPreeditPosition = 0x0004,
1626 XIMPreeditNothing = 0x0008,
1627 XIMPreeditNone = 0x0010,
1628 XIMStatusArea = 0x0100,
1629 XIMStatusCallbacks = 0x0200,
1630 XIMStatusNothing = 0x0400,
1631 XIMStatusNone = 0x0800,
1635 internal enum WindowType {
1641 internal enum XEmbedMessage {
1644 WindowDeactivate = 2,
1650 /* 8-9 were used for XEMBED_GRAB_KEY/XEMBED_UNGRAB_KEY */
1653 RegisterAccelerator = 12,
1654 UnregisterAccelerator = 13,
1655 ActivateAccelerator = 14
1658 [StructLayout (LayoutKind.Sequential)]
1659 internal struct XcursorImage
1661 private int version;
1662 public int size; /* nominal size for matching */
1663 public int width; /* actual width */
1664 public int height; /* actual height */
1665 public int xhot; /* hot spot x (must be inside image) */
1666 public int yhot; /* hot spot y (must be inside image) */
1667 public int delay; /* hot spot y (must be inside image) */
1668 public IntPtr pixels; /* pointer to pixels */
1670 public override string ToString ()
1672 return string.Format ("XCursorImage (version: {0}, size: {1}, width: {2}, height: {3}, xhot: {4}, yhot: {5}, delay: {6}, pixels: {7}",
1673 version, size, width, height, xhot, yhot, delay, pixels);
1677 [StructLayout (LayoutKind.Sequential)]
1678 internal struct XcursorImages
1680 public int nimage; /* number of images */
1681 public IntPtr images; /* array of XcursorImage pointers */
1684 [StructLayout (LayoutKind.Sequential)]
1685 internal struct XIMStyles
1687 public ushort count_styles;
1688 public IntPtr supported_styles;
1691 [StructLayout (LayoutKind.Sequential)]
1693 internal class XPoint
1699 [StructLayout (LayoutKind.Sequential)]
1701 internal class XIMCallback
1703 public IntPtr client_data;
1704 public XIMProc callback;
1708 public XIMCallback (IntPtr clientData, XIMProc proc)
1710 this.client_data = clientData;
1711 this.gch = GCHandle.Alloc (proc);
1712 this.callback = proc;
1721 internal enum XIMFeedback
1731 internal struct XIMFeedbackStruct
1733 public byte FeedbackMask; // one or more of XIMFeedback enum
1736 internal struct XIMText
1738 public ushort Length;
1739 public IntPtr Feedback; // to XIMFeedbackStruct
1740 public bool EncodingIsWChar;
1741 public IntPtr String; // it could be either char* or wchar_t*
1744 internal struct XIMPreeditDrawCallbackStruct
1747 public int ChangeFirst;
1748 public int ChangeLength;
1749 public IntPtr Text; // to XIMText
1752 internal enum XIMCaretDirection
1764 XIMAbsolutePosition,
1768 internal enum XIMCaretStyle
1775 internal struct XIMPreeditCaretCallbackStruct
1777 public int Position;
1778 public XIMCaretDirection Direction;
1779 public XIMCaretStyle Style;
1782 // only PreeditStartCallback requires return value though.
1783 internal delegate int XIMProc (IntPtr xim, IntPtr clientData, IntPtr callData);
1785 internal static class XNames
1787 public const string XNVaNestedList = "XNVaNestedList";
1788 public const string XNQueryInputStyle = "queryInputStyle";
1789 public const string XNClientWindow = "clientWindow";
1790 public const string XNInputStyle = "inputStyle";
1791 public const string XNFocusWindow = "focusWindow";
1793 // XIMPreeditCallbacks delegate names.
1794 public const string XNPreeditStartCallback = "preeditStartCallback";
1795 public const string XNPreeditDoneCallback = "preeditDoneCallback";
1796 public const string XNPreeditDrawCallback = "preeditDrawCallback";
1797 public const string XNPreeditCaretCallback = "preeditCaretCallback";
1798 public const string XNPreeditStateNotifyCallback = "preeditStateNotifyCallback";
1799 public const string XNPreeditAttributes = "preeditAttributes";
1800 // XIMStatusCallbacks delegate names.
1801 public const string XNStatusStartCallback = "statusStartCallback";
1802 public const string XNStatusDoneCallback = "statusDoneCallback";
1803 public const string XNStatusDrawCallback = "statusDrawCallback";
1804 public const string XNStatusAttributes = "statusAttributes";
1806 public const string XNArea = "area";
1807 public const string XNAreaNeeded = "areaNeeded";
1808 public const string XNSpotLocation = "spotLocation";
1809 public const string XNFontSet = "fontSet";