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