1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module gtkc.gdktypes;
26 
27 public import gtkc.glibtypes;
28 public import gtkc.gobjecttypes;
29 public import gtkc.giotypes;
30 public import gtkc.pangotypes;
31 public import gtkc.gdkpixbuftypes;
32 
33 /**
34  * Used to represent native events (XEvents for the X11
35  * backend, MSGs for Win32).
36  */
37 public alias void* GdkXEvent;
38 
39 /**
40  * An enumeration describing the way in which a device
41  * axis (valuator) maps onto the predefined valuator
42  * types that GTK+ understands.
43  */
44 public enum GdkAxisUse
45 {
46 	/**
47 	 * the axis is ignored.
48 	 */
49 	IGNORE = 0,
50 	/**
51 	 * the axis is used as the x axis.
52 	 */
53 	X = 1,
54 	/**
55 	 * the axis is used as the y axis.
56 	 */
57 	Y = 2,
58 	/**
59 	 * the axis is used for pressure information.
60 	 */
61 	PRESSURE = 3,
62 	/**
63 	 * the axis is used for x tilt information.
64 	 */
65 	XTILT = 4,
66 	/**
67 	 * the axis is used for y tilt information.
68 	 */
69 	YTILT = 5,
70 	/**
71 	 * the axis is used for wheel information.
72 	 */
73 	WHEEL = 6,
74 	/**
75 	 * a constant equal to the numerically highest axis value.
76 	 */
77 	LAST = 7,
78 }
79 alias GdkAxisUse AxisUse;
80 
81 /**
82  * A set of values describing the possible byte-orders
83  * for storing pixel values in memory.
84  */
85 public enum GdkByteOrder
86 {
87 	/**
88 	 * The values are stored with the least-significant byte
89 	 * first. For instance, the 32-bit value 0xffeecc would be stored
90 	 * in memory as 0xcc, 0xee, 0xff, 0x00.
91 	 */
92 	LSB_FIRST = 0,
93 	/**
94 	 * The values are stored with the most-significant byte
95 	 * first. For instance, the 32-bit value 0xffeecc would be stored
96 	 * in memory as 0x00, 0xff, 0xee, 0xcc.
97 	 */
98 	MSB_FIRST = 1,
99 }
100 alias GdkByteOrder ByteOrder;
101 
102 /**
103  * Specifies the crossing mode for #GdkEventCrossing.
104  */
105 public enum GdkCrossingMode
106 {
107 	/**
108 	 * crossing because of pointer motion.
109 	 */
110 	NORMAL = 0,
111 	/**
112 	 * crossing because a grab is activated.
113 	 */
114 	GRAB = 1,
115 	/**
116 	 * crossing because a grab is deactivated.
117 	 */
118 	UNGRAB = 2,
119 	/**
120 	 * crossing because a GTK+ grab is activated.
121 	 */
122 	GTK_GRAB = 3,
123 	/**
124 	 * crossing because a GTK+ grab is deactivated.
125 	 */
126 	GTK_UNGRAB = 4,
127 	/**
128 	 * crossing because a GTK+ widget changed
129 	 * state (e.g. sensitivity).
130 	 */
131 	STATE_CHANGED = 5,
132 	/**
133 	 * crossing because a touch sequence has begun,
134 	 * this event is synthetic as the pointer might have not left the window.
135 	 */
136 	TOUCH_BEGIN = 6,
137 	/**
138 	 * crossing because a touch sequence has ended,
139 	 * this event is synthetic as the pointer might have not left the window.
140 	 */
141 	TOUCH_END = 7,
142 	/**
143 	 * crossing because of a device switch (i.e.
144 	 * a mouse taking control of the pointer after a touch device), this event
145 	 * is synthetic as the pointer didn’t leave the window.
146 	 */
147 	DEVICE_SWITCH = 8,
148 }
149 alias GdkCrossingMode CrossingMode;
150 
151 /**
152  * Predefined cursors.
153  *
154  * Note that these IDs are directly taken from the X cursor font, and many
155  * of these cursors are either not useful, or are not available on other platforms.
156  *
157  * The recommended way to create cursors is to use gdk_cursor_new_from_name().
158  */
159 public enum GdkCursorType
160 {
161 	/**
162 	 * ![](X_cursor.png)
163 	 */
164 	X_CURSOR = 0,
165 	/**
166 	 * ![](arrow.png)
167 	 */
168 	ARROW = 2,
169 	/**
170 	 * ![](based_arrow_down.png)
171 	 */
172 	BASED_ARROW_DOWN = 4,
173 	/**
174 	 * ![](based_arrow_up.png)
175 	 */
176 	BASED_ARROW_UP = 6,
177 	/**
178 	 * ![](boat.png)
179 	 */
180 	BOAT = 8,
181 	/**
182 	 * ![](bogosity.png)
183 	 */
184 	BOGOSITY = 10,
185 	/**
186 	 * ![](bottom_left_corner.png)
187 	 */
188 	BOTTOM_LEFT_CORNER = 12,
189 	/**
190 	 * ![](bottom_right_corner.png)
191 	 */
192 	BOTTOM_RIGHT_CORNER = 14,
193 	/**
194 	 * ![](bottom_side.png)
195 	 */
196 	BOTTOM_SIDE = 16,
197 	/**
198 	 * ![](bottom_tee.png)
199 	 */
200 	BOTTOM_TEE = 18,
201 	/**
202 	 * ![](box_spiral.png)
203 	 */
204 	BOX_SPIRAL = 20,
205 	/**
206 	 * ![](center_ptr.png)
207 	 */
208 	CENTER_PTR = 22,
209 	/**
210 	 * ![](circle.png)
211 	 */
212 	CIRCLE = 24,
213 	/**
214 	 * ![](clock.png)
215 	 */
216 	CLOCK = 26,
217 	/**
218 	 * ![](coffee_mug.png)
219 	 */
220 	COFFEE_MUG = 28,
221 	/**
222 	 * ![](cross.png)
223 	 */
224 	CROSS = 30,
225 	/**
226 	 * ![](cross_reverse.png)
227 	 */
228 	CROSS_REVERSE = 32,
229 	/**
230 	 * ![](crosshair.png)
231 	 */
232 	CROSSHAIR = 34,
233 	/**
234 	 * ![](diamond_cross.png)
235 	 */
236 	DIAMOND_CROSS = 36,
237 	/**
238 	 * ![](dot.png)
239 	 */
240 	DOT = 38,
241 	/**
242 	 * ![](dotbox.png)
243 	 */
244 	DOTBOX = 40,
245 	/**
246 	 * ![](double_arrow.png)
247 	 */
248 	DOUBLE_ARROW = 42,
249 	/**
250 	 * ![](draft_large.png)
251 	 */
252 	DRAFT_LARGE = 44,
253 	/**
254 	 * ![](draft_small.png)
255 	 */
256 	DRAFT_SMALL = 46,
257 	/**
258 	 * ![](draped_box.png)
259 	 */
260 	DRAPED_BOX = 48,
261 	/**
262 	 * ![](exchange.png)
263 	 */
264 	EXCHANGE = 50,
265 	/**
266 	 * ![](fleur.png)
267 	 */
268 	FLEUR = 52,
269 	/**
270 	 * ![](gobbler.png)
271 	 */
272 	GOBBLER = 54,
273 	/**
274 	 * ![](gumby.png)
275 	 */
276 	GUMBY = 56,
277 	/**
278 	 * ![](hand1.png)
279 	 */
280 	HAND1 = 58,
281 	/**
282 	 * ![](hand2.png)
283 	 */
284 	HAND2 = 60,
285 	/**
286 	 * ![](heart.png)
287 	 */
288 	HEART = 62,
289 	/**
290 	 * ![](icon.png)
291 	 */
292 	ICON = 64,
293 	/**
294 	 * ![](iron_cross.png)
295 	 */
296 	IRON_CROSS = 66,
297 	/**
298 	 * ![](left_ptr.png)
299 	 */
300 	LEFT_PTR = 68,
301 	/**
302 	 * ![](left_side.png)
303 	 */
304 	LEFT_SIDE = 70,
305 	/**
306 	 * ![](left_tee.png)
307 	 */
308 	LEFT_TEE = 72,
309 	/**
310 	 * ![](leftbutton.png)
311 	 */
312 	LEFTBUTTON = 74,
313 	/**
314 	 * ![](ll_angle.png)
315 	 */
316 	LL_ANGLE = 76,
317 	/**
318 	 * ![](lr_angle.png)
319 	 */
320 	LR_ANGLE = 78,
321 	/**
322 	 * ![](man.png)
323 	 */
324 	MAN = 80,
325 	/**
326 	 * ![](middlebutton.png)
327 	 */
328 	MIDDLEBUTTON = 82,
329 	/**
330 	 * ![](mouse.png)
331 	 */
332 	MOUSE = 84,
333 	/**
334 	 * ![](pencil.png)
335 	 */
336 	PENCIL = 86,
337 	/**
338 	 * ![](pirate.png)
339 	 */
340 	PIRATE = 88,
341 	/**
342 	 * ![](plus.png)
343 	 */
344 	PLUS = 90,
345 	/**
346 	 * ![](question_arrow.png)
347 	 */
348 	QUESTION_ARROW = 92,
349 	/**
350 	 * ![](right_ptr.png)
351 	 */
352 	RIGHT_PTR = 94,
353 	/**
354 	 * ![](right_side.png)
355 	 */
356 	RIGHT_SIDE = 96,
357 	/**
358 	 * ![](right_tee.png)
359 	 */
360 	RIGHT_TEE = 98,
361 	/**
362 	 * ![](rightbutton.png)
363 	 */
364 	RIGHTBUTTON = 100,
365 	/**
366 	 * ![](rtl_logo.png)
367 	 */
368 	RTL_LOGO = 102,
369 	/**
370 	 * ![](sailboat.png)
371 	 */
372 	SAILBOAT = 104,
373 	/**
374 	 * ![](sb_down_arrow.png)
375 	 */
376 	SB_DOWN_ARROW = 106,
377 	/**
378 	 * ![](sb_h_double_arrow.png)
379 	 */
380 	SB_H_DOUBLE_ARROW = 108,
381 	/**
382 	 * ![](sb_left_arrow.png)
383 	 */
384 	SB_LEFT_ARROW = 110,
385 	/**
386 	 * ![](sb_right_arrow.png)
387 	 */
388 	SB_RIGHT_ARROW = 112,
389 	/**
390 	 * ![](sb_up_arrow.png)
391 	 */
392 	SB_UP_ARROW = 114,
393 	/**
394 	 * ![](sb_v_double_arrow.png)
395 	 */
396 	SB_V_DOUBLE_ARROW = 116,
397 	/**
398 	 * ![](shuttle.png)
399 	 */
400 	SHUTTLE = 118,
401 	/**
402 	 * ![](sizing.png)
403 	 */
404 	SIZING = 120,
405 	/**
406 	 * ![](spider.png)
407 	 */
408 	SPIDER = 122,
409 	/**
410 	 * ![](spraycan.png)
411 	 */
412 	SPRAYCAN = 124,
413 	/**
414 	 * ![](star.png)
415 	 */
416 	STAR = 126,
417 	/**
418 	 * ![](target.png)
419 	 */
420 	TARGET = 128,
421 	/**
422 	 * ![](tcross.png)
423 	 */
424 	TCROSS = 130,
425 	/**
426 	 * ![](top_left_arrow.png)
427 	 */
428 	TOP_LEFT_ARROW = 132,
429 	/**
430 	 * ![](top_left_corner.png)
431 	 */
432 	TOP_LEFT_CORNER = 134,
433 	/**
434 	 * ![](top_right_corner.png)
435 	 */
436 	TOP_RIGHT_CORNER = 136,
437 	/**
438 	 * ![](top_side.png)
439 	 */
440 	TOP_SIDE = 138,
441 	/**
442 	 * ![](top_tee.png)
443 	 */
444 	TOP_TEE = 140,
445 	/**
446 	 * ![](trek.png)
447 	 */
448 	TREK = 142,
449 	/**
450 	 * ![](ul_angle.png)
451 	 */
452 	UL_ANGLE = 144,
453 	/**
454 	 * ![](umbrella.png)
455 	 */
456 	UMBRELLA = 146,
457 	/**
458 	 * ![](ur_angle.png)
459 	 */
460 	UR_ANGLE = 148,
461 	/**
462 	 * ![](watch.png)
463 	 */
464 	WATCH = 150,
465 	/**
466 	 * ![](xterm.png)
467 	 */
468 	XTERM = 152,
469 	/**
470 	 * last cursor type
471 	 */
472 	LAST_CURSOR = 153,
473 	/**
474 	 * Blank cursor. Since 2.16
475 	 */
476 	BLANK_CURSOR = -2,
477 	/**
478 	 * type of cursors constructed with
479 	 * gdk_cursor_new_from_pixbuf()
480 	 */
481 	CURSOR_IS_PIXMAP = -1,
482 }
483 alias GdkCursorType CursorType;
484 
485 /**
486  * Indicates the device type. See [above][GdkDeviceManager.description]
487  * for more information about the meaning of these device types.
488  */
489 public enum GdkDeviceType
490 {
491 	/**
492 	 * Device is a master (or virtual) device. There will
493 	 * be an associated focus indicator on the screen.
494 	 */
495 	MASTER = 0,
496 	/**
497 	 * Device is a slave (or physical) device.
498 	 */
499 	SLAVE = 1,
500 	/**
501 	 * Device is a physical device, currently not attached to
502 	 * any virtual device.
503 	 */
504 	FLOATING = 2,
505 }
506 alias GdkDeviceType DeviceType;
507 
508 /**
509  * Used in #GdkDragContext to indicate what the destination
510  * should do with the dropped data.
511  */
512 public enum GdkDragAction
513 {
514 	/**
515 	 * Means nothing, and should not be used.
516 	 */
517 	DEFAULT = 1,
518 	/**
519 	 * Copy the data.
520 	 */
521 	COPY = 2,
522 	/**
523 	 * Move the data, i.e. first copy it, then delete
524 	 * it from the source using the DELETE target of the X selection protocol.
525 	 */
526 	MOVE = 4,
527 	/**
528 	 * Add a link to the data. Note that this is only
529 	 * useful if source and destination agree on what it means.
530 	 */
531 	LINK = 8,
532 	/**
533 	 * Special action which tells the source that the
534 	 * destination will do something that the source doesn’t understand.
535 	 */
536 	PRIVATE = 16,
537 	/**
538 	 * Ask the user what to do with the data.
539 	 */
540 	ASK = 32,
541 }
542 alias GdkDragAction DragAction;
543 
544 /**
545  * Used in #GdkDragContext to the reason of a cancelled DND operation.
546  *
547  * Since: 3.20
548  */
549 public enum GdkDragCancelReason
550 {
551 	/**
552 	 * There is no suitable drop target.
553 	 */
554 	NO_TARGET = 0,
555 	/**
556 	 * Drag cancelled by the user
557 	 */
558 	USER_CANCELLED = 1,
559 	/**
560 	 * Unspecified error.
561 	 */
562 	ERROR = 2,
563 }
564 alias GdkDragCancelReason DragCancelReason;
565 
566 /**
567  * Used in #GdkDragContext to indicate the protocol according to
568  * which DND is done.
569  */
570 public enum GdkDragProtocol
571 {
572 	/**
573 	 * no protocol.
574 	 */
575 	NONE = 0,
576 	/**
577 	 * The Motif DND protocol. No longer supported
578 	 */
579 	MOTIF = 1,
580 	/**
581 	 * The Xdnd protocol.
582 	 */
583 	XDND = 2,
584 	/**
585 	 * An extension to the Xdnd protocol for
586 	 * unclaimed root window drops.
587 	 */
588 	ROOTWIN = 3,
589 	/**
590 	 * The simple WM_DROPFILES protocol.
591 	 */
592 	WIN32_DROPFILES = 4,
593 	/**
594 	 * The complex OLE2 DND protocol (not implemented).
595 	 */
596 	OLE2 = 5,
597 	/**
598 	 * Intra-application DND.
599 	 */
600 	LOCAL = 6,
601 	/**
602 	 * Wayland DND protocol.
603 	 */
604 	WAYLAND = 7,
605 }
606 alias GdkDragProtocol DragProtocol;
607 
608 /**
609  * A set of bit-flags to indicate which events a window is to receive.
610  * Most of these masks map onto one or more of the #GdkEventType event types
611  * above.
612  *
613  * See the [input handling overview][chap-input-handling] for details of
614  * [event masks][event-masks] and [event propagation][event-propagation].
615  *
616  * %GDK_POINTER_MOTION_HINT_MASK is deprecated. It is a special mask
617  * to reduce the number of %GDK_MOTION_NOTIFY events received. When using
618  * %GDK_POINTER_MOTION_HINT_MASK, fewer %GDK_MOTION_NOTIFY events will
619  * be sent, some of which are marked as a hint (the is_hint member is
620  * %TRUE). To receive more motion events after a motion hint event,
621  * the application needs to asks for more, by calling
622  * gdk_event_request_motions().
623  *
624  * Since GTK 3.8, motion events are already compressed by default, independent
625  * of this mechanism. This compression can be disabled with
626  * gdk_window_set_event_compression(). See the documentation of that function
627  * for details.
628  *
629  * If %GDK_TOUCH_MASK is enabled, the window will receive touch events
630  * from touch-enabled devices. Those will come as sequences of #GdkEventTouch
631  * with type %GDK_TOUCH_UPDATE, enclosed by two events with
632  * type %GDK_TOUCH_BEGIN and %GDK_TOUCH_END (or %GDK_TOUCH_CANCEL).
633  * gdk_event_get_event_sequence() returns the event sequence for these
634  * events, so different sequences may be distinguished.
635  */
636 public enum GdkEventMask
637 {
638 	/**
639 	 * receive expose events
640 	 */
641 	EXPOSURE_MASK = 2,
642 	/**
643 	 * receive all pointer motion events
644 	 */
645 	POINTER_MOTION_MASK = 4,
646 	/**
647 	 * deprecated. see the explanation above
648 	 */
649 	POINTER_MOTION_HINT_MASK = 8,
650 	/**
651 	 * receive pointer motion events while any button is pressed
652 	 */
653 	BUTTON_MOTION_MASK = 16,
654 	/**
655 	 * receive pointer motion events while 1 button is pressed
656 	 */
657 	BUTTON1_MOTION_MASK = 32,
658 	/**
659 	 * receive pointer motion events while 2 button is pressed
660 	 */
661 	BUTTON2_MOTION_MASK = 64,
662 	/**
663 	 * receive pointer motion events while 3 button is pressed
664 	 */
665 	BUTTON3_MOTION_MASK = 128,
666 	/**
667 	 * receive button press events
668 	 */
669 	BUTTON_PRESS_MASK = 256,
670 	/**
671 	 * receive button release events
672 	 */
673 	BUTTON_RELEASE_MASK = 512,
674 	/**
675 	 * receive key press events
676 	 */
677 	KEY_PRESS_MASK = 1024,
678 	/**
679 	 * receive key release events
680 	 */
681 	KEY_RELEASE_MASK = 2048,
682 	/**
683 	 * receive window enter events
684 	 */
685 	ENTER_NOTIFY_MASK = 4096,
686 	/**
687 	 * receive window leave events
688 	 */
689 	LEAVE_NOTIFY_MASK = 8192,
690 	/**
691 	 * receive focus change events
692 	 */
693 	FOCUS_CHANGE_MASK = 16384,
694 	/**
695 	 * receive events about window configuration change
696 	 */
697 	STRUCTURE_MASK = 32768,
698 	/**
699 	 * receive property change events
700 	 */
701 	PROPERTY_CHANGE_MASK = 65536,
702 	/**
703 	 * receive visibility change events
704 	 */
705 	VISIBILITY_NOTIFY_MASK = 131072,
706 	/**
707 	 * receive proximity in events
708 	 */
709 	PROXIMITY_IN_MASK = 262144,
710 	/**
711 	 * receive proximity out events
712 	 */
713 	PROXIMITY_OUT_MASK = 524288,
714 	/**
715 	 * receive events about window configuration changes of
716 	 * child windows
717 	 */
718 	SUBSTRUCTURE_MASK = 1048576,
719 	/**
720 	 * receive scroll events
721 	 */
722 	SCROLL_MASK = 2097152,
723 	/**
724 	 * receive touch events. Since 3.4
725 	 */
726 	TOUCH_MASK = 4194304,
727 	/**
728 	 * receive smooth scrolling events. Since 3.4
729 	 */
730 	SMOOTH_SCROLL_MASK = 8388608,
731 	/**
732 	 * receive touchpad gesture events. Since 3.18
733 	 */
734 	TOUCHPAD_GESTURE_MASK = 16777216,
735 	/**
736 	 * the combination of all the above event masks.
737 	 */
738 	ALL_EVENTS_MASK = 16777214,
739 }
740 alias GdkEventMask EventMask;
741 
742 /**
743  * Specifies the type of the event.
744  *
745  * Do not confuse these events with the signals that GTK+ widgets emit.
746  * Although many of these events result in corresponding signals being emitted,
747  * the events are often transformed or filtered along the way.
748  *
749  * In some language bindings, the values %GDK_2BUTTON_PRESS and
750  * %GDK_3BUTTON_PRESS would translate into something syntactically
751  * invalid (eg `Gdk.EventType.2ButtonPress`, where a
752  * symbol is not allowed to start with a number). In that case, the
753  * aliases %GDK_DOUBLE_BUTTON_PRESS and %GDK_TRIPLE_BUTTON_PRESS can
754  * be used instead.
755  */
756 public enum GdkEventType
757 {
758 	/**
759 	 * a special code to indicate a null event.
760 	 */
761 	NOTHING = -1,
762 	/**
763 	 * the window manager has requested that the toplevel window be
764 	 * hidden or destroyed, usually when the user clicks on a special icon in the
765 	 * title bar.
766 	 */
767 	DELETE = 0,
768 	/**
769 	 * the window has been destroyed.
770 	 */
771 	DESTROY = 1,
772 	/**
773 	 * all or part of the window has become visible and needs to be
774 	 * redrawn.
775 	 */
776 	EXPOSE = 2,
777 	/**
778 	 * the pointer (usually a mouse) has moved.
779 	 */
780 	MOTION_NOTIFY = 3,
781 	/**
782 	 * a mouse button has been pressed.
783 	 */
784 	BUTTON_PRESS = 4,
785 	/**
786 	 * alias for %GDK_2BUTTON_PRESS, added in 3.6.
787 	 */
788 	DOUBLE_BUTTON_PRESS = 5,
789 	/**
790 	 * alias for %GDK_3BUTTON_PRESS, added in 3.6.
791 	 */
792 	TRIPLE_BUTTON_PRESS = 6,
793 	/**
794 	 * a mouse button has been released.
795 	 */
796 	BUTTON_RELEASE = 7,
797 	/**
798 	 * a key has been pressed.
799 	 */
800 	KEY_PRESS = 8,
801 	/**
802 	 * a key has been released.
803 	 */
804 	KEY_RELEASE = 9,
805 	/**
806 	 * the pointer has entered the window.
807 	 */
808 	ENTER_NOTIFY = 10,
809 	/**
810 	 * the pointer has left the window.
811 	 */
812 	LEAVE_NOTIFY = 11,
813 	/**
814 	 * the keyboard focus has entered or left the window.
815 	 */
816 	FOCUS_CHANGE = 12,
817 	/**
818 	 * the size, position or stacking order of the window has changed.
819 	 * Note that GTK+ discards these events for %GDK_WINDOW_CHILD windows.
820 	 */
821 	CONFIGURE = 13,
822 	/**
823 	 * the window has been mapped.
824 	 */
825 	MAP = 14,
826 	/**
827 	 * the window has been unmapped.
828 	 */
829 	UNMAP = 15,
830 	/**
831 	 * a property on the window has been changed or deleted.
832 	 */
833 	PROPERTY_NOTIFY = 16,
834 	/**
835 	 * the application has lost ownership of a selection.
836 	 */
837 	SELECTION_CLEAR = 17,
838 	/**
839 	 * another application has requested a selection.
840 	 */
841 	SELECTION_REQUEST = 18,
842 	/**
843 	 * a selection has been received.
844 	 */
845 	SELECTION_NOTIFY = 19,
846 	/**
847 	 * an input device has moved into contact with a sensing
848 	 * surface (e.g. a touchscreen or graphics tablet).
849 	 */
850 	PROXIMITY_IN = 20,
851 	/**
852 	 * an input device has moved out of contact with a sensing
853 	 * surface.
854 	 */
855 	PROXIMITY_OUT = 21,
856 	/**
857 	 * the mouse has entered the window while a drag is in progress.
858 	 */
859 	DRAG_ENTER = 22,
860 	/**
861 	 * the mouse has left the window while a drag is in progress.
862 	 */
863 	DRAG_LEAVE = 23,
864 	/**
865 	 * the mouse has moved in the window while a drag is in
866 	 * progress.
867 	 */
868 	DRAG_MOTION = 24,
869 	/**
870 	 * the status of the drag operation initiated by the window
871 	 * has changed.
872 	 */
873 	DRAG_STATUS = 25,
874 	/**
875 	 * a drop operation onto the window has started.
876 	 */
877 	DROP_START = 26,
878 	/**
879 	 * the drop operation initiated by the window has completed.
880 	 */
881 	DROP_FINISHED = 27,
882 	/**
883 	 * a message has been received from another application.
884 	 */
885 	CLIENT_EVENT = 28,
886 	/**
887 	 * the window visibility status has changed.
888 	 */
889 	VISIBILITY_NOTIFY = 29,
890 	/**
891 	 * the scroll wheel was turned
892 	 */
893 	SCROLL = 31,
894 	/**
895 	 * the state of a window has changed. See #GdkWindowState
896 	 * for the possible window states
897 	 */
898 	WINDOW_STATE = 32,
899 	/**
900 	 * a setting has been modified.
901 	 */
902 	SETTING = 33,
903 	/**
904 	 * the owner of a selection has changed. This event type
905 	 * was added in 2.6
906 	 */
907 	OWNER_CHANGE = 34,
908 	/**
909 	 * a pointer or keyboard grab was broken. This event type
910 	 * was added in 2.8.
911 	 */
912 	GRAB_BROKEN = 35,
913 	/**
914 	 * the content of the window has been changed. This event type
915 	 * was added in 2.14.
916 	 */
917 	DAMAGE = 36,
918 	/**
919 	 * A new touch event sequence has just started. This event
920 	 * type was added in 3.4.
921 	 */
922 	TOUCH_BEGIN = 37,
923 	/**
924 	 * A touch event sequence has been updated. This event type
925 	 * was added in 3.4.
926 	 */
927 	TOUCH_UPDATE = 38,
928 	/**
929 	 * A touch event sequence has finished. This event type
930 	 * was added in 3.4.
931 	 */
932 	TOUCH_END = 39,
933 	/**
934 	 * A touch event sequence has been canceled. This event type
935 	 * was added in 3.4.
936 	 */
937 	TOUCH_CANCEL = 40,
938 	/**
939 	 * A touchpad swipe gesture event, the current state
940 	 * is determined by its phase field. This event type was added in 3.18.
941 	 */
942 	TOUCHPAD_SWIPE = 41,
943 	/**
944 	 * A touchpad pinch gesture event, the current state
945 	 * is determined by its phase field. This event type was added in 3.18.
946 	 */
947 	TOUCHPAD_PINCH = 42,
948 	/**
949 	 * marks the end of the GdkEventType enumeration. Added in 2.18
950 	 */
951 	EVENT_LAST = 43,
952 }
953 alias GdkEventType EventType;
954 
955 /**
956  * Specifies the result of applying a #GdkFilterFunc to a native event.
957  */
958 public enum GdkFilterReturn
959 {
960 	/**
961 	 * event not handled, continue processing.
962 	 */
963 	CONTINUE = 0,
964 	/**
965 	 * native event translated into a GDK event and stored
966 	 * in the `event` structure that was passed in.
967 	 */
968 	TRANSLATE = 1,
969 	/**
970 	 * event handled, terminate processing.
971 	 */
972 	REMOVE = 2,
973 }
974 alias GdkFilterReturn FilterReturn;
975 
976 /**
977  * #GdkFrameClockPhase is used to represent the different paint clock
978  * phases that can be requested. The elements of the enumeration
979  * correspond to the signals of #GdkFrameClock.
980  *
981  * Since: 3.8
982  */
983 public enum GdkFrameClockPhase
984 {
985 	/**
986 	 * no phase
987 	 */
988 	NONE = 0,
989 	/**
990 	 * corresponds to GdkFrameClock::flush-events. Should not be handled by applications.
991 	 */
992 	FLUSH_EVENTS = 1,
993 	/**
994 	 * corresponds to GdkFrameClock::before-paint. Should not be handled by applications.
995 	 */
996 	BEFORE_PAINT = 2,
997 	/**
998 	 * corresponds to GdkFrameClock::update.
999 	 */
1000 	UPDATE = 4,
1001 	/**
1002 	 * corresponds to GdkFrameClock::layout.
1003 	 */
1004 	LAYOUT = 8,
1005 	/**
1006 	 * corresponds to GdkFrameClock::paint.
1007 	 */
1008 	PAINT = 16,
1009 	/**
1010 	 * corresponds to GdkFrameClock::resume-events. Should not be handled by applications.
1011 	 */
1012 	RESUME_EVENTS = 32,
1013 	/**
1014 	 * corresponds to GdkFrameClock::after-paint. Should not be handled by applications.
1015 	 */
1016 	AFTER_PAINT = 64,
1017 }
1018 alias GdkFrameClockPhase FrameClockPhase;
1019 
1020 /**
1021  * Indicates which monitor (in a multi-head setup) a window should span over
1022  * when in fullscreen mode.
1023  *
1024  * Since: 3.8
1025  */
1026 public enum GdkFullscreenMode
1027 {
1028 	/**
1029 	 * Fullscreen on current monitor only.
1030 	 */
1031 	CURRENT_MONITOR = 0,
1032 	/**
1033 	 * Span across all monitors when fullscreen.
1034 	 */
1035 	ALL_MONITORS = 1,
1036 }
1037 alias GdkFullscreenMode FullscreenMode;
1038 
1039 /**
1040  * Error enumeration for #GdkGLContext.
1041  *
1042  * Since: 3.16
1043  */
1044 public enum GdkGLError
1045 {
1046 	/**
1047 	 * OpenGL support is not available
1048 	 */
1049 	NOT_AVAILABLE = 0,
1050 	/**
1051 	 * The requested visual format is not supported
1052 	 */
1053 	UNSUPPORTED_FORMAT = 1,
1054 	/**
1055 	 * The requested profile is not supported
1056 	 */
1057 	UNSUPPORTED_PROFILE = 2,
1058 }
1059 alias GdkGLError GLError;
1060 
1061 /**
1062  * Defines how device grabs interact with other devices.
1063  */
1064 public enum GdkGrabOwnership
1065 {
1066 	/**
1067 	 * All other devices’ events are allowed.
1068 	 */
1069 	NONE = 0,
1070 	/**
1071 	 * Other devices’ events are blocked for the grab window.
1072 	 */
1073 	WINDOW = 1,
1074 	/**
1075 	 * Other devices’ events are blocked for the whole application.
1076 	 */
1077 	APPLICATION = 2,
1078 }
1079 alias GdkGrabOwnership GrabOwnership;
1080 
1081 /**
1082  * Returned by gdk_device_grab(), gdk_pointer_grab() and gdk_keyboard_grab() to
1083  * indicate success or the reason for the failure of the grab attempt.
1084  */
1085 public enum GdkGrabStatus
1086 {
1087 	/**
1088 	 * the resource was successfully grabbed.
1089 	 */
1090 	SUCCESS = 0,
1091 	/**
1092 	 * the resource is actively grabbed by another client.
1093 	 */
1094 	ALREADY_GRABBED = 1,
1095 	/**
1096 	 * the resource was grabbed more recently than the
1097 	 * specified time.
1098 	 */
1099 	INVALID_TIME = 2,
1100 	/**
1101 	 * the grab window or the @confine_to window are not
1102 	 * viewable.
1103 	 */
1104 	NOT_VIEWABLE = 3,
1105 	/**
1106 	 * the resource is frozen by an active grab of another client.
1107 	 */
1108 	FROZEN = 4,
1109 	/**
1110 	 * the grab failed for some other reason.
1111 	 */
1112 	FAILED = 5,
1113 }
1114 alias GdkGrabStatus GrabStatus;
1115 
1116 /**
1117  * Defines the reference point of a window and the meaning of coordinates
1118  * passed to gtk_window_move(). See gtk_window_move() and the "implementation
1119  * notes" section of the
1120  * [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
1121  * specification for more details.
1122  */
1123 public enum GdkGravity
1124 {
1125 	/**
1126 	 * the reference point is at the top left corner.
1127 	 */
1128 	NORTH_WEST = 1,
1129 	/**
1130 	 * the reference point is in the middle of the top edge.
1131 	 */
1132 	NORTH = 2,
1133 	/**
1134 	 * the reference point is at the top right corner.
1135 	 */
1136 	NORTH_EAST = 3,
1137 	/**
1138 	 * the reference point is at the middle of the left edge.
1139 	 */
1140 	WEST = 4,
1141 	/**
1142 	 * the reference point is at the center of the window.
1143 	 */
1144 	CENTER = 5,
1145 	/**
1146 	 * the reference point is at the middle of the right edge.
1147 	 */
1148 	EAST = 6,
1149 	/**
1150 	 * the reference point is at the lower left corner.
1151 	 */
1152 	SOUTH_WEST = 7,
1153 	/**
1154 	 * the reference point is at the middle of the lower edge.
1155 	 */
1156 	SOUTH = 8,
1157 	/**
1158 	 * the reference point is at the lower right corner.
1159 	 */
1160 	SOUTH_EAST = 9,
1161 	/**
1162 	 * the reference point is at the top left corner of the
1163 	 * window itself, ignoring window manager decorations.
1164 	 */
1165 	STATIC = 10,
1166 }
1167 alias GdkGravity Gravity;
1168 
1169 /**
1170  * An enumeration that describes the mode of an input device.
1171  */
1172 public enum GdkInputMode
1173 {
1174 	/**
1175 	 * the device is disabled and will not report any events.
1176 	 */
1177 	DISABLED = 0,
1178 	/**
1179 	 * the device is enabled. The device’s coordinate space
1180 	 * maps to the entire screen.
1181 	 */
1182 	SCREEN = 1,
1183 	/**
1184 	 * the device is enabled. The device’s coordinate space
1185 	 * is mapped to a single window. The manner in which this window
1186 	 * is chosen is undefined, but it will typically be the same
1187 	 * way in which the focus window for key events is determined.
1188 	 */
1189 	WINDOW = 2,
1190 }
1191 alias GdkInputMode InputMode;
1192 
1193 /**
1194  * An enumeration describing the type of an input device in general terms.
1195  */
1196 public enum GdkInputSource
1197 {
1198 	/**
1199 	 * the device is a mouse. (This will be reported for the core
1200 	 * pointer, even if it is something else, such as a trackball.)
1201 	 */
1202 	MOUSE = 0,
1203 	/**
1204 	 * the device is a stylus of a graphics tablet or similar device.
1205 	 */
1206 	PEN = 1,
1207 	/**
1208 	 * the device is an eraser. Typically, this would be the other end
1209 	 * of a stylus on a graphics tablet.
1210 	 */
1211 	ERASER = 2,
1212 	/**
1213 	 * the device is a graphics tablet “puck” or similar device.
1214 	 */
1215 	CURSOR = 3,
1216 	/**
1217 	 * the device is a keyboard.
1218 	 */
1219 	KEYBOARD = 4,
1220 	/**
1221 	 * the device is a direct-input touch device, such
1222 	 * as a touchscreen or tablet. This device type has been added in 3.4.
1223 	 */
1224 	TOUCHSCREEN = 5,
1225 	/**
1226 	 * the device is an indirect touch device, such
1227 	 * as a touchpad. This device type has been added in 3.4.
1228 	 */
1229 	TOUCHPAD = 6,
1230 }
1231 alias GdkInputSource InputSource;
1232 
1233 /**
1234  * This enum is used with gdk_keymap_get_modifier_mask()
1235  * in order to determine what modifiers the
1236  * currently used windowing system backend uses for particular
1237  * purposes. For example, on X11/Windows, the Control key is used for
1238  * invoking menu shortcuts (accelerators), whereas on Apple computers
1239  * it’s the Command key (which correspond to %GDK_CONTROL_MASK and
1240  * %GDK_MOD2_MASK, respectively).
1241  *
1242  * Since: 3.4
1243  */
1244 public enum GdkModifierIntent
1245 {
1246 	/**
1247 	 * the primary modifier used to invoke
1248 	 * menu accelerators.
1249 	 */
1250 	PRIMARY_ACCELERATOR = 0,
1251 	/**
1252 	 * the modifier used to invoke context menus.
1253 	 * Note that mouse button 3 always triggers context menus. When this modifier
1254 	 * is not 0, it additionally triggers context menus when used with mouse button 1.
1255 	 */
1256 	CONTEXT_MENU = 1,
1257 	/**
1258 	 * the modifier used to extend selections
1259 	 * using `modifier`-click or `modifier`-cursor-key
1260 	 */
1261 	EXTEND_SELECTION = 2,
1262 	/**
1263 	 * the modifier used to modify selections,
1264 	 * which in most cases means toggling the clicked item into or out of the selection.
1265 	 */
1266 	MODIFY_SELECTION = 3,
1267 	/**
1268 	 * when any of these modifiers is pressed, the
1269 	 * key event cannot produce a symbol directly. This is meant to be used for
1270 	 * input methods, and for use cases like typeahead search.
1271 	 */
1272 	NO_TEXT_INPUT = 4,
1273 	/**
1274 	 * the modifier that switches between keyboard
1275 	 * groups (AltGr on X11/Windows and Option/Alt on OS X).
1276 	 */
1277 	SHIFT_GROUP = 5,
1278 	/**
1279 	 * The set of modifier masks accepted
1280 	 * as modifiers in accelerators. Needed because Command is mapped to MOD2 on
1281 	 * OSX, which is widely used, but on X11 MOD2 is NumLock and using that for a
1282 	 * mod key is problematic at best.
1283 	 * Ref: https://bugzilla.gnome.org/show_bug.cgi?id=736125.
1284 	 */
1285 	DEFAULT_MOD_MASK = 6,
1286 }
1287 alias GdkModifierIntent ModifierIntent;
1288 
1289 /**
1290  * A set of bit-flags to indicate the state of modifier keys and mouse buttons
1291  * in various event types. Typical modifier keys are Shift, Control, Meta,
1292  * Super, Hyper, Alt, Compose, Apple, CapsLock or ShiftLock.
1293  *
1294  * Like the X Window System, GDK supports 8 modifier keys and 5 mouse buttons.
1295  *
1296  * Since 2.10, GDK recognizes which of the Meta, Super or Hyper keys are mapped
1297  * to Mod2 - Mod5, and indicates this by setting %GDK_SUPER_MASK,
1298  * %GDK_HYPER_MASK or %GDK_META_MASK in the state field of key events.
1299  *
1300  * Note that GDK may add internal values to events which include
1301  * reserved values such as %GDK_MODIFIER_RESERVED_13_MASK.  Your code
1302  * should preserve and ignore them.  You can use %GDK_MODIFIER_MASK to
1303  * remove all reserved values.
1304  *
1305  * Also note that the GDK X backend interprets button press events for button
1306  * 4-7 as scroll events, so %GDK_BUTTON4_MASK and %GDK_BUTTON5_MASK will never
1307  * be set.
1308  */
1309 public enum GdkModifierType
1310 {
1311 	/**
1312 	 * the Shift key.
1313 	 */
1314 	SHIFT_MASK = 1,
1315 	/**
1316 	 * a Lock key (depending on the modifier mapping of the
1317 	 * X server this may either be CapsLock or ShiftLock).
1318 	 */
1319 	LOCK_MASK = 2,
1320 	/**
1321 	 * the Control key.
1322 	 */
1323 	CONTROL_MASK = 4,
1324 	/**
1325 	 * the fourth modifier key (it depends on the modifier
1326 	 * mapping of the X server which key is interpreted as this modifier, but
1327 	 * normally it is the Alt key).
1328 	 */
1329 	MOD1_MASK = 8,
1330 	/**
1331 	 * the fifth modifier key (it depends on the modifier
1332 	 * mapping of the X server which key is interpreted as this modifier).
1333 	 */
1334 	MOD2_MASK = 16,
1335 	/**
1336 	 * the sixth modifier key (it depends on the modifier
1337 	 * mapping of the X server which key is interpreted as this modifier).
1338 	 */
1339 	MOD3_MASK = 32,
1340 	/**
1341 	 * the seventh modifier key (it depends on the modifier
1342 	 * mapping of the X server which key is interpreted as this modifier).
1343 	 */
1344 	MOD4_MASK = 64,
1345 	/**
1346 	 * the eighth modifier key (it depends on the modifier
1347 	 * mapping of the X server which key is interpreted as this modifier).
1348 	 */
1349 	MOD5_MASK = 128,
1350 	/**
1351 	 * the first mouse button.
1352 	 */
1353 	BUTTON1_MASK = 256,
1354 	/**
1355 	 * the second mouse button.
1356 	 */
1357 	BUTTON2_MASK = 512,
1358 	/**
1359 	 * the third mouse button.
1360 	 */
1361 	BUTTON3_MASK = 1024,
1362 	/**
1363 	 * the fourth mouse button.
1364 	 */
1365 	BUTTON4_MASK = 2048,
1366 	/**
1367 	 * the fifth mouse button.
1368 	 */
1369 	BUTTON5_MASK = 4096,
1370 	/**
1371 	 * A reserved bit flag; do not use in your own code
1372 	 */
1373 	MODIFIER_RESERVED_13_MASK = 8192,
1374 	/**
1375 	 * A reserved bit flag; do not use in your own code
1376 	 */
1377 	MODIFIER_RESERVED_14_MASK = 16384,
1378 	/**
1379 	 * A reserved bit flag; do not use in your own code
1380 	 */
1381 	MODIFIER_RESERVED_15_MASK = 32768,
1382 	/**
1383 	 * A reserved bit flag; do not use in your own code
1384 	 */
1385 	MODIFIER_RESERVED_16_MASK = 65536,
1386 	/**
1387 	 * A reserved bit flag; do not use in your own code
1388 	 */
1389 	MODIFIER_RESERVED_17_MASK = 131072,
1390 	/**
1391 	 * A reserved bit flag; do not use in your own code
1392 	 */
1393 	MODIFIER_RESERVED_18_MASK = 262144,
1394 	/**
1395 	 * A reserved bit flag; do not use in your own code
1396 	 */
1397 	MODIFIER_RESERVED_19_MASK = 524288,
1398 	/**
1399 	 * A reserved bit flag; do not use in your own code
1400 	 */
1401 	MODIFIER_RESERVED_20_MASK = 1048576,
1402 	/**
1403 	 * A reserved bit flag; do not use in your own code
1404 	 */
1405 	MODIFIER_RESERVED_21_MASK = 2097152,
1406 	/**
1407 	 * A reserved bit flag; do not use in your own code
1408 	 */
1409 	MODIFIER_RESERVED_22_MASK = 4194304,
1410 	/**
1411 	 * A reserved bit flag; do not use in your own code
1412 	 */
1413 	MODIFIER_RESERVED_23_MASK = 8388608,
1414 	/**
1415 	 * A reserved bit flag; do not use in your own code
1416 	 */
1417 	MODIFIER_RESERVED_24_MASK = 16777216,
1418 	/**
1419 	 * A reserved bit flag; do not use in your own code
1420 	 */
1421 	MODIFIER_RESERVED_25_MASK = 33554432,
1422 	/**
1423 	 * the Super modifier. Since 2.10
1424 	 */
1425 	SUPER_MASK = 67108864,
1426 	/**
1427 	 * the Hyper modifier. Since 2.10
1428 	 */
1429 	HYPER_MASK = 134217728,
1430 	/**
1431 	 * the Meta modifier. Since 2.10
1432 	 */
1433 	META_MASK = 268435456,
1434 	/**
1435 	 * A reserved bit flag; do not use in your own code
1436 	 */
1437 	MODIFIER_RESERVED_29_MASK = 536870912,
1438 	/**
1439 	 * not used in GDK itself. GTK+ uses it to differentiate
1440 	 * between (keyval, modifiers) pairs from key press and release events.
1441 	 */
1442 	RELEASE_MASK = 1073741824,
1443 	/**
1444 	 * a mask covering all modifier types.
1445 	 */
1446 	MODIFIER_MASK = 1543512063,
1447 }
1448 alias GdkModifierType ModifierType;
1449 
1450 /**
1451  * Specifies the kind of crossing for #GdkEventCrossing.
1452  *
1453  * See the X11 protocol specification of LeaveNotify for
1454  * full details of crossing event generation.
1455  */
1456 public enum GdkNotifyType
1457 {
1458 	/**
1459 	 * the window is entered from an ancestor or
1460 	 * left towards an ancestor.
1461 	 */
1462 	ANCESTOR = 0,
1463 	/**
1464 	 * the pointer moves between an ancestor and an
1465 	 * inferior of the window.
1466 	 */
1467 	VIRTUAL = 1,
1468 	/**
1469 	 * the window is entered from an inferior or
1470 	 * left towards an inferior.
1471 	 */
1472 	INFERIOR = 2,
1473 	/**
1474 	 * the window is entered from or left towards
1475 	 * a window which is neither an ancestor nor an inferior.
1476 	 */
1477 	NONLINEAR = 3,
1478 	/**
1479 	 * the pointer moves between two windows
1480 	 * which are not ancestors of each other and the window is part of
1481 	 * the ancestor chain between one of these windows and their least
1482 	 * common ancestor.
1483 	 */
1484 	NONLINEAR_VIRTUAL = 4,
1485 	/**
1486 	 * an unknown type of enter/leave event occurred.
1487 	 */
1488 	UNKNOWN = 5,
1489 }
1490 alias GdkNotifyType NotifyType;
1491 
1492 /**
1493  * Specifies why a selection ownership was changed.
1494  */
1495 public enum GdkOwnerChange
1496 {
1497 	/**
1498 	 * some other app claimed the ownership
1499 	 */
1500 	NEW_OWNER = 0,
1501 	/**
1502 	 * the window was destroyed
1503 	 */
1504 	DESTROY = 1,
1505 	/**
1506 	 * the client was closed
1507 	 */
1508 	CLOSE = 2,
1509 }
1510 alias GdkOwnerChange OwnerChange;
1511 
1512 /**
1513  * Describes how existing data is combined with new data when
1514  * using gdk_property_change().
1515  */
1516 public enum GdkPropMode
1517 {
1518 	/**
1519 	 * the new data replaces the existing data.
1520 	 */
1521 	REPLACE = 0,
1522 	/**
1523 	 * the new data is prepended to the existing data.
1524 	 */
1525 	PREPEND = 1,
1526 	/**
1527 	 * the new data is appended to the existing data.
1528 	 */
1529 	APPEND = 2,
1530 }
1531 alias GdkPropMode PropMode;
1532 
1533 /**
1534  * Specifies the type of a property change for a #GdkEventProperty.
1535  */
1536 public enum GdkPropertyState
1537 {
1538 	/**
1539 	 * the property value was changed.
1540 	 */
1541 	NEW_VALUE = 0,
1542 	/**
1543 	 * the property was deleted.
1544 	 */
1545 	DELETE = 1,
1546 }
1547 alias GdkPropertyState PropertyState;
1548 
1549 /**
1550  * Specifies the direction for #GdkEventScroll.
1551  */
1552 public enum GdkScrollDirection
1553 {
1554 	/**
1555 	 * the window is scrolled up.
1556 	 */
1557 	UP = 0,
1558 	/**
1559 	 * the window is scrolled down.
1560 	 */
1561 	DOWN = 1,
1562 	/**
1563 	 * the window is scrolled to the left.
1564 	 */
1565 	LEFT = 2,
1566 	/**
1567 	 * the window is scrolled to the right.
1568 	 */
1569 	RIGHT = 3,
1570 	/**
1571 	 * the scrolling is determined by the delta values
1572 	 * in #GdkEventScroll. See gdk_event_get_scroll_deltas(). Since: 3.4
1573 	 */
1574 	SMOOTH = 4,
1575 }
1576 alias GdkScrollDirection ScrollDirection;
1577 
1578 /**
1579  * Flags describing the seat capabilities.
1580  *
1581  * Since: 3.20
1582  */
1583 public enum GdkSeatCapabilities
1584 {
1585 	/**
1586 	 * No input capabilities
1587 	 */
1588 	NONE = 0,
1589 	/**
1590 	 * The seat has a pointer (e.g. mouse)
1591 	 */
1592 	POINTER = 1,
1593 	/**
1594 	 * The seat has touchscreen(s) attached
1595 	 */
1596 	TOUCH = 2,
1597 	/**
1598 	 * The seat has drawing tablet(s) attached
1599 	 */
1600 	TABLET_STYLUS = 4,
1601 	/**
1602 	 * The seat has keyboard(s) attached
1603 	 */
1604 	KEYBOARD = 8,
1605 	/**
1606 	 * The union of all pointing capabilities
1607 	 */
1608 	ALL_POINTING = 7,
1609 	/**
1610 	 * The union of all capabilities
1611 	 */
1612 	ALL = 15,
1613 }
1614 alias GdkSeatCapabilities SeatCapabilities;
1615 
1616 /**
1617  * Specifies the kind of modification applied to a setting in a
1618  * #GdkEventSetting.
1619  */
1620 public enum GdkSettingAction
1621 {
1622 	/**
1623 	 * a setting was added.
1624 	 */
1625 	NEW = 0,
1626 	/**
1627 	 * a setting was changed.
1628 	 */
1629 	CHANGED = 1,
1630 	/**
1631 	 * a setting was deleted.
1632 	 */
1633 	DELETED = 2,
1634 }
1635 alias GdkSettingAction SettingAction;
1636 
1637 public enum GdkStatus
1638 {
1639 	OK = 0,
1640 	ERROR = -1,
1641 	ERROR_PARAM = -2,
1642 	ERROR_FILE = -3,
1643 	ERROR_MEM = -4,
1644 }
1645 alias GdkStatus Status;
1646 
1647 /**
1648  * Specifies the current state of a touchpad gesture. All gestures are
1649  * guaranteed to begin with an event with phase %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN,
1650  * followed by 0 or several events with phase %GDK_TOUCHPAD_GESTURE_PHASE_UPDATE.
1651  *
1652  * A finished gesture may have 2 possible outcomes, an event with phase
1653  * %GDK_TOUCHPAD_GESTURE_PHASE_END will be emitted when the gesture is
1654  * considered successful, this should be used as the hint to perform any
1655  * permanent changes.
1656  *
1657  * Cancelled gestures may be so for a variety of reasons, due to hardware
1658  * or the compositor, or due to the gesture recognition layers hinting the
1659  * gesture did not finish resolutely (eg. a 3rd finger being added during
1660  * a pinch gesture). In these cases, the last event will report the phase
1661  * %GDK_TOUCHPAD_GESTURE_PHASE_CANCEL, this should be used as a hint
1662  * to undo any visible/permanent changes that were done throughout the
1663  * progress of the gesture.
1664  *
1665  * See also #GdkEventTouchpadSwipe and #GdkEventTouchpadPinch.
1666  */
1667 public enum GdkTouchpadGesturePhase
1668 {
1669 	/**
1670 	 * The gesture has begun.
1671 	 */
1672 	BEGIN = 0,
1673 	/**
1674 	 * The gesture has been updated.
1675 	 */
1676 	UPDATE = 1,
1677 	/**
1678 	 * The gesture was finished, changes
1679 	 * should be permanently applied.
1680 	 */
1681 	END = 2,
1682 	/**
1683 	 * The gesture was cancelled, all
1684 	 * changes should be undone.
1685 	 */
1686 	CANCEL = 3,
1687 }
1688 alias GdkTouchpadGesturePhase TouchpadGesturePhase;
1689 
1690 /**
1691  * Specifies the visiblity status of a window for a #GdkEventVisibility.
1692  */
1693 public enum GdkVisibilityState
1694 {
1695 	/**
1696 	 * the window is completely visible.
1697 	 */
1698 	UNOBSCURED = 0,
1699 	/**
1700 	 * the window is partially visible.
1701 	 */
1702 	PARTIAL = 1,
1703 	/**
1704 	 * the window is not visible at all.
1705 	 */
1706 	FULLY_OBSCURED = 2,
1707 }
1708 alias GdkVisibilityState VisibilityState;
1709 
1710 /**
1711  * A set of values that describe the manner in which the pixel values
1712  * for a visual are converted into RGB values for display.
1713  */
1714 public enum GdkVisualType
1715 {
1716 	/**
1717 	 * Each pixel value indexes a grayscale value
1718 	 * directly.
1719 	 */
1720 	STATIC_GRAY = 0,
1721 	/**
1722 	 * Each pixel is an index into a color map that
1723 	 * maps pixel values into grayscale values. The color map can be
1724 	 * changed by an application.
1725 	 */
1726 	GRAYSCALE = 1,
1727 	/**
1728 	 * Each pixel value is an index into a predefined,
1729 	 * unmodifiable color map that maps pixel values into RGB values.
1730 	 */
1731 	STATIC_COLOR = 2,
1732 	/**
1733 	 * Each pixel is an index into a color map that
1734 	 * maps pixel values into rgb values. The color map can be changed by
1735 	 * an application.
1736 	 */
1737 	PSEUDO_COLOR = 3,
1738 	/**
1739 	 * Each pixel value directly contains red, green,
1740 	 * and blue components. Use gdk_visual_get_red_pixel_details(), etc,
1741 	 * to obtain information about how the components are assembled into
1742 	 * a pixel value.
1743 	 */
1744 	TRUE_COLOR = 4,
1745 	/**
1746 	 * Each pixel value contains red, green, and blue
1747 	 * components as for %GDK_VISUAL_TRUE_COLOR, but the components are
1748 	 * mapped via a color table into the final output table instead of
1749 	 * being converted directly.
1750 	 */
1751 	DIRECT_COLOR = 5,
1752 }
1753 alias GdkVisualType VisualType;
1754 
1755 /**
1756  * These are hints originally defined by the Motif toolkit.
1757  * The window manager can use them when determining how to decorate
1758  * the window. The hint must be set before mapping the window.
1759  */
1760 public enum GdkWMDecoration
1761 {
1762 	/**
1763 	 * all decorations should be applied.
1764 	 */
1765 	ALL = 1,
1766 	/**
1767 	 * a frame should be drawn around the window.
1768 	 */
1769 	BORDER = 2,
1770 	/**
1771 	 * the frame should have resize handles.
1772 	 */
1773 	RESIZEH = 4,
1774 	/**
1775 	 * a titlebar should be placed above the window.
1776 	 */
1777 	TITLE = 8,
1778 	/**
1779 	 * a button for opening a menu should be included.
1780 	 */
1781 	MENU = 16,
1782 	/**
1783 	 * a minimize button should be included.
1784 	 */
1785 	MINIMIZE = 32,
1786 	/**
1787 	 * a maximize button should be included.
1788 	 */
1789 	MAXIMIZE = 64,
1790 }
1791 alias GdkWMDecoration WMDecoration;
1792 
1793 /**
1794  * These are hints originally defined by the Motif toolkit. The window manager
1795  * can use them when determining the functions to offer for the window. The
1796  * hint must be set before mapping the window.
1797  */
1798 public enum GdkWMFunction
1799 {
1800 	/**
1801 	 * all functions should be offered.
1802 	 */
1803 	ALL = 1,
1804 	/**
1805 	 * the window should be resizable.
1806 	 */
1807 	RESIZE = 2,
1808 	/**
1809 	 * the window should be movable.
1810 	 */
1811 	MOVE = 4,
1812 	/**
1813 	 * the window should be minimizable.
1814 	 */
1815 	MINIMIZE = 8,
1816 	/**
1817 	 * the window should be maximizable.
1818 	 */
1819 	MAXIMIZE = 16,
1820 	/**
1821 	 * the window should be closable.
1822 	 */
1823 	CLOSE = 32,
1824 }
1825 alias GdkWMFunction WMFunction;
1826 
1827 /**
1828  * Used to indicate which fields in the #GdkWindowAttr struct should be honored.
1829  * For example, if you filled in the “cursor” and “x” fields of #GdkWindowAttr,
1830  * pass “@GDK_WA_X | @GDK_WA_CURSOR” to gdk_window_new(). Fields in
1831  * #GdkWindowAttr not covered by a bit in this enum are required; for example,
1832  * the @width/@height, @wclass, and @window_type fields are required, they have
1833  * no corresponding flag in #GdkWindowAttributesType.
1834  */
1835 public enum GdkWindowAttributesType
1836 {
1837 	/**
1838 	 * Honor the title field
1839 	 */
1840 	TITLE = 2,
1841 	/**
1842 	 * Honor the X coordinate field
1843 	 */
1844 	X = 4,
1845 	/**
1846 	 * Honor the Y coordinate field
1847 	 */
1848 	Y = 8,
1849 	/**
1850 	 * Honor the cursor field
1851 	 */
1852 	CURSOR = 16,
1853 	/**
1854 	 * Honor the visual field
1855 	 */
1856 	VISUAL = 32,
1857 	/**
1858 	 * Honor the wmclass_class and wmclass_name fields
1859 	 */
1860 	WMCLASS = 64,
1861 	/**
1862 	 * Honor the override_redirect field
1863 	 */
1864 	NOREDIR = 128,
1865 	/**
1866 	 * Honor the type_hint field
1867 	 */
1868 	TYPE_HINT = 256,
1869 }
1870 alias GdkWindowAttributesType WindowAttributesType;
1871 
1872 /**
1873  * Determines a window edge or corner.
1874  */
1875 public enum GdkWindowEdge
1876 {
1877 	/**
1878 	 * the top left corner.
1879 	 */
1880 	NORTH_WEST = 0,
1881 	/**
1882 	 * the top edge.
1883 	 */
1884 	NORTH = 1,
1885 	/**
1886 	 * the top right corner.
1887 	 */
1888 	NORTH_EAST = 2,
1889 	/**
1890 	 * the left edge.
1891 	 */
1892 	WEST = 3,
1893 	/**
1894 	 * the right edge.
1895 	 */
1896 	EAST = 4,
1897 	/**
1898 	 * the lower left corner.
1899 	 */
1900 	SOUTH_WEST = 5,
1901 	/**
1902 	 * the lower edge.
1903 	 */
1904 	SOUTH = 6,
1905 	/**
1906 	 * the lower right corner.
1907 	 */
1908 	SOUTH_EAST = 7,
1909 }
1910 alias GdkWindowEdge WindowEdge;
1911 
1912 /**
1913  * Used to indicate which fields of a #GdkGeometry struct should be paid
1914  * attention to. Also, the presence/absence of @GDK_HINT_POS,
1915  * @GDK_HINT_USER_POS, and @GDK_HINT_USER_SIZE is significant, though they don't
1916  * directly refer to #GdkGeometry fields. @GDK_HINT_USER_POS will be set
1917  * automatically by #GtkWindow if you call gtk_window_move().
1918  * @GDK_HINT_USER_POS and @GDK_HINT_USER_SIZE should be set if the user
1919  * specified a size/position using a --geometry command-line argument;
1920  * gtk_window_parse_geometry() automatically sets these flags.
1921  */
1922 public enum GdkWindowHints
1923 {
1924 	/**
1925 	 * indicates that the program has positioned the window
1926 	 */
1927 	POS = 1,
1928 	/**
1929 	 * min size fields are set
1930 	 */
1931 	MIN_SIZE = 2,
1932 	/**
1933 	 * max size fields are set
1934 	 */
1935 	MAX_SIZE = 4,
1936 	/**
1937 	 * base size fields are set
1938 	 */
1939 	BASE_SIZE = 8,
1940 	/**
1941 	 * aspect ratio fields are set
1942 	 */
1943 	ASPECT = 16,
1944 	/**
1945 	 * resize increment fields are set
1946 	 */
1947 	RESIZE_INC = 32,
1948 	/**
1949 	 * window gravity field is set
1950 	 */
1951 	WIN_GRAVITY = 64,
1952 	/**
1953 	 * indicates that the window’s position was explicitly set
1954 	 * by the user
1955 	 */
1956 	USER_POS = 128,
1957 	/**
1958 	 * indicates that the window’s size was explicitly set by
1959 	 * the user
1960 	 */
1961 	USER_SIZE = 256,
1962 }
1963 alias GdkWindowHints WindowHints;
1964 
1965 /**
1966  * Specifies the state of a toplevel window.
1967  */
1968 public enum GdkWindowState
1969 {
1970 	/**
1971 	 * the window is not shown.
1972 	 */
1973 	WITHDRAWN = 1,
1974 	/**
1975 	 * the window is minimized.
1976 	 */
1977 	ICONIFIED = 2,
1978 	/**
1979 	 * the window is maximized.
1980 	 */
1981 	MAXIMIZED = 4,
1982 	/**
1983 	 * the window is sticky.
1984 	 */
1985 	STICKY = 8,
1986 	/**
1987 	 * the window is maximized without
1988 	 * decorations.
1989 	 */
1990 	FULLSCREEN = 16,
1991 	/**
1992 	 * the window is kept above other windows.
1993 	 */
1994 	ABOVE = 32,
1995 	/**
1996 	 * the window is kept below other windows.
1997 	 */
1998 	BELOW = 64,
1999 	/**
2000 	 * the window is presented as focused (with active decorations).
2001 	 */
2002 	FOCUSED = 128,
2003 	/**
2004 	 * the window is in a tiled state, Since 3.10
2005 	 */
2006 	TILED = 256,
2007 }
2008 alias GdkWindowState WindowState;
2009 
2010 /**
2011  * Describes the kind of window.
2012  */
2013 public enum GdkWindowType
2014 {
2015 	/**
2016 	 * root window; this window has no parent, covers the entire
2017 	 * screen, and is created by the window system
2018 	 */
2019 	ROOT = 0,
2020 	/**
2021 	 * toplevel window (used to implement #GtkWindow)
2022 	 */
2023 	TOPLEVEL = 1,
2024 	/**
2025 	 * child window (used to implement e.g. #GtkEntry)
2026 	 */
2027 	CHILD = 2,
2028 	/**
2029 	 * override redirect temporary window (used to implement
2030 	 * #GtkMenu)
2031 	 */
2032 	TEMP = 3,
2033 	/**
2034 	 * foreign window (see gdk_window_foreign_new())
2035 	 */
2036 	FOREIGN = 4,
2037 	/**
2038 	 * offscreen window (see
2039 	 * [Offscreen Windows][OFFSCREEN-WINDOWS]). Since 2.18
2040 	 */
2041 	OFFSCREEN = 5,
2042 	/**
2043 	 * subsurface-based window; This window is visually
2044 	 * tied to a toplevel, and is moved/stacked with it. Currently this window
2045 	 * type is only implemented in Wayland. Since 3.14
2046 	 */
2047 	SUBSURFACE = 6,
2048 }
2049 alias GdkWindowType WindowType;
2050 
2051 /**
2052  * These are hints for the window manager that indicate what type of function
2053  * the window has. The window manager can use this when determining decoration
2054  * and behaviour of the window. The hint must be set before mapping the window.
2055  *
2056  * See the [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
2057  * specification for more details about window types.
2058  */
2059 public enum GdkWindowTypeHint
2060 {
2061 	/**
2062 	 * Normal toplevel window.
2063 	 */
2064 	NORMAL = 0,
2065 	/**
2066 	 * Dialog window.
2067 	 */
2068 	DIALOG = 1,
2069 	/**
2070 	 * Window used to implement a menu; GTK+ uses
2071 	 * this hint only for torn-off menus, see #GtkTearoffMenuItem.
2072 	 */
2073 	MENU = 2,
2074 	/**
2075 	 * Window used to implement toolbars.
2076 	 */
2077 	TOOLBAR = 3,
2078 	/**
2079 	 * Window used to display a splash
2080 	 * screen during application startup.
2081 	 */
2082 	SPLASHSCREEN = 4,
2083 	/**
2084 	 * Utility windows which are not detached
2085 	 * toolbars or dialogs.
2086 	 */
2087 	UTILITY = 5,
2088 	/**
2089 	 * Used for creating dock or panel windows.
2090 	 */
2091 	DOCK = 6,
2092 	/**
2093 	 * Used for creating the desktop background
2094 	 * window.
2095 	 */
2096 	DESKTOP = 7,
2097 	/**
2098 	 * A menu that belongs to a menubar.
2099 	 */
2100 	DROPDOWN_MENU = 8,
2101 	/**
2102 	 * A menu that does not belong to a menubar,
2103 	 * e.g. a context menu.
2104 	 */
2105 	POPUP_MENU = 9,
2106 	/**
2107 	 * A tooltip.
2108 	 */
2109 	TOOLTIP = 10,
2110 	/**
2111 	 * A notification - typically a “bubble”
2112 	 * that belongs to a status icon.
2113 	 */
2114 	NOTIFICATION = 11,
2115 	/**
2116 	 * A popup from a combo box.
2117 	 */
2118 	COMBO = 12,
2119 	/**
2120 	 * A window that is used to implement a DND cursor.
2121 	 */
2122 	DND = 13,
2123 }
2124 alias GdkWindowTypeHint WindowTypeHint;
2125 
2126 /**
2127  * @GDK_INPUT_OUTPUT windows are the standard kind of window you might expect.
2128  * Such windows receive events and are also displayed on screen.
2129  * @GDK_INPUT_ONLY windows are invisible; they are usually placed above other
2130  * windows in order to trap or filter the events. You can’t draw on
2131  * @GDK_INPUT_ONLY windows.
2132  */
2133 public enum GdkWindowWindowClass
2134 {
2135 	/**
2136 	 * window for graphics and events
2137 	 */
2138 	INPUT_OUTPUT = 0,
2139 	/**
2140 	 * window for events only
2141 	 */
2142 	INPUT_ONLY = 1,
2143 }
2144 alias GdkWindowWindowClass WindowWindowClass;
2145 
2146 /**
2147  * An opaque type representing a string as an index into a table
2148  * of strings on the X server.
2149  */
2150 alias _GdkAtom* GdkAtom;
2151 public struct _GdkAtom;
2152 
2153 struct GdkAppLaunchContext;
2154 
2155 struct GdkColor
2156 {
2157 	/**
2158 	 * For allocated colors, the pixel value used to
2159 	 * draw this color on the screen. Not used anymore.
2160 	 */
2161 	uint pixel;
2162 	/**
2163 	 * The red component of the color. This is
2164 	 * a value between 0 and 65535, with 65535 indicating
2165 	 * full intensity
2166 	 */
2167 	ushort red;
2168 	/**
2169 	 * The green component of the color
2170 	 */
2171 	ushort green;
2172 	/**
2173 	 * The blue component of the color
2174 	 */
2175 	ushort blue;
2176 }
2177 
2178 struct GdkCursor;
2179 
2180 struct GdkDevice;
2181 
2182 struct GdkDeviceManager;
2183 
2184 struct GdkDisplay;
2185 
2186 struct GdkDisplayManager;
2187 
2188 struct GdkDragContext;
2189 
2190 struct GdkEvent
2191 {
2192 	union
2193 	{
2194 		/**
2195 		 * the #GdkEventType
2196 		 */
2197 		GdkEventType type;
2198 		/**
2199 		 * a #GdkEventAny
2200 		 */
2201 		GdkEventAny any;
2202 		/**
2203 		 * a #GdkEventExpose
2204 		 */
2205 		GdkEventExpose expose;
2206 		/**
2207 		 * a #GdkEventVisibility
2208 		 */
2209 		GdkEventVisibility visibility;
2210 		/**
2211 		 * a #GdkEventMotion
2212 		 */
2213 		GdkEventMotion motion;
2214 		/**
2215 		 * a #GdkEventButton
2216 		 */
2217 		GdkEventButton button;
2218 		/**
2219 		 * a #GdkEventTouch
2220 		 */
2221 		GdkEventTouch touch;
2222 		/**
2223 		 * a #GdkEventScroll
2224 		 */
2225 		GdkEventScroll scroll;
2226 		/**
2227 		 * a #GdkEventKey
2228 		 */
2229 		GdkEventKey key;
2230 		/**
2231 		 * a #GdkEventCrossing
2232 		 */
2233 		GdkEventCrossing crossing;
2234 		/**
2235 		 * a #GdkEventFocus
2236 		 */
2237 		GdkEventFocus focusChange;
2238 		/**
2239 		 * a #GdkEventConfigure
2240 		 */
2241 		GdkEventConfigure configure;
2242 		/**
2243 		 * a #GdkEventProperty
2244 		 */
2245 		GdkEventProperty property;
2246 		/**
2247 		 * a #GdkEventSelection
2248 		 */
2249 		GdkEventSelection selection;
2250 		/**
2251 		 * a #GdkEventOwnerChange
2252 		 */
2253 		GdkEventOwnerChange ownerChange;
2254 		/**
2255 		 * a #GdkEventProximity
2256 		 */
2257 		GdkEventProximity proximity;
2258 		/**
2259 		 * a #GdkEventDND
2260 		 */
2261 		GdkEventDND dnd;
2262 		/**
2263 		 * a #GdkEventWindowState
2264 		 */
2265 		GdkEventWindowState windowState;
2266 		/**
2267 		 * a #GdkEventSetting
2268 		 */
2269 		GdkEventSetting setting;
2270 		/**
2271 		 * a #GdkEventGrabBroken
2272 		 */
2273 		GdkEventGrabBroken grabBroken;
2274 		GdkEventTouchpadSwipe touchpadSwipe;
2275 		GdkEventTouchpadPinch touchpadPinch;
2276 	}
2277 }
2278 
2279 /**
2280  * Contains the fields which are common to all event structs.
2281  * Any event pointer can safely be cast to a pointer to a #GdkEventAny to
2282  * access these fields.
2283  */
2284 struct GdkEventAny
2285 {
2286 	/**
2287 	 * the type of the event.
2288 	 */
2289 	GdkEventType type;
2290 	/**
2291 	 * the window which received the event.
2292 	 */
2293 	GdkWindow* window;
2294 	/**
2295 	 * %TRUE if the event was sent explicitly.
2296 	 */
2297 	byte sendEvent;
2298 }
2299 
2300 /**
2301  * Used for button press and button release events. The
2302  * @type field will be one of %GDK_BUTTON_PRESS,
2303  * %GDK_2BUTTON_PRESS, %GDK_3BUTTON_PRESS or %GDK_BUTTON_RELEASE,
2304  *
2305  * Double and triple-clicks result in a sequence of events being received.
2306  * For double-clicks the order of events will be:
2307  *
2308  * - %GDK_BUTTON_PRESS
2309  * - %GDK_BUTTON_RELEASE
2310  * - %GDK_BUTTON_PRESS
2311  * - %GDK_2BUTTON_PRESS
2312  * - %GDK_BUTTON_RELEASE
2313  *
2314  * Note that the first click is received just like a normal
2315  * button press, while the second click results in a %GDK_2BUTTON_PRESS
2316  * being received just after the %GDK_BUTTON_PRESS.
2317  *
2318  * Triple-clicks are very similar to double-clicks, except that
2319  * %GDK_3BUTTON_PRESS is inserted after the third click. The order of the
2320  * events is:
2321  *
2322  * - %GDK_BUTTON_PRESS
2323  * - %GDK_BUTTON_RELEASE
2324  * - %GDK_BUTTON_PRESS
2325  * - %GDK_2BUTTON_PRESS
2326  * - %GDK_BUTTON_RELEASE
2327  * - %GDK_BUTTON_PRESS
2328  * - %GDK_3BUTTON_PRESS
2329  * - %GDK_BUTTON_RELEASE
2330  *
2331  * For a double click to occur, the second button press must occur within
2332  * 1/4 of a second of the first. For a triple click to occur, the third
2333  * button press must also occur within 1/2 second of the first button press.
2334  */
2335 struct GdkEventButton
2336 {
2337 	/**
2338 	 * the type of the event (%GDK_BUTTON_PRESS, %GDK_2BUTTON_PRESS,
2339 	 * %GDK_3BUTTON_PRESS or %GDK_BUTTON_RELEASE).
2340 	 */
2341 	GdkEventType type;
2342 	/**
2343 	 * the window which received the event.
2344 	 */
2345 	GdkWindow* window;
2346 	/**
2347 	 * %TRUE if the event was sent explicitly.
2348 	 */
2349 	byte sendEvent;
2350 	/**
2351 	 * the time of the event in milliseconds.
2352 	 */
2353 	uint time;
2354 	/**
2355 	 * the x coordinate of the pointer relative to the window.
2356 	 */
2357 	double x;
2358 	/**
2359 	 * the y coordinate of the pointer relative to the window.
2360 	 */
2361 	double y;
2362 	/**
2363 	 * @x, @y translated to the axes of @device, or %NULL if @device is
2364 	 * the mouse.
2365 	 */
2366 	double* axes;
2367 	/**
2368 	 * a bit-mask representing the state of
2369 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
2370 	 * buttons. See #GdkModifierType.
2371 	 */
2372 	ModifierType state;
2373 	/**
2374 	 * the button which was pressed or released, numbered from 1 to 5.
2375 	 * Normally button 1 is the left mouse button, 2 is the middle button,
2376 	 * and 3 is the right button. On 2-button mice, the middle button can
2377 	 * often be simulated by pressing both mouse buttons together.
2378 	 */
2379 	uint button;
2380 	/**
2381 	 * the master device that the event originated from. Use
2382 	 * gdk_event_get_source_device() to get the slave device.
2383 	 */
2384 	GdkDevice* device;
2385 	/**
2386 	 * the x coordinate of the pointer relative to the root of the
2387 	 * screen.
2388 	 */
2389 	double xRoot;
2390 	/**
2391 	 * the y coordinate of the pointer relative to the root of the
2392 	 * screen.
2393 	 */
2394 	double yRoot;
2395 }
2396 
2397 /**
2398  * Generated when a window size or position has changed.
2399  */
2400 struct GdkEventConfigure
2401 {
2402 	/**
2403 	 * the type of the event (%GDK_CONFIGURE).
2404 	 */
2405 	GdkEventType type;
2406 	/**
2407 	 * the window which received the event.
2408 	 */
2409 	GdkWindow* window;
2410 	/**
2411 	 * %TRUE if the event was sent explicitly.
2412 	 */
2413 	byte sendEvent;
2414 	/**
2415 	 * the new x coordinate of the window, relative to its parent.
2416 	 */
2417 	int x;
2418 	/**
2419 	 * the new y coordinate of the window, relative to its parent.
2420 	 */
2421 	int y;
2422 	/**
2423 	 * the new width of the window.
2424 	 */
2425 	int width;
2426 	/**
2427 	 * the new height of the window.
2428 	 */
2429 	int height;
2430 }
2431 
2432 /**
2433  * Generated when the pointer enters or leaves a window.
2434  */
2435 struct GdkEventCrossing
2436 {
2437 	/**
2438 	 * the type of the event (%GDK_ENTER_NOTIFY or %GDK_LEAVE_NOTIFY).
2439 	 */
2440 	GdkEventType type;
2441 	/**
2442 	 * the window which received the event.
2443 	 */
2444 	GdkWindow* window;
2445 	/**
2446 	 * %TRUE if the event was sent explicitly.
2447 	 */
2448 	byte sendEvent;
2449 	/**
2450 	 * the window that was entered or left.
2451 	 */
2452 	GdkWindow* subwindow;
2453 	/**
2454 	 * the time of the event in milliseconds.
2455 	 */
2456 	uint time;
2457 	/**
2458 	 * the x coordinate of the pointer relative to the window.
2459 	 */
2460 	double x;
2461 	/**
2462 	 * the y coordinate of the pointer relative to the window.
2463 	 */
2464 	double y;
2465 	/**
2466 	 * the x coordinate of the pointer relative to the root of the screen.
2467 	 */
2468 	double xRoot;
2469 	/**
2470 	 * the y coordinate of the pointer relative to the root of the screen.
2471 	 */
2472 	double yRoot;
2473 	/**
2474 	 * the crossing mode (%GDK_CROSSING_NORMAL, %GDK_CROSSING_GRAB,
2475 	 * %GDK_CROSSING_UNGRAB, %GDK_CROSSING_GTK_GRAB, %GDK_CROSSING_GTK_UNGRAB or
2476 	 * %GDK_CROSSING_STATE_CHANGED).  %GDK_CROSSING_GTK_GRAB, %GDK_CROSSING_GTK_UNGRAB,
2477 	 * and %GDK_CROSSING_STATE_CHANGED were added in 2.14 and are always synthesized,
2478 	 * never native.
2479 	 */
2480 	GdkCrossingMode mode;
2481 	/**
2482 	 * the kind of crossing that happened (%GDK_NOTIFY_INFERIOR,
2483 	 * %GDK_NOTIFY_ANCESTOR, %GDK_NOTIFY_VIRTUAL, %GDK_NOTIFY_NONLINEAR or
2484 	 * %GDK_NOTIFY_NONLINEAR_VIRTUAL).
2485 	 */
2486 	GdkNotifyType detail;
2487 	/**
2488 	 * %TRUE if @window is the focus window or an inferior.
2489 	 */
2490 	bool focus;
2491 	/**
2492 	 * a bit-mask representing the state of
2493 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
2494 	 * buttons. See #GdkModifierType.
2495 	 */
2496 	ModifierType state;
2497 }
2498 
2499 /**
2500  * Generated during DND operations.
2501  */
2502 struct GdkEventDND
2503 {
2504 	/**
2505 	 * the type of the event (%GDK_DRAG_ENTER, %GDK_DRAG_LEAVE,
2506 	 * %GDK_DRAG_MOTION, %GDK_DRAG_STATUS, %GDK_DROP_START or
2507 	 * %GDK_DROP_FINISHED).
2508 	 */
2509 	GdkEventType type;
2510 	/**
2511 	 * the window which received the event.
2512 	 */
2513 	GdkWindow* window;
2514 	/**
2515 	 * %TRUE if the event was sent explicitly.
2516 	 */
2517 	byte sendEvent;
2518 	/**
2519 	 * the #GdkDragContext for the current DND operation.
2520 	 */
2521 	GdkDragContext* context;
2522 	/**
2523 	 * the time of the event in milliseconds.
2524 	 */
2525 	uint time;
2526 	/**
2527 	 * the x coordinate of the pointer relative to the root of the
2528 	 * screen, only set for %GDK_DRAG_MOTION and %GDK_DROP_START.
2529 	 */
2530 	short xRoot;
2531 	/**
2532 	 * the y coordinate of the pointer relative to the root of the
2533 	 * screen, only set for %GDK_DRAG_MOTION and %GDK_DROP_START.
2534 	 */
2535 	short yRoot;
2536 }
2537 
2538 /**
2539  * Generated when all or part of a window becomes visible and needs to be
2540  * redrawn.
2541  */
2542 struct GdkEventExpose
2543 {
2544 	/**
2545 	 * the type of the event (%GDK_EXPOSE or %GDK_DAMAGE).
2546 	 */
2547 	GdkEventType type;
2548 	/**
2549 	 * the window which received the event.
2550 	 */
2551 	GdkWindow* window;
2552 	/**
2553 	 * %TRUE if the event was sent explicitly.
2554 	 */
2555 	byte sendEvent;
2556 	/**
2557 	 * bounding box of @region.
2558 	 */
2559 	GdkRectangle area;
2560 	/**
2561 	 * the region that needs to be redrawn.
2562 	 */
2563 	cairo_region_t* region;
2564 	/**
2565 	 * the number of contiguous %GDK_EXPOSE events following this one.
2566 	 * The only use for this is “exposure compression”, i.e. handling all
2567 	 * contiguous %GDK_EXPOSE events in one go, though GDK performs some
2568 	 * exposure compression so this is not normally needed.
2569 	 */
2570 	int count;
2571 }
2572 
2573 /**
2574  * Describes a change of keyboard focus.
2575  */
2576 struct GdkEventFocus
2577 {
2578 	/**
2579 	 * the type of the event (%GDK_FOCUS_CHANGE).
2580 	 */
2581 	GdkEventType type;
2582 	/**
2583 	 * the window which received the event.
2584 	 */
2585 	GdkWindow* window;
2586 	/**
2587 	 * %TRUE if the event was sent explicitly.
2588 	 */
2589 	byte sendEvent;
2590 	/**
2591 	 * %TRUE if the window has gained the keyboard focus, %FALSE if
2592 	 * it has lost the focus.
2593 	 */
2594 	short inn;
2595 }
2596 
2597 /**
2598  * Generated when a pointer or keyboard grab is broken. On X11, this happens
2599  * when the grab window becomes unviewable (i.e. it or one of its ancestors
2600  * is unmapped), or if the same application grabs the pointer or keyboard
2601  * again. Note that implicit grabs (which are initiated by button presses)
2602  * can also cause #GdkEventGrabBroken events.
2603  *
2604  * Since: 2.8
2605  */
2606 struct GdkEventGrabBroken
2607 {
2608 	/**
2609 	 * the type of the event (%GDK_GRAB_BROKEN)
2610 	 */
2611 	GdkEventType type;
2612 	/**
2613 	 * the window which received the event, i.e. the window
2614 	 * that previously owned the grab
2615 	 */
2616 	GdkWindow* window;
2617 	/**
2618 	 * %TRUE if the event was sent explicitly.
2619 	 */
2620 	byte sendEvent;
2621 	/**
2622 	 * %TRUE if a keyboard grab was broken, %FALSE if a pointer
2623 	 * grab was broken
2624 	 */
2625 	bool keyboard;
2626 	/**
2627 	 * %TRUE if the broken grab was implicit
2628 	 */
2629 	bool implicit;
2630 	/**
2631 	 * If this event is caused by another grab in the same
2632 	 * application, @grab_window contains the new grab window. Otherwise
2633 	 * @grab_window is %NULL.
2634 	 */
2635 	GdkWindow* grabWindow;
2636 }
2637 
2638 /**
2639  * Describes a key press or key release event.
2640  */
2641 struct GdkEventKey
2642 {
2643 	/**
2644 	 * the type of the event (%GDK_KEY_PRESS or %GDK_KEY_RELEASE).
2645 	 */
2646 	GdkEventType type;
2647 	/**
2648 	 * the window which received the event.
2649 	 */
2650 	GdkWindow* window;
2651 	/**
2652 	 * %TRUE if the event was sent explicitly.
2653 	 */
2654 	byte sendEvent;
2655 	/**
2656 	 * the time of the event in milliseconds.
2657 	 */
2658 	uint time;
2659 	/**
2660 	 * a bit-mask representing the state of
2661 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
2662 	 * buttons. See #GdkModifierType.
2663 	 */
2664 	ModifierType state;
2665 	/**
2666 	 * the key that was pressed or released. See the
2667 	 * `gdk/gdkkeysyms.h` header file for a
2668 	 * complete list of GDK key codes.
2669 	 */
2670 	uint keyval;
2671 	/**
2672 	 * the length of @string.
2673 	 */
2674 	int length;
2675 	/**
2676 	 * a string containing an approximation of the text that
2677 	 * would result from this keypress. The only correct way to handle text
2678 	 * input of text is using input methods (see #GtkIMContext), so this
2679 	 * field is deprecated and should never be used.
2680 	 * (gdk_unicode_to_keyval() provides a non-deprecated way of getting
2681 	 * an approximate translation for a key.) The string is encoded in the
2682 	 * encoding of the current locale (Note: this for backwards compatibility:
2683 	 * strings in GTK+ and GDK are typically in UTF-8.) and NUL-terminated.
2684 	 * In some cases, the translation of the key code will be a single
2685 	 * NUL byte, in which case looking at @length is necessary to distinguish
2686 	 * it from the an empty translation.
2687 	 */
2688 	char* str;
2689 	/**
2690 	 * the raw code of the key that was pressed or released.
2691 	 */
2692 	ushort hardwareKeycode;
2693 	/**
2694 	 * the keyboard group.
2695 	 */
2696 	ubyte group;
2697 	import std.bitmanip: bitfields;
2698 	mixin(bitfields!(
2699 		uint, "isModifier", 1,
2700 		uint, "", 31
2701 	));
2702 }
2703 
2704 /**
2705  * Generated when the pointer moves.
2706  */
2707 struct GdkEventMotion
2708 {
2709 	/**
2710 	 * the type of the event.
2711 	 */
2712 	GdkEventType type;
2713 	/**
2714 	 * the window which received the event.
2715 	 */
2716 	GdkWindow* window;
2717 	/**
2718 	 * %TRUE if the event was sent explicitly.
2719 	 */
2720 	byte sendEvent;
2721 	/**
2722 	 * the time of the event in milliseconds.
2723 	 */
2724 	uint time;
2725 	/**
2726 	 * the x coordinate of the pointer relative to the window.
2727 	 */
2728 	double x;
2729 	/**
2730 	 * the y coordinate of the pointer relative to the window.
2731 	 */
2732 	double y;
2733 	/**
2734 	 * @x, @y translated to the axes of @device, or %NULL if @device is
2735 	 * the mouse.
2736 	 */
2737 	double* axes;
2738 	/**
2739 	 * a bit-mask representing the state of
2740 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
2741 	 * buttons. See #GdkModifierType.
2742 	 */
2743 	ModifierType state;
2744 	/**
2745 	 * set to 1 if this event is just a hint, see the
2746 	 * %GDK_POINTER_MOTION_HINT_MASK value of #GdkEventMask.
2747 	 */
2748 	short isHint;
2749 	/**
2750 	 * the master device that the event originated from. Use
2751 	 * gdk_event_get_source_device() to get the slave device.
2752 	 */
2753 	GdkDevice* device;
2754 	/**
2755 	 * the x coordinate of the pointer relative to the root of the
2756 	 * screen.
2757 	 */
2758 	double xRoot;
2759 	/**
2760 	 * the y coordinate of the pointer relative to the root of the
2761 	 * screen.
2762 	 */
2763 	double yRoot;
2764 }
2765 
2766 /**
2767  * Generated when the owner of a selection changes. On X11, this
2768  * information is only available if the X server supports the XFIXES
2769  * extension.
2770  *
2771  * Since: 2.6
2772  */
2773 struct GdkEventOwnerChange
2774 {
2775 	/**
2776 	 * the type of the event (%GDK_OWNER_CHANGE).
2777 	 */
2778 	GdkEventType type;
2779 	/**
2780 	 * the window which received the event
2781 	 */
2782 	GdkWindow* window;
2783 	/**
2784 	 * %TRUE if the event was sent explicitly.
2785 	 */
2786 	byte sendEvent;
2787 	/**
2788 	 * the new owner of the selection, or %NULL if there is none
2789 	 */
2790 	GdkWindow* owner;
2791 	/**
2792 	 * the reason for the ownership change as a #GdkOwnerChange value
2793 	 */
2794 	GdkOwnerChange reason;
2795 	/**
2796 	 * the atom identifying the selection
2797 	 */
2798 	GdkAtom selection;
2799 	/**
2800 	 * the timestamp of the event
2801 	 */
2802 	uint time;
2803 	/**
2804 	 * the time at which the selection ownership was taken
2805 	 * over
2806 	 */
2807 	uint selectionTime;
2808 }
2809 
2810 /**
2811  * Describes a property change on a window.
2812  */
2813 struct GdkEventProperty
2814 {
2815 	/**
2816 	 * the type of the event (%GDK_PROPERTY_NOTIFY).
2817 	 */
2818 	GdkEventType type;
2819 	/**
2820 	 * the window which received the event.
2821 	 */
2822 	GdkWindow* window;
2823 	/**
2824 	 * %TRUE if the event was sent explicitly.
2825 	 */
2826 	byte sendEvent;
2827 	/**
2828 	 * the property that was changed.
2829 	 */
2830 	GdkAtom atom;
2831 	/**
2832 	 * the time of the event in milliseconds.
2833 	 */
2834 	uint time;
2835 	/**
2836 	 * whether the property was changed
2837 	 * (%GDK_PROPERTY_NEW_VALUE) or deleted (%GDK_PROPERTY_DELETE).
2838 	 */
2839 	PropertyState state;
2840 }
2841 
2842 /**
2843  * Proximity events are generated when using GDK’s wrapper for the
2844  * XInput extension. The XInput extension is an add-on for standard X
2845  * that allows you to use nonstandard devices such as graphics tablets.
2846  * A proximity event indicates that the stylus has moved in or out of
2847  * contact with the tablet, or perhaps that the user’s finger has moved
2848  * in or out of contact with a touch screen.
2849  *
2850  * This event type will be used pretty rarely. It only is important for
2851  * XInput aware programs that are drawing their own cursor.
2852  */
2853 struct GdkEventProximity
2854 {
2855 	/**
2856 	 * the type of the event (%GDK_PROXIMITY_IN or %GDK_PROXIMITY_OUT).
2857 	 */
2858 	GdkEventType type;
2859 	/**
2860 	 * the window which received the event.
2861 	 */
2862 	GdkWindow* window;
2863 	/**
2864 	 * %TRUE if the event was sent explicitly.
2865 	 */
2866 	byte sendEvent;
2867 	/**
2868 	 * the time of the event in milliseconds.
2869 	 */
2870 	uint time;
2871 	/**
2872 	 * the master device that the event originated from. Use
2873 	 * gdk_event_get_source_device() to get the slave device.
2874 	 */
2875 	GdkDevice* device;
2876 }
2877 
2878 /**
2879  * Generated from button presses for the buttons 4 to 7. Wheel mice are
2880  * usually configured to generate button press events for buttons 4 and 5
2881  * when the wheel is turned.
2882  *
2883  * Some GDK backends can also generate “smooth” scroll events, which
2884  * can be recognized by the %GDK_SCROLL_SMOOTH scroll direction. For
2885  * these, the scroll deltas can be obtained with
2886  * gdk_event_get_scroll_deltas().
2887  */
2888 struct GdkEventScroll
2889 {
2890 	/**
2891 	 * the type of the event (%GDK_SCROLL).
2892 	 */
2893 	GdkEventType type;
2894 	/**
2895 	 * the window which received the event.
2896 	 */
2897 	GdkWindow* window;
2898 	/**
2899 	 * %TRUE if the event was sent explicitly.
2900 	 */
2901 	byte sendEvent;
2902 	/**
2903 	 * the time of the event in milliseconds.
2904 	 */
2905 	uint time;
2906 	/**
2907 	 * the x coordinate of the pointer relative to the window.
2908 	 */
2909 	double x;
2910 	/**
2911 	 * the y coordinate of the pointer relative to the window.
2912 	 */
2913 	double y;
2914 	/**
2915 	 * a bit-mask representing the state of
2916 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
2917 	 * buttons. See #GdkModifierType.
2918 	 */
2919 	ModifierType state;
2920 	/**
2921 	 * the direction to scroll to (one of %GDK_SCROLL_UP,
2922 	 * %GDK_SCROLL_DOWN, %GDK_SCROLL_LEFT, %GDK_SCROLL_RIGHT or
2923 	 * %GDK_SCROLL_SMOOTH).
2924 	 */
2925 	GdkScrollDirection direction;
2926 	/**
2927 	 * the master device that the event originated from. Use
2928 	 * gdk_event_get_source_device() to get the slave device.
2929 	 */
2930 	GdkDevice* device;
2931 	/**
2932 	 * the x coordinate of the pointer relative to the root of the
2933 	 * screen.
2934 	 */
2935 	double xRoot;
2936 	/**
2937 	 * the y coordinate of the pointer relative to the root of the
2938 	 * screen.
2939 	 */
2940 	double yRoot;
2941 	/**
2942 	 * the x coordinate of the scroll delta
2943 	 */
2944 	double deltaX;
2945 	/**
2946 	 * the y coordinate of the scroll delta
2947 	 */
2948 	double deltaY;
2949 	import std.bitmanip: bitfields;
2950 	mixin(bitfields!(
2951 		uint, "isStop", 1,
2952 		uint, "", 31
2953 	));
2954 }
2955 
2956 /**
2957  * Generated when a selection is requested or ownership of a selection
2958  * is taken over by another client application.
2959  */
2960 struct GdkEventSelection
2961 {
2962 	/**
2963 	 * the type of the event (%GDK_SELECTION_CLEAR,
2964 	 * %GDK_SELECTION_NOTIFY or %GDK_SELECTION_REQUEST).
2965 	 */
2966 	GdkEventType type;
2967 	/**
2968 	 * the window which received the event.
2969 	 */
2970 	GdkWindow* window;
2971 	/**
2972 	 * %TRUE if the event was sent explicitly.
2973 	 */
2974 	byte sendEvent;
2975 	/**
2976 	 * the selection.
2977 	 */
2978 	GdkAtom selection;
2979 	/**
2980 	 * the target to which the selection should be converted.
2981 	 */
2982 	GdkAtom target;
2983 	/**
2984 	 * the property in which to place the result of the conversion.
2985 	 */
2986 	GdkAtom property;
2987 	/**
2988 	 * the time of the event in milliseconds.
2989 	 */
2990 	uint time;
2991 	/**
2992 	 * the window on which to place @property or %NULL if none.
2993 	 */
2994 	GdkWindow* requestor;
2995 }
2996 
2997 struct GdkEventSequence;
2998 
2999 /**
3000  * Generated when a setting is modified.
3001  */
3002 struct GdkEventSetting
3003 {
3004 	/**
3005 	 * the type of the event (%GDK_SETTING).
3006 	 */
3007 	GdkEventType type;
3008 	/**
3009 	 * the window which received the event.
3010 	 */
3011 	GdkWindow* window;
3012 	/**
3013 	 * %TRUE if the event was sent explicitly.
3014 	 */
3015 	byte sendEvent;
3016 	/**
3017 	 * what happened to the setting (%GDK_SETTING_ACTION_NEW,
3018 	 * %GDK_SETTING_ACTION_CHANGED or %GDK_SETTING_ACTION_DELETED).
3019 	 */
3020 	GdkSettingAction action;
3021 	/**
3022 	 * the name of the setting.
3023 	 */
3024 	char* name;
3025 }
3026 
3027 /**
3028  * Used for touch events.
3029  * @type field will be one of %GDK_TOUCH_BEGIN, %GDK_TOUCH_UPDATE,
3030  * %GDK_TOUCH_END or %GDK_TOUCH_CANCEL.
3031  *
3032  * Touch events are grouped into sequences by means of the @sequence
3033  * field, which can also be obtained with gdk_event_get_event_sequence().
3034  * Each sequence begins with a %GDK_TOUCH_BEGIN event, followed by
3035  * any number of %GDK_TOUCH_UPDATE events, and ends with a %GDK_TOUCH_END
3036  * (or %GDK_TOUCH_CANCEL) event. With multitouch devices, there may be
3037  * several active sequences at the same time.
3038  */
3039 struct GdkEventTouch
3040 {
3041 	/**
3042 	 * the type of the event (%GDK_TOUCH_BEGIN, %GDK_TOUCH_UPDATE,
3043 	 * %GDK_TOUCH_END, %GDK_TOUCH_CANCEL)
3044 	 */
3045 	GdkEventType type;
3046 	/**
3047 	 * the window which received the event
3048 	 */
3049 	GdkWindow* window;
3050 	/**
3051 	 * %TRUE if the event was sent explicitly.
3052 	 */
3053 	byte sendEvent;
3054 	/**
3055 	 * the time of the event in milliseconds.
3056 	 */
3057 	uint time;
3058 	/**
3059 	 * the x coordinate of the pointer relative to the window
3060 	 */
3061 	double x;
3062 	/**
3063 	 * the y coordinate of the pointer relative to the window
3064 	 */
3065 	double y;
3066 	/**
3067 	 * @x, @y translated to the axes of @device, or %NULL if @device is
3068 	 * the mouse
3069 	 */
3070 	double* axes;
3071 	/**
3072 	 * a bit-mask representing the state of
3073 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
3074 	 * buttons. See #GdkModifierType
3075 	 */
3076 	ModifierType state;
3077 	/**
3078 	 * the event sequence that the event belongs to
3079 	 */
3080 	GdkEventSequence* sequence;
3081 	/**
3082 	 * whether the event should be used for emulating
3083 	 * pointer event
3084 	 */
3085 	bool emulatingPointer;
3086 	/**
3087 	 * the master device that the event originated from. Use
3088 	 * gdk_event_get_source_device() to get the slave device.
3089 	 */
3090 	GdkDevice* device;
3091 	/**
3092 	 * the x coordinate of the pointer relative to the root of the
3093 	 * screen
3094 	 */
3095 	double xRoot;
3096 	/**
3097 	 * the y coordinate of the pointer relative to the root of the
3098 	 * screen
3099 	 */
3100 	double yRoot;
3101 }
3102 
3103 /**
3104  * Generated during touchpad swipe gestures.
3105  */
3106 struct GdkEventTouchpadPinch
3107 {
3108 	/**
3109 	 * the type of the event (%GDK_TOUCHPAD_PINCH)
3110 	 */
3111 	GdkEventType type;
3112 	/**
3113 	 * the window which received the event
3114 	 */
3115 	GdkWindow* window;
3116 	/**
3117 	 * %TRUE if the event was sent explicitly
3118 	 */
3119 	byte sendEvent;
3120 	/**
3121 	 * the current phase of the gesture
3122 	 */
3123 	TouchpadGesturePhase phase;
3124 	/**
3125 	 * The number of fingers triggering the pinch
3126 	 */
3127 	byte nFingers;
3128 	/**
3129 	 * the time of the event in milliseconds
3130 	 */
3131 	uint time;
3132 	/**
3133 	 * The X coordinate of the pointer
3134 	 */
3135 	double x;
3136 	/**
3137 	 * The Y coordinate of the pointer
3138 	 */
3139 	double y;
3140 	/**
3141 	 * Movement delta in the X axis of the swipe focal point
3142 	 */
3143 	double dx;
3144 	/**
3145 	 * Movement delta in the Y axis of the swipe focal point
3146 	 */
3147 	double dy;
3148 	/**
3149 	 * The angle change in radians, negative angles
3150 	 * denote counter-clockwise movements
3151 	 */
3152 	double angleDelta;
3153 	/**
3154 	 * The current scale, relative to that at the time of
3155 	 * the corresponding %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN event
3156 	 */
3157 	double scale;
3158 	/**
3159 	 * The X coordinate of the pointer, relative to the
3160 	 * root of the screen.
3161 	 */
3162 	double xRoot;
3163 	/**
3164 	 * The Y coordinate of the pointer, relative to the
3165 	 * root of the screen.
3166 	 */
3167 	double yRoot;
3168 	/**
3169 	 * a bit-mask representing the state of
3170 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
3171 	 * buttons. See #GdkModifierType.
3172 	 */
3173 	ModifierType state;
3174 }
3175 
3176 /**
3177  * Generated during touchpad swipe gestures.
3178  */
3179 struct GdkEventTouchpadSwipe
3180 {
3181 	/**
3182 	 * the type of the event (%GDK_TOUCHPAD_SWIPE)
3183 	 */
3184 	GdkEventType type;
3185 	/**
3186 	 * the window which received the event
3187 	 */
3188 	GdkWindow* window;
3189 	/**
3190 	 * %TRUE if the event was sent explicitly
3191 	 */
3192 	byte sendEvent;
3193 	/**
3194 	 * the current phase of the gesture
3195 	 */
3196 	TouchpadGesturePhase phase;
3197 	/**
3198 	 * The number of fingers triggering the swipe
3199 	 */
3200 	byte nFingers;
3201 	/**
3202 	 * the time of the event in milliseconds
3203 	 */
3204 	uint time;
3205 	/**
3206 	 * The X coordinate of the pointer
3207 	 */
3208 	double x;
3209 	/**
3210 	 * The Y coordinate of the pointer
3211 	 */
3212 	double y;
3213 	/**
3214 	 * Movement delta in the X axis of the swipe focal point
3215 	 */
3216 	double dx;
3217 	/**
3218 	 * Movement delta in the Y axis of the swipe focal point
3219 	 */
3220 	double dy;
3221 	/**
3222 	 * The X coordinate of the pointer, relative to the
3223 	 * root of the screen.
3224 	 */
3225 	double xRoot;
3226 	/**
3227 	 * The Y coordinate of the pointer, relative to the
3228 	 * root of the screen.
3229 	 */
3230 	double yRoot;
3231 	/**
3232 	 * a bit-mask representing the state of
3233 	 * the modifier keys (e.g. Control, Shift and Alt) and the pointer
3234 	 * buttons. See #GdkModifierType.
3235 	 */
3236 	ModifierType state;
3237 }
3238 
3239 /**
3240  * Generated when the window visibility status has changed.
3241  *
3242  * Deprecated: Modern composited windowing systems with pervasive
3243  * transparency make it impossible to track the visibility of a window
3244  * reliably, so this event can not be guaranteed to provide useful
3245  * information.
3246  */
3247 struct GdkEventVisibility
3248 {
3249 	/**
3250 	 * the type of the event (%GDK_VISIBILITY_NOTIFY).
3251 	 */
3252 	GdkEventType type;
3253 	/**
3254 	 * the window which received the event.
3255 	 */
3256 	GdkWindow* window;
3257 	/**
3258 	 * %TRUE if the event was sent explicitly.
3259 	 */
3260 	byte sendEvent;
3261 	/**
3262 	 * the new visibility state (%GDK_VISIBILITY_FULLY_OBSCURED,
3263 	 * %GDK_VISIBILITY_PARTIAL or %GDK_VISIBILITY_UNOBSCURED).
3264 	 */
3265 	GdkVisibilityState state;
3266 }
3267 
3268 /**
3269  * Generated when the state of a toplevel window changes.
3270  */
3271 struct GdkEventWindowState
3272 {
3273 	/**
3274 	 * the type of the event (%GDK_WINDOW_STATE).
3275 	 */
3276 	GdkEventType type;
3277 	/**
3278 	 * the window which received the event.
3279 	 */
3280 	GdkWindow* window;
3281 	/**
3282 	 * %TRUE if the event was sent explicitly.
3283 	 */
3284 	byte sendEvent;
3285 	/**
3286 	 * mask specifying what flags have changed.
3287 	 */
3288 	GdkWindowState changedMask;
3289 	/**
3290 	 * the new window state, a combination of
3291 	 * #GdkWindowState bits.
3292 	 */
3293 	GdkWindowState newWindowState;
3294 }
3295 
3296 struct GdkFrameClock;
3297 
3298 struct GdkFrameClockClass;
3299 
3300 struct GdkFrameClockPrivate;
3301 
3302 struct GdkFrameTimings;
3303 
3304 struct GdkGLContext;
3305 
3306 /**
3307  * The #GdkGeometry struct gives the window manager information about
3308  * a window’s geometry constraints. Normally you would set these on
3309  * the GTK+ level using gtk_window_set_geometry_hints(). #GtkWindow
3310  * then sets the hints on the #GdkWindow it creates.
3311  *
3312  * gdk_window_set_geometry_hints() expects the hints to be fully valid already
3313  * and simply passes them to the window manager; in contrast,
3314  * gtk_window_set_geometry_hints() performs some interpretation. For example,
3315  * #GtkWindow will apply the hints to the geometry widget instead of the
3316  * toplevel window, if you set a geometry widget. Also, the
3317  * @min_width/@min_height/@max_width/@max_height fields may be set to -1, and
3318  * #GtkWindow will substitute the size request of the window or geometry widget.
3319  * If the minimum size hint is not provided, #GtkWindow will use its requisition
3320  * as the minimum size. If the minimum size is provided and a geometry widget is
3321  * set, #GtkWindow will take the minimum size as the minimum size of the
3322  * geometry widget rather than the entire window. The base size is treated
3323  * similarly.
3324  *
3325  * The canonical use-case for gtk_window_set_geometry_hints() is to get a
3326  * terminal widget to resize properly. Here, the terminal text area should be
3327  * the geometry widget; #GtkWindow will then automatically set the base size to
3328  * the size of other widgets in the terminal window, such as the menubar and
3329  * scrollbar. Then, the @width_inc and @height_inc fields should be set to the
3330  * size of one character in the terminal. Finally, the base size should be set
3331  * to the size of one character. The net effect is that the minimum size of the
3332  * terminal will have a 1x1 character terminal area, and only terminal sizes on
3333  * the “character grid” will be allowed.
3334  *
3335  * Here’s an example of how the terminal example would be implemented, assuming
3336  * a terminal area widget called “terminal” and a toplevel window “toplevel”:
3337  *
3338  * |[<!-- language="C" -->
3339  * GdkGeometry hints;
3340  *
3341  * hints.base_width = terminal->char_width;
3342  * hints.base_height = terminal->char_height;
3343  * hints.min_width = terminal->char_width;
3344  * hints.min_height = terminal->char_height;
3345  * hints.width_inc = terminal->char_width;
3346  * hints.height_inc = terminal->char_height;
3347  *
3348  * gtk_window_set_geometry_hints (GTK_WINDOW (toplevel),
3349  * GTK_WIDGET (terminal),
3350  * &hints,
3351  * GDK_HINT_RESIZE_INC |
3352  * GDK_HINT_MIN_SIZE |
3353  * GDK_HINT_BASE_SIZE);
3354  * ]|
3355  *
3356  * The other useful fields are the @min_aspect and @max_aspect fields; these
3357  * contain a width/height ratio as a floating point number. If a geometry widget
3358  * is set, the aspect applies to the geometry widget rather than the entire
3359  * window. The most common use of these hints is probably to set @min_aspect and
3360  * @max_aspect to the same value, thus forcing the window to keep a constant
3361  * aspect ratio.
3362  */
3363 struct GdkGeometry
3364 {
3365 	/**
3366 	 * minimum width of window (or -1 to use requisition, with
3367 	 * #GtkWindow only)
3368 	 */
3369 	int minWidth;
3370 	/**
3371 	 * minimum height of window (or -1 to use requisition, with
3372 	 * #GtkWindow only)
3373 	 */
3374 	int minHeight;
3375 	/**
3376 	 * maximum width of window (or -1 to use requisition, with
3377 	 * #GtkWindow only)
3378 	 */
3379 	int maxWidth;
3380 	/**
3381 	 * maximum height of window (or -1 to use requisition, with
3382 	 * #GtkWindow only)
3383 	 */
3384 	int maxHeight;
3385 	/**
3386 	 * allowed window widths are @base_width + @width_inc * N where N
3387 	 * is any integer (-1 allowed with #GtkWindow)
3388 	 */
3389 	int baseWidth;
3390 	/**
3391 	 * allowed window widths are @base_height + @height_inc * N where
3392 	 * N is any integer (-1 allowed with #GtkWindow)
3393 	 */
3394 	int baseHeight;
3395 	/**
3396 	 * width resize increment
3397 	 */
3398 	int widthInc;
3399 	/**
3400 	 * height resize increment
3401 	 */
3402 	int heightInc;
3403 	/**
3404 	 * minimum width/height ratio
3405 	 */
3406 	double minAspect;
3407 	/**
3408 	 * maximum width/height ratio
3409 	 */
3410 	double maxAspect;
3411 	/**
3412 	 * window gravity, see gtk_window_set_gravity()
3413 	 */
3414 	GdkGravity winGravity;
3415 }
3416 
3417 struct GdkKeymap;
3418 
3419 /**
3420  * A #GdkKeymapKey is a hardware key that can be mapped to a keyval.
3421  */
3422 struct GdkKeymapKey
3423 {
3424 	/**
3425 	 * the hardware keycode. This is an identifying number for a
3426 	 * physical key.
3427 	 */
3428 	uint keycode;
3429 	/**
3430 	 * indicates movement in a horizontal direction. Usually groups are used
3431 	 * for two different languages. In group 0, a key might have two English
3432 	 * characters, and in group 1 it might have two Hebrew characters. The Hebrew
3433 	 * characters will be printed on the key next to the English characters.
3434 	 */
3435 	int group;
3436 	/**
3437 	 * indicates which symbol on the key will be used, in a vertical direction.
3438 	 * So on a standard US keyboard, the key with the number “1” on it also has the
3439 	 * exclamation point ("!") character on it. The level indicates whether to use
3440 	 * the “1” or the “!” symbol. The letter keys are considered to have a lowercase
3441 	 * letter at level 0, and an uppercase letter at level 1, though only the
3442 	 * uppercase letter is printed.
3443 	 */
3444 	int level;
3445 }
3446 
3447 /**
3448  * Defines the x and y coordinates of a point.
3449  */
3450 struct GdkPoint
3451 {
3452 	/**
3453 	 * the x coordinate of the point.
3454 	 */
3455 	int x;
3456 	/**
3457 	 * the y coordinate of the point.
3458 	 */
3459 	int y;
3460 }
3461 
3462 struct GdkRGBA
3463 {
3464 	/**
3465 	 * The intensity of the red channel from 0.0 to 1.0 inclusive
3466 	 */
3467 	double red;
3468 	/**
3469 	 * The intensity of the green channel from 0.0 to 1.0 inclusive
3470 	 */
3471 	double green;
3472 	/**
3473 	 * The intensity of the blue channel from 0.0 to 1.0 inclusive
3474 	 */
3475 	double blue;
3476 	/**
3477 	 * The opacity of the color from 0.0 for completely translucent to
3478 	 * 1.0 for opaque
3479 	 */
3480 	double alpha;
3481 }
3482 
3483 /**
3484  * Defines the position and size of a rectangle. It is identical to
3485  * #cairo_rectangle_int_t.
3486  */
3487 struct GdkRectangle
3488 {
3489 	int x;
3490 	int y;
3491 	int width;
3492 	int height;
3493 }
3494 
3495 struct GdkScreen;
3496 
3497 struct GdkSeat
3498 {
3499 	GObject parentInstance;
3500 }
3501 
3502 /**
3503  * A #GdkTimeCoord stores a single event in a motion history.
3504  */
3505 struct GdkTimeCoord
3506 {
3507 	/**
3508 	 * The timestamp for this event.
3509 	 */
3510 	uint time;
3511 	/**
3512 	 * the values of the device’s axes.
3513 	 */
3514 	double[128] axes;
3515 }
3516 
3517 struct GdkVisual;
3518 
3519 struct GdkWindow;
3520 
3521 /**
3522  * Attributes to use for a newly-created window.
3523  */
3524 struct GdkWindowAttr
3525 {
3526 	/**
3527 	 * title of the window (for toplevel windows)
3528 	 */
3529 	char* title;
3530 	/**
3531 	 * event mask (see gdk_window_set_events())
3532 	 */
3533 	int eventMask;
3534 	/**
3535 	 * X coordinate relative to parent window (see gdk_window_move())
3536 	 */
3537 	int x;
3538 	/**
3539 	 * Y coordinate relative to parent window (see gdk_window_move())
3540 	 */
3541 	int y;
3542 	/**
3543 	 * width of window
3544 	 */
3545 	int width;
3546 	/**
3547 	 * height of window
3548 	 */
3549 	int height;
3550 	/**
3551 	 * #GDK_INPUT_OUTPUT (normal window) or #GDK_INPUT_ONLY (invisible
3552 	 * window that receives events)
3553 	 */
3554 	GdkWindowWindowClass wclass;
3555 	/**
3556 	 * #GdkVisual for window
3557 	 */
3558 	GdkVisual* visual;
3559 	/**
3560 	 * type of window
3561 	 */
3562 	GdkWindowType windowType;
3563 	/**
3564 	 * cursor for the window (see gdk_window_set_cursor())
3565 	 */
3566 	GdkCursor* cursor;
3567 	/**
3568 	 * don’t use (see gtk_window_set_wmclass())
3569 	 */
3570 	char* wmclassName;
3571 	/**
3572 	 * don’t use (see gtk_window_set_wmclass())
3573 	 */
3574 	char* wmclassClass;
3575 	/**
3576 	 * %TRUE to bypass the window manager
3577 	 */
3578 	bool overrideRedirect;
3579 	/**
3580 	 * a hint of the function of the window
3581 	 */
3582 	GdkWindowTypeHint typeHint;
3583 }
3584 
3585 struct GdkWindowClass
3586 {
3587 	GObjectClass parentClass;
3588 	/** */
3589 	extern(C) GdkWindow* function(GdkWindow* window, double x, double y) pickEmbeddedChild;
3590 	/** */
3591 	extern(C) void function(GdkWindow* window, double offscreenX, double offscreenY, double* embedderX, double* embedderY) toEmbedder;
3592 	/** */
3593 	extern(C) void function(GdkWindow* window, double embedderX, double embedderY, double* offscreenX, double* offscreenY) fromEmbedder;
3594 	/** */
3595 	extern(C) cairo_surface_t* function(GdkWindow* window, int width, int height) createSurface;
3596 	/** */
3597 	extern(C) void function() GdkReserved1;
3598 	/** */
3599 	extern(C) void function() GdkReserved2;
3600 	/** */
3601 	extern(C) void function() GdkReserved3;
3602 	/** */
3603 	extern(C) void function() GdkReserved4;
3604 	/** */
3605 	extern(C) void function() GdkReserved5;
3606 	/** */
3607 	extern(C) void function() GdkReserved6;
3608 	/** */
3609 	extern(C) void function() GdkReserved7;
3610 	/** */
3611 	extern(C) void function() GdkReserved8;
3612 }
3613 
3614 struct GdkWindowRedirect;
3615 
3616 struct GdkX11Window;
3617 
3618 struct GdkX11WindowClass;
3619 
3620 /**
3621  * Specifies the type of function passed to gdk_event_handler_set() to
3622  * handle all GDK events.
3623  *
3624  * Params:
3625  *     event = the #GdkEvent to process.
3626  *     data = user data set when the event handler was installed with
3627  *         gdk_event_handler_set().
3628  */
3629 public alias extern(C) void function(GdkEvent* event, void* data) GdkEventFunc;
3630 
3631 /**
3632  * Specifies the type of function used to filter native events before they are
3633  * converted to GDK events.
3634  *
3635  * When a filter is called, @event is unpopulated, except for
3636  * `event->window`. The filter may translate the native
3637  * event to a GDK event and store the result in @event, or handle it without
3638  * translation. If the filter translates the event and processing should
3639  * continue, it should return %GDK_FILTER_TRANSLATE.
3640  *
3641  * Params:
3642  *     xevent = the native event to filter.
3643  *     event = the GDK event to which the X event will be translated.
3644  *     data = user data set when the filter was installed.
3645  *
3646  * Return: a #GdkFilterReturn value.
3647  */
3648 public alias extern(C) GdkFilterReturn function(GdkXEvent* xevent, GdkEvent* event, void* data) GdkFilterFunc;
3649 
3650 /**
3651  * Type of the callback used to set up @window so it can be
3652  * grabbed. A typical action would be ensuring the window is
3653  * visible, although there's room for other initialization
3654  * actions.
3655  *
3656  * Params:
3657  *     seat = the #GdkSeat being grabbed
3658  *     window = the #GdkWindow being grabbed
3659  *     userData = user data passed in gdk_seat_grab()
3660  *
3661  * Since: 3.20
3662  */
3663 public alias extern(C) void function(GdkSeat* seat, GdkWindow* window, void* userData) GdkSeatGrabPrepareFunc;
3664 
3665 /**
3666  * A function of this type is passed to gdk_window_invalidate_maybe_recurse().
3667  * It gets called for each child of the window to determine whether to
3668  * recursively invalidate it or now.
3669  *
3670  * Params:
3671  *     window = a #GdkWindow
3672  *     userData = user data
3673  *
3674  * Return: %TRUE to invalidate @window recursively
3675  */
3676 public alias extern(C) int function(GdkWindow* window, void* userData) GdkWindowChildFunc;
3677 
3678 /**
3679  * Whenever some area of the window is invalidated (directly in the
3680  * window or in a child window) this gets called with @region in
3681  * the coordinate space of @window. You can use @region to just
3682  * keep track of the dirty region, or you can actually change
3683  * @region in case you are doing display tricks like showing
3684  * a child in multiple places.
3685  *
3686  * Params:
3687  *     window = a #GdkWindow
3688  *     region = a #cairo_region_t
3689  *
3690  * Since: 3.10
3691  */
3692 public alias extern(C) void function(GdkWindow* window, cairo_region_t* region) GdkWindowInvalidateHandlerFunc;