1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 /*
19  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
20  * file for a list of people on the GTK+ Team.  See the ChangeLog
21  * files for a list of changes.  These files are distributed with
22  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
23  */
24 
25 #ifndef __GDK_TYPES_H__
26 #define __GDK_TYPES_H__
27 
28 #if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
29 #error "Only <gdk/gdk.h> can be included directly."
30 #endif
31 
32 /* GDK uses "glib". (And so does GTK).
33  */
34 #include <glib.h>
35 #include <pango/pango.h>
36 #include <glib-object.h>
37 #include <cairo.h>
38 
39 /* The system specific file gdkconfig.h contains such configuration
40  * settings that are needed not only when compiling GDK (or GTK)
41  * itself, but also occasionally when compiling programs that use GDK
42  * (or GTK). One such setting is what windowing API backend is in use.
43  */
44 #include <gdk/gdkconfig.h>
45 
46 /* some common magic values */
47 
48 /**
49  * GDK_CURRENT_TIME:
50  *
51  * Represents the current time, and can be used anywhere a time is expected.
52  */
53 #define GDK_CURRENT_TIME     0L
54 
55 /**
56  * GDK_PARENT_RELATIVE:
57  *
58  * A special value, indicating that the background
59  * for a window should be inherited from the parent window.
60  */
61 #define GDK_PARENT_RELATIVE  1L
62 
63 
64 
65 G_BEGIN_DECLS
66 
67 
68 /* Type definitions for the basic structures.
69  */
70 typedef struct _GdkPoint              GdkPoint;
71 
72 /**
73  * GdkRectangle:
74  *
75  * Defines the position and size of a rectangle. It is identical to
76  * #cairo_rectangle_int_t.
77  */
78 #ifdef __GI_SCANNER__
79 /* The introspection scanner is currently unable to lookup how
80  * cairo_rectangle_int_t is actually defined. This prevents
81  * introspection data for the GdkRectangle type to include fields
82  * descriptions. To workaround this issue, we define it with the same
83  * content as cairo_rectangle_int_t, but only under the introspection
84  * define.
85  */
86 struct _GdkRectangle
87 {
88     int x, y;
89     int width, height;
90 };
91 typedef struct _GdkRectangle          GdkRectangle;
92 #else
93 typedef cairo_rectangle_int_t         GdkRectangle;
94 #endif
95 
96 /**
97  * GdkAtom:
98  *
99  * An opaque type representing a string as an index into a table
100  * of strings on the X server.
101  */
102 typedef struct _GdkAtom            *GdkAtom;
103 
104 /**
105  * GDK_ATOM_TO_POINTER:
106  * @atom: a #GdkAtom.
107  *
108  * Converts a #GdkAtom into a pointer type.
109  */
110 #define GDK_ATOM_TO_POINTER(atom) (atom)
111 
112 /**
113  * GDK_POINTER_TO_ATOM:
114  * @ptr: a pointer containing a #GdkAtom.
115  *
116  * Extracts a #GdkAtom from a pointer. The #GdkAtom must have been
117  * stored in the pointer with GDK_ATOM_TO_POINTER().
118  */
119 #define GDK_POINTER_TO_ATOM(ptr)  ((GdkAtom)(ptr))
120 
121 #define _GDK_MAKE_ATOM(val) ((GdkAtom)GUINT_TO_POINTER(val))
122 
123 /**
124  * GDK_NONE:
125  *
126  * A null value for #GdkAtom, used in a similar way as
127  * `None` in the Xlib API.
128  */
129 #define GDK_NONE            _GDK_MAKE_ATOM (0)
130 
131 /* Forward declarations of commonly used types */
132 typedef struct _GdkColor              GdkColor;
133 typedef struct _GdkRGBA               GdkRGBA;
134 typedef struct _GdkCursor             GdkCursor;
135 typedef struct _GdkVisual             GdkVisual;
136 typedef struct _GdkDevice             GdkDevice;
137 typedef struct _GdkDragContext        GdkDragContext;
138 
139 typedef struct _GdkDisplayManager     GdkDisplayManager;
140 typedef struct _GdkDeviceManager      GdkDeviceManager;
141 typedef struct _GdkDisplay            GdkDisplay;
142 typedef struct _GdkScreen             GdkScreen;
143 typedef struct _GdkWindow             GdkWindow;
144 typedef struct _GdkKeymap             GdkKeymap;
145 typedef struct _GdkAppLaunchContext   GdkAppLaunchContext;
146 typedef struct _GdkSeat               GdkSeat;
147 
148 typedef struct _GdkGLContext          GdkGLContext;
149 
150 /**
151  * GdkByteOrder:
152  * @GDK_LSB_FIRST: The values are stored with the least-significant byte
153  *   first. For instance, the 32-bit value 0xffeecc would be stored
154  *   in memory as 0xcc, 0xee, 0xff, 0x00.
155  * @GDK_MSB_FIRST: The values are stored with the most-significant byte
156  *   first. For instance, the 32-bit value 0xffeecc would be stored
157  *   in memory as 0x00, 0xff, 0xee, 0xcc.
158  *
159  * A set of values describing the possible byte-orders
160  * for storing pixel values in memory.
161  */
162 typedef enum
163 {
164   GDK_LSB_FIRST,
165   GDK_MSB_FIRST
166 } GdkByteOrder;
167 
168 /* Types of modifiers.
169  */
170 /**
171  * GdkModifierType:
172  * @GDK_SHIFT_MASK: the Shift key.
173  * @GDK_LOCK_MASK: a Lock key (depending on the modifier mapping of the
174  *  X server this may either be CapsLock or ShiftLock).
175  * @GDK_CONTROL_MASK: the Control key.
176  * @GDK_MOD1_MASK: the fourth modifier key (it depends on the modifier
177  *  mapping of the X server which key is interpreted as this modifier, but
178  *  normally it is the Alt key).
179  * @GDK_MOD2_MASK: the fifth modifier key (it depends on the modifier
180  *  mapping of the X server which key is interpreted as this modifier).
181  * @GDK_MOD3_MASK: the sixth modifier key (it depends on the modifier
182  *  mapping of the X server which key is interpreted as this modifier).
183  * @GDK_MOD4_MASK: the seventh modifier key (it depends on the modifier
184  *  mapping of the X server which key is interpreted as this modifier).
185  * @GDK_MOD5_MASK: the eighth modifier key (it depends on the modifier
186  *  mapping of the X server which key is interpreted as this modifier).
187  * @GDK_BUTTON1_MASK: the first mouse button.
188  * @GDK_BUTTON2_MASK: the second mouse button.
189  * @GDK_BUTTON3_MASK: the third mouse button.
190  * @GDK_BUTTON4_MASK: the fourth mouse button.
191  * @GDK_BUTTON5_MASK: the fifth mouse button.
192  * @GDK_MODIFIER_RESERVED_13_MASK: A reserved bit flag; do not use in your own code
193  * @GDK_MODIFIER_RESERVED_14_MASK: A reserved bit flag; do not use in your own code
194  * @GDK_MODIFIER_RESERVED_15_MASK: A reserved bit flag; do not use in your own code
195  * @GDK_MODIFIER_RESERVED_16_MASK: A reserved bit flag; do not use in your own code
196  * @GDK_MODIFIER_RESERVED_17_MASK: A reserved bit flag; do not use in your own code
197  * @GDK_MODIFIER_RESERVED_18_MASK: A reserved bit flag; do not use in your own code
198  * @GDK_MODIFIER_RESERVED_19_MASK: A reserved bit flag; do not use in your own code
199  * @GDK_MODIFIER_RESERVED_20_MASK: A reserved bit flag; do not use in your own code
200  * @GDK_MODIFIER_RESERVED_21_MASK: A reserved bit flag; do not use in your own code
201  * @GDK_MODIFIER_RESERVED_22_MASK: A reserved bit flag; do not use in your own code
202  * @GDK_MODIFIER_RESERVED_23_MASK: A reserved bit flag; do not use in your own code
203  * @GDK_MODIFIER_RESERVED_24_MASK: A reserved bit flag; do not use in your own code
204  * @GDK_MODIFIER_RESERVED_25_MASK: A reserved bit flag; do not use in your own code
205  * @GDK_SUPER_MASK: the Super modifier. Since 2.10
206  * @GDK_HYPER_MASK: the Hyper modifier. Since 2.10
207  * @GDK_META_MASK: the Meta modifier. Since 2.10
208  * @GDK_MODIFIER_RESERVED_29_MASK: A reserved bit flag; do not use in your own code
209  * @GDK_RELEASE_MASK: not used in GDK itself. GTK+ uses it to differentiate
210  *  between (keyval, modifiers) pairs from key press and release events.
211  * @GDK_MODIFIER_MASK: a mask covering all modifier types.
212  *
213  * A set of bit-flags to indicate the state of modifier keys and mouse buttons
214  * in various event types. Typical modifier keys are Shift, Control, Meta,
215  * Super, Hyper, Alt, Compose, Apple, CapsLock or ShiftLock.
216  *
217  * Like the X Window System, GDK supports 8 modifier keys and 5 mouse buttons.
218  *
219  * Since 2.10, GDK recognizes which of the Meta, Super or Hyper keys are mapped
220  * to Mod2 - Mod5, and indicates this by setting %GDK_SUPER_MASK,
221  * %GDK_HYPER_MASK or %GDK_META_MASK in the state field of key events.
222  *
223  * Note that GDK may add internal values to events which include
224  * reserved values such as %GDK_MODIFIER_RESERVED_13_MASK.  Your code
225  * should preserve and ignore them.  You can use %GDK_MODIFIER_MASK to
226  * remove all reserved values.
227  *
228  * Also note that the GDK X backend interprets button press events for button
229  * 4-7 as scroll events, so %GDK_BUTTON4_MASK and %GDK_BUTTON5_MASK will never
230  * be set.
231  */
232 typedef enum
233 {
234   GDK_SHIFT_MASK    = 1 << 0,
235   GDK_LOCK_MASK     = 1 << 1,
236   GDK_CONTROL_MASK  = 1 << 2,
237   GDK_MOD1_MASK     = 1 << 3,
238   GDK_MOD2_MASK     = 1 << 4,
239   GDK_MOD3_MASK     = 1 << 5,
240   GDK_MOD4_MASK     = 1 << 6,
241   GDK_MOD5_MASK     = 1 << 7,
242   GDK_BUTTON1_MASK  = 1 << 8,
243   GDK_BUTTON2_MASK  = 1 << 9,
244   GDK_BUTTON3_MASK  = 1 << 10,
245   GDK_BUTTON4_MASK  = 1 << 11,
246   GDK_BUTTON5_MASK  = 1 << 12,
247 
248   GDK_MODIFIER_RESERVED_13_MASK  = 1 << 13,
249   GDK_MODIFIER_RESERVED_14_MASK  = 1 << 14,
250   GDK_MODIFIER_RESERVED_15_MASK  = 1 << 15,
251   GDK_MODIFIER_RESERVED_16_MASK  = 1 << 16,
252   GDK_MODIFIER_RESERVED_17_MASK  = 1 << 17,
253   GDK_MODIFIER_RESERVED_18_MASK  = 1 << 18,
254   GDK_MODIFIER_RESERVED_19_MASK  = 1 << 19,
255   GDK_MODIFIER_RESERVED_20_MASK  = 1 << 20,
256   GDK_MODIFIER_RESERVED_21_MASK  = 1 << 21,
257   GDK_MODIFIER_RESERVED_22_MASK  = 1 << 22,
258   GDK_MODIFIER_RESERVED_23_MASK  = 1 << 23,
259   GDK_MODIFIER_RESERVED_24_MASK  = 1 << 24,
260   GDK_MODIFIER_RESERVED_25_MASK  = 1 << 25,
261 
262   /* The next few modifiers are used by XKB, so we skip to the end.
263    * Bits 15 - 25 are currently unused. Bit 29 is used internally.
264    */
265 
266   GDK_SUPER_MASK    = 1 << 26,
267   GDK_HYPER_MASK    = 1 << 27,
268   GDK_META_MASK     = 1 << 28,
269 
270   GDK_MODIFIER_RESERVED_29_MASK  = 1 << 29,
271 
272   GDK_RELEASE_MASK  = 1 << 30,
273 
274   /* Combination of GDK_SHIFT_MASK..GDK_BUTTON5_MASK + GDK_SUPER_MASK
275      + GDK_HYPER_MASK + GDK_META_MASK + GDK_RELEASE_MASK */
276   GDK_MODIFIER_MASK = 0x5c001fff
277 } GdkModifierType;
278 
279 /**
280  * GdkModifierIntent:
281  * @GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR: the primary modifier used to invoke
282  *  menu accelerators.
283  * @GDK_MODIFIER_INTENT_CONTEXT_MENU: the modifier used to invoke context menus.
284  *  Note that mouse button 3 always triggers context menus. When this modifier
285  *  is not 0, it additionally triggers context menus when used with mouse button 1.
286  * @GDK_MODIFIER_INTENT_EXTEND_SELECTION: the modifier used to extend selections
287  *  using `modifier`-click or `modifier`-cursor-key
288  * @GDK_MODIFIER_INTENT_MODIFY_SELECTION: the modifier used to modify selections,
289  *  which in most cases means toggling the clicked item into or out of the selection.
290  * @GDK_MODIFIER_INTENT_NO_TEXT_INPUT: when any of these modifiers is pressed, the
291  *  key event cannot produce a symbol directly. This is meant to be used for
292  *  input methods, and for use cases like typeahead search.
293  * @GDK_MODIFIER_INTENT_SHIFT_GROUP: the modifier that switches between keyboard
294  *  groups (AltGr on X11/Windows and Option/Alt on OS X).
295  * @GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK: The set of modifier masks accepted
296  * as modifiers in accelerators. Needed because Command is mapped to MOD2 on
297  * OSX, which is widely used, but on X11 MOD2 is NumLock and using that for a
298  * mod key is problematic at best.
299  * Ref: https://bugzilla.gnome.org/show_bug.cgi?id=736125.
300  *
301  * This enum is used with gdk_keymap_get_modifier_mask()
302  * in order to determine what modifiers the
303  * currently used windowing system backend uses for particular
304  * purposes. For example, on X11/Windows, the Control key is used for
305  * invoking menu shortcuts (accelerators), whereas on Apple computers
306  * it’s the Command key (which correspond to %GDK_CONTROL_MASK and
307  * %GDK_MOD2_MASK, respectively).
308  *
309  * Since: 3.4
310  **/
311 typedef enum
312 {
313   GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR,
314   GDK_MODIFIER_INTENT_CONTEXT_MENU,
315   GDK_MODIFIER_INTENT_EXTEND_SELECTION,
316   GDK_MODIFIER_INTENT_MODIFY_SELECTION,
317   GDK_MODIFIER_INTENT_NO_TEXT_INPUT,
318   GDK_MODIFIER_INTENT_SHIFT_GROUP,
319   GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK,
320 } GdkModifierIntent;
321 
322 typedef enum
323 {
324   GDK_OK          = 0,
325   GDK_ERROR       = -1,
326   GDK_ERROR_PARAM = -2,
327   GDK_ERROR_FILE  = -3,
328   GDK_ERROR_MEM   = -4
329 } GdkStatus;
330 
331 /**
332  * GdkGrabStatus:
333  * @GDK_GRAB_SUCCESS: the resource was successfully grabbed.
334  * @GDK_GRAB_ALREADY_GRABBED: the resource is actively grabbed by another client.
335  * @GDK_GRAB_INVALID_TIME: the resource was grabbed more recently than the
336  *  specified time.
337  * @GDK_GRAB_NOT_VIEWABLE: the grab window or the @confine_to window are not
338  *  viewable.
339  * @GDK_GRAB_FROZEN: the resource is frozen by an active grab of another client.
340  * @GDK_GRAB_FAILED: the grab failed for some other reason. Since 3.16
341  *
342  * Returned by gdk_device_grab(), gdk_pointer_grab() and gdk_keyboard_grab() to
343  * indicate success or the reason for the failure of the grab attempt.
344  */
345 typedef enum
346 {
347   GDK_GRAB_SUCCESS         = 0,
348   GDK_GRAB_ALREADY_GRABBED = 1,
349   GDK_GRAB_INVALID_TIME    = 2,
350   GDK_GRAB_NOT_VIEWABLE    = 3,
351   GDK_GRAB_FROZEN          = 4,
352   GDK_GRAB_FAILED          = 5
353 } GdkGrabStatus;
354 
355 /**
356  * GdkGrabOwnership:
357  * @GDK_OWNERSHIP_NONE: All other devices’ events are allowed.
358  * @GDK_OWNERSHIP_WINDOW: Other devices’ events are blocked for the grab window.
359  * @GDK_OWNERSHIP_APPLICATION: Other devices’ events are blocked for the whole application.
360  *
361  * Defines how device grabs interact with other devices.
362  */
363 typedef enum
364 {
365   GDK_OWNERSHIP_NONE,
366   GDK_OWNERSHIP_WINDOW,
367   GDK_OWNERSHIP_APPLICATION
368 } GdkGrabOwnership;
369 
370 /**
371  * GdkEventMask:
372  * @GDK_EXPOSURE_MASK: receive expose events
373  * @GDK_POINTER_MOTION_MASK: receive all pointer motion events
374  * @GDK_POINTER_MOTION_HINT_MASK: deprecated. see the explanation above
375  * @GDK_BUTTON_MOTION_MASK: receive pointer motion events while any button is pressed
376  * @GDK_BUTTON1_MOTION_MASK: receive pointer motion events while 1 button is pressed
377  * @GDK_BUTTON2_MOTION_MASK: receive pointer motion events while 2 button is pressed
378  * @GDK_BUTTON3_MOTION_MASK: receive pointer motion events while 3 button is pressed
379  * @GDK_BUTTON_PRESS_MASK: receive button press events
380  * @GDK_BUTTON_RELEASE_MASK: receive button release events
381  * @GDK_KEY_PRESS_MASK: receive key press events
382  * @GDK_KEY_RELEASE_MASK: receive key release events
383  * @GDK_ENTER_NOTIFY_MASK: receive window enter events
384  * @GDK_LEAVE_NOTIFY_MASK: receive window leave events
385  * @GDK_FOCUS_CHANGE_MASK: receive focus change events
386  * @GDK_STRUCTURE_MASK: receive events about window configuration change
387  * @GDK_PROPERTY_CHANGE_MASK: receive property change events
388  * @GDK_VISIBILITY_NOTIFY_MASK: receive visibility change events
389  * @GDK_PROXIMITY_IN_MASK: receive proximity in events
390  * @GDK_PROXIMITY_OUT_MASK: receive proximity out events
391  * @GDK_SUBSTRUCTURE_MASK: receive events about window configuration changes of
392  *   child windows
393  * @GDK_SCROLL_MASK: receive scroll events
394  * @GDK_TOUCH_MASK: receive touch events. Since 3.4
395  * @GDK_SMOOTH_SCROLL_MASK: receive smooth scrolling events. Since 3.4
396    @GDK_TOUCHPAD_GESTURE_MASK: receive touchpad gesture events. Since 3.18
397  * @GDK_TABLET_PAD_MASK: receive tablet pad events. Since 3.22
398  * @GDK_ALL_EVENTS_MASK: the combination of all the above event masks.
399  *
400  * A set of bit-flags to indicate which events a window is to receive.
401  * Most of these masks map onto one or more of the #GdkEventType event types
402  * above.
403  *
404  * See the [input handling overview][chap-input-handling] for details of
405  * [event masks][event-masks] and [event propagation][event-propagation].
406  *
407  * %GDK_POINTER_MOTION_HINT_MASK is deprecated. It is a special mask
408  * to reduce the number of %GDK_MOTION_NOTIFY events received. When using
409  * %GDK_POINTER_MOTION_HINT_MASK, fewer %GDK_MOTION_NOTIFY events will
410  * be sent, some of which are marked as a hint (the is_hint member is
411  * %TRUE). To receive more motion events after a motion hint event,
412  * the application needs to asks for more, by calling
413  * gdk_event_request_motions().
414  *
415  * Since GTK 3.8, motion events are already compressed by default, independent
416  * of this mechanism. This compression can be disabled with
417  * gdk_window_set_event_compression(). See the documentation of that function
418  * for details.
419  *
420  * If %GDK_TOUCH_MASK is enabled, the window will receive touch events
421  * from touch-enabled devices. Those will come as sequences of #GdkEventTouch
422  * with type %GDK_TOUCH_UPDATE, enclosed by two events with
423  * type %GDK_TOUCH_BEGIN and %GDK_TOUCH_END (or %GDK_TOUCH_CANCEL).
424  * gdk_event_get_event_sequence() returns the event sequence for these
425  * events, so different sequences may be distinguished.
426  */
427 typedef enum
428 {
429   GDK_EXPOSURE_MASK             = 1 << 1,
430   GDK_POINTER_MOTION_MASK       = 1 << 2,
431   GDK_POINTER_MOTION_HINT_MASK  = 1 << 3,
432   GDK_BUTTON_MOTION_MASK        = 1 << 4,
433   GDK_BUTTON1_MOTION_MASK       = 1 << 5,
434   GDK_BUTTON2_MOTION_MASK       = 1 << 6,
435   GDK_BUTTON3_MOTION_MASK       = 1 << 7,
436   GDK_BUTTON_PRESS_MASK         = 1 << 8,
437   GDK_BUTTON_RELEASE_MASK       = 1 << 9,
438   GDK_KEY_PRESS_MASK            = 1 << 10,
439   GDK_KEY_RELEASE_MASK          = 1 << 11,
440   GDK_ENTER_NOTIFY_MASK         = 1 << 12,
441   GDK_LEAVE_NOTIFY_MASK         = 1 << 13,
442   GDK_FOCUS_CHANGE_MASK         = 1 << 14,
443   GDK_STRUCTURE_MASK            = 1 << 15,
444   GDK_PROPERTY_CHANGE_MASK      = 1 << 16,
445   GDK_VISIBILITY_NOTIFY_MASK    = 1 << 17,
446   GDK_PROXIMITY_IN_MASK         = 1 << 18,
447   GDK_PROXIMITY_OUT_MASK        = 1 << 19,
448   GDK_SUBSTRUCTURE_MASK         = 1 << 20,
449   GDK_SCROLL_MASK               = 1 << 21,
450   GDK_TOUCH_MASK                = 1 << 22,
451   GDK_SMOOTH_SCROLL_MASK        = 1 << 23,
452   GDK_TOUCHPAD_GESTURE_MASK     = 1 << 24,
453   GDK_TABLET_PAD_MASK           = 1 << 25,
454   GDK_ALL_EVENTS_MASK           = 0x3FFFFFE
455 } GdkEventMask;
456 
457 /**
458  * GdkPoint:
459  * @x: the x coordinate of the point.
460  * @y: the y coordinate of the point.
461  *
462  * Defines the x and y coordinates of a point.
463  */
464 struct _GdkPoint
465 {
466   gint x;
467   gint y;
468 };
469 
470 /**
471  * GdkGLError:
472  * @GDK_GL_ERROR_NOT_AVAILABLE: OpenGL support is not available
473  * @GDK_GL_ERROR_UNSUPPORTED_FORMAT: The requested visual format is not supported
474  * @GDK_GL_ERROR_UNSUPPORTED_PROFILE: The requested profile is not supported
475  *
476  * Error enumeration for #GdkGLContext.
477  *
478  * Since: 3.16
479  */
480 typedef enum {
481   GDK_GL_ERROR_NOT_AVAILABLE,
482   GDK_GL_ERROR_UNSUPPORTED_FORMAT,
483   GDK_GL_ERROR_UNSUPPORTED_PROFILE
484 } GdkGLError;
485 
486 /**
487  * GdkWindowTypeHint:
488  * @GDK_WINDOW_TYPE_HINT_NORMAL: Normal toplevel window.
489  * @GDK_WINDOW_TYPE_HINT_DIALOG: Dialog window.
490  * @GDK_WINDOW_TYPE_HINT_MENU: Window used to implement a menu; GTK+ uses
491  *  this hint only for torn-off menus, see #GtkTearoffMenuItem.
492  * @GDK_WINDOW_TYPE_HINT_TOOLBAR: Window used to implement toolbars.
493  * @GDK_WINDOW_TYPE_HINT_SPLASHSCREEN: Window used to display a splash
494  *  screen during application startup.
495  * @GDK_WINDOW_TYPE_HINT_UTILITY: Utility windows which are not detached
496  *  toolbars or dialogs.
497  * @GDK_WINDOW_TYPE_HINT_DOCK: Used for creating dock or panel windows.
498  * @GDK_WINDOW_TYPE_HINT_DESKTOP: Used for creating the desktop background
499  *  window.
500  * @GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU: A menu that belongs to a menubar.
501  * @GDK_WINDOW_TYPE_HINT_POPUP_MENU: A menu that does not belong to a menubar,
502  *  e.g. a context menu.
503  * @GDK_WINDOW_TYPE_HINT_TOOLTIP: A tooltip.
504  * @GDK_WINDOW_TYPE_HINT_NOTIFICATION: A notification - typically a “bubble”
505  *  that belongs to a status icon.
506  * @GDK_WINDOW_TYPE_HINT_COMBO: A popup from a combo box.
507  * @GDK_WINDOW_TYPE_HINT_DND: A window that is used to implement a DND cursor.
508  *
509  * These are hints for the window manager that indicate what type of function
510  * the window has. The window manager can use this when determining decoration
511  * and behaviour of the window. The hint must be set before mapping the window.
512  *
513  * See the [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
514  * specification for more details about window types.
515  */
516 typedef enum
517 {
518   GDK_WINDOW_TYPE_HINT_NORMAL,
519   GDK_WINDOW_TYPE_HINT_DIALOG,
520   GDK_WINDOW_TYPE_HINT_MENU,		/* Torn off menu */
521   GDK_WINDOW_TYPE_HINT_TOOLBAR,
522   GDK_WINDOW_TYPE_HINT_SPLASHSCREEN,
523   GDK_WINDOW_TYPE_HINT_UTILITY,
524   GDK_WINDOW_TYPE_HINT_DOCK,
525   GDK_WINDOW_TYPE_HINT_DESKTOP,
526   GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU,	/* A drop down menu (from a menubar) */
527   GDK_WINDOW_TYPE_HINT_POPUP_MENU,	/* A popup menu (from right-click) */
528   GDK_WINDOW_TYPE_HINT_TOOLTIP,
529   GDK_WINDOW_TYPE_HINT_NOTIFICATION,
530   GDK_WINDOW_TYPE_HINT_COMBO,
531   GDK_WINDOW_TYPE_HINT_DND
532 } GdkWindowTypeHint;
533 
534 /**
535  * GdkAxisUse:
536  * @GDK_AXIS_IGNORE: the axis is ignored.
537  * @GDK_AXIS_X: the axis is used as the x axis.
538  * @GDK_AXIS_Y: the axis is used as the y axis.
539  * @GDK_AXIS_PRESSURE: the axis is used for pressure information.
540  * @GDK_AXIS_XTILT: the axis is used for x tilt information.
541  * @GDK_AXIS_YTILT: the axis is used for y tilt information.
542  * @GDK_AXIS_WHEEL: the axis is used for wheel information.
543  * @GDK_AXIS_DISTANCE: the axis is used for pen/tablet distance information. (Since: 3.22)
544  * @GDK_AXIS_ROTATION: the axis is used for pen rotation information. (Since: 3.22)
545  * @GDK_AXIS_SLIDER: the axis is used for pen slider information. (Since: 3.22)
546  * @GDK_AXIS_LAST: a constant equal to the numerically highest axis value.
547  *
548  * An enumeration describing the way in which a device
549  * axis (valuator) maps onto the predefined valuator
550  * types that GTK+ understands.
551  *
552  * Note that the X and Y axes are not really needed; pointer devices
553  * report their location via the x/y members of events regardless. Whether
554  * X and Y are present as axes depends on the GDK backend.
555  */
556 typedef enum
557 {
558   GDK_AXIS_IGNORE,
559   GDK_AXIS_X,
560   GDK_AXIS_Y,
561   GDK_AXIS_PRESSURE,
562   GDK_AXIS_XTILT,
563   GDK_AXIS_YTILT,
564   GDK_AXIS_WHEEL,
565   GDK_AXIS_DISTANCE,
566   GDK_AXIS_ROTATION,
567   GDK_AXIS_SLIDER,
568   GDK_AXIS_LAST
569 } GdkAxisUse;
570 
571 /**
572  * GdkAxisFlags:
573  * @GDK_AXIS_FLAG_X: X axis is present
574  * @GDK_AXIS_FLAG_Y: Y axis is present
575  * @GDK_AXIS_FLAG_PRESSURE: Pressure axis is present
576  * @GDK_AXIS_FLAG_XTILT: X tilt axis is present
577  * @GDK_AXIS_FLAG_YTILT: Y tilt axis is present
578  * @GDK_AXIS_FLAG_WHEEL: Wheel axis is present
579  * @GDK_AXIS_FLAG_DISTANCE: Distance axis is present
580  * @GDK_AXIS_FLAG_ROTATION: Z-axis rotation is present
581  * @GDK_AXIS_FLAG_SLIDER: Slider axis is present
582  *
583  * Flags describing the current capabilities of a device/tool.
584  *
585  * Since: 3.22
586  */
587 typedef enum
588 {
589   GDK_AXIS_FLAG_X        = 1 << GDK_AXIS_X,
590   GDK_AXIS_FLAG_Y        = 1 << GDK_AXIS_Y,
591   GDK_AXIS_FLAG_PRESSURE = 1 << GDK_AXIS_PRESSURE,
592   GDK_AXIS_FLAG_XTILT    = 1 << GDK_AXIS_XTILT,
593   GDK_AXIS_FLAG_YTILT    = 1 << GDK_AXIS_YTILT,
594   GDK_AXIS_FLAG_WHEEL    = 1 << GDK_AXIS_WHEEL,
595   GDK_AXIS_FLAG_DISTANCE = 1 << GDK_AXIS_DISTANCE,
596   GDK_AXIS_FLAG_ROTATION = 1 << GDK_AXIS_ROTATION,
597   GDK_AXIS_FLAG_SLIDER   = 1 << GDK_AXIS_SLIDER,
598 } GdkAxisFlags;
599 
600 G_END_DECLS
601 
602 #endif /* __GDK_TYPES_H__ */
603