Skip to main content

gdk/auto/
enums.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::ffi;
6use glib::{prelude::*, translate::*};
7
8/// An enumeration describing the way in which a device
9/// axis (valuator) maps onto the predefined valuator
10/// types that GTK+ understands.
11///
12/// Note that the X and Y axes are not really needed; pointer devices
13/// report their location via the x/y members of events regardless. Whether
14/// X and Y are present as axes depends on the GDK backend.
15#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
16#[non_exhaustive]
17#[doc(alias = "GdkAxisUse")]
18pub enum AxisUse {
19    /// the axis is ignored.
20    #[doc(alias = "GDK_AXIS_IGNORE")]
21    Ignore,
22    /// the axis is used as the x axis.
23    #[doc(alias = "GDK_AXIS_X")]
24    X,
25    /// the axis is used as the y axis.
26    #[doc(alias = "GDK_AXIS_Y")]
27    Y,
28    /// the axis is used for pressure information.
29    #[doc(alias = "GDK_AXIS_PRESSURE")]
30    Pressure,
31    /// the axis is used for x tilt information.
32    #[doc(alias = "GDK_AXIS_XTILT")]
33    Xtilt,
34    /// the axis is used for y tilt information.
35    #[doc(alias = "GDK_AXIS_YTILT")]
36    Ytilt,
37    /// the axis is used for wheel information.
38    #[doc(alias = "GDK_AXIS_WHEEL")]
39    Wheel,
40    /// the axis is used for pen/tablet distance information. (Since: 3.22)
41    #[doc(alias = "GDK_AXIS_DISTANCE")]
42    Distance,
43    /// the axis is used for pen rotation information. (Since: 3.22)
44    #[doc(alias = "GDK_AXIS_ROTATION")]
45    Rotation,
46    /// the axis is used for pen slider information. (Since: 3.22)
47    #[doc(alias = "GDK_AXIS_SLIDER")]
48    Slider,
49    /// a constant equal to the numerically highest axis value.
50    #[doc(alias = "GDK_AXIS_LAST")]
51    Last,
52    #[doc(hidden)]
53    __Unknown(i32),
54}
55
56#[doc(hidden)]
57impl IntoGlib for AxisUse {
58    type GlibType = ffi::GdkAxisUse;
59
60    #[inline]
61    fn into_glib(self) -> ffi::GdkAxisUse {
62        match self {
63            Self::Ignore => ffi::GDK_AXIS_IGNORE,
64            Self::X => ffi::GDK_AXIS_X,
65            Self::Y => ffi::GDK_AXIS_Y,
66            Self::Pressure => ffi::GDK_AXIS_PRESSURE,
67            Self::Xtilt => ffi::GDK_AXIS_XTILT,
68            Self::Ytilt => ffi::GDK_AXIS_YTILT,
69            Self::Wheel => ffi::GDK_AXIS_WHEEL,
70            Self::Distance => ffi::GDK_AXIS_DISTANCE,
71            Self::Rotation => ffi::GDK_AXIS_ROTATION,
72            Self::Slider => ffi::GDK_AXIS_SLIDER,
73            Self::Last => ffi::GDK_AXIS_LAST,
74            Self::__Unknown(value) => value,
75        }
76    }
77}
78
79#[doc(hidden)]
80impl FromGlib<ffi::GdkAxisUse> for AxisUse {
81    #[inline]
82    unsafe fn from_glib(value: ffi::GdkAxisUse) -> Self {
83        skip_assert_initialized!();
84
85        match value {
86            ffi::GDK_AXIS_IGNORE => Self::Ignore,
87            ffi::GDK_AXIS_X => Self::X,
88            ffi::GDK_AXIS_Y => Self::Y,
89            ffi::GDK_AXIS_PRESSURE => Self::Pressure,
90            ffi::GDK_AXIS_XTILT => Self::Xtilt,
91            ffi::GDK_AXIS_YTILT => Self::Ytilt,
92            ffi::GDK_AXIS_WHEEL => Self::Wheel,
93            ffi::GDK_AXIS_DISTANCE => Self::Distance,
94            ffi::GDK_AXIS_ROTATION => Self::Rotation,
95            ffi::GDK_AXIS_SLIDER => Self::Slider,
96            ffi::GDK_AXIS_LAST => Self::Last,
97            value => Self::__Unknown(value),
98        }
99    }
100}
101
102impl StaticType for AxisUse {
103    #[inline]
104    #[doc(alias = "gdk_axis_use_get_type")]
105    fn static_type() -> glib::Type {
106        unsafe { from_glib(ffi::gdk_axis_use_get_type()) }
107    }
108}
109
110impl glib::HasParamSpec for AxisUse {
111    type ParamSpec = glib::ParamSpecEnum;
112    type SetValue = Self;
113    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
114
115    fn param_spec_builder() -> Self::BuilderFn {
116        Self::ParamSpec::builder_with_default
117    }
118}
119
120impl glib::value::ValueType for AxisUse {
121    type Type = Self;
122}
123
124unsafe impl<'a> glib::value::FromValue<'a> for AxisUse {
125    type Checker = glib::value::GenericValueTypeChecker<Self>;
126
127    #[inline]
128    unsafe fn from_value(value: &'a glib::Value) -> Self {
129        skip_assert_initialized!();
130        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
131    }
132}
133
134impl ToValue for AxisUse {
135    #[inline]
136    fn to_value(&self) -> glib::Value {
137        let mut value = glib::Value::for_value_type::<Self>();
138        unsafe {
139            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
140        }
141        value
142    }
143
144    #[inline]
145    fn value_type(&self) -> glib::Type {
146        Self::static_type()
147    }
148}
149
150impl From<AxisUse> for glib::Value {
151    #[inline]
152    fn from(v: AxisUse) -> Self {
153        skip_assert_initialized!();
154        ToValue::to_value(&v)
155    }
156}
157
158/// A set of values describing the possible byte-orders
159/// for storing pixel values in memory.
160#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
161#[non_exhaustive]
162#[doc(alias = "GdkByteOrder")]
163pub enum ByteOrder {
164    /// The values are stored with the least-significant byte
165    ///  first. For instance, the 32-bit value 0xffeecc would be stored
166    ///  in memory as 0xcc, 0xee, 0xff, 0x00.
167    #[doc(alias = "GDK_LSB_FIRST")]
168    LsbFirst,
169    /// The values are stored with the most-significant byte
170    ///  first. For instance, the 32-bit value 0xffeecc would be stored
171    ///  in memory as 0x00, 0xff, 0xee, 0xcc.
172    #[doc(alias = "GDK_MSB_FIRST")]
173    MsbFirst,
174    #[doc(hidden)]
175    __Unknown(i32),
176}
177
178#[doc(hidden)]
179impl IntoGlib for ByteOrder {
180    type GlibType = ffi::GdkByteOrder;
181
182    #[inline]
183    fn into_glib(self) -> ffi::GdkByteOrder {
184        match self {
185            Self::LsbFirst => ffi::GDK_LSB_FIRST,
186            Self::MsbFirst => ffi::GDK_MSB_FIRST,
187            Self::__Unknown(value) => value,
188        }
189    }
190}
191
192#[doc(hidden)]
193impl FromGlib<ffi::GdkByteOrder> for ByteOrder {
194    #[inline]
195    unsafe fn from_glib(value: ffi::GdkByteOrder) -> Self {
196        skip_assert_initialized!();
197
198        match value {
199            ffi::GDK_LSB_FIRST => Self::LsbFirst,
200            ffi::GDK_MSB_FIRST => Self::MsbFirst,
201            value => Self::__Unknown(value),
202        }
203    }
204}
205
206impl StaticType for ByteOrder {
207    #[inline]
208    #[doc(alias = "gdk_byte_order_get_type")]
209    fn static_type() -> glib::Type {
210        unsafe { from_glib(ffi::gdk_byte_order_get_type()) }
211    }
212}
213
214impl glib::HasParamSpec for ByteOrder {
215    type ParamSpec = glib::ParamSpecEnum;
216    type SetValue = Self;
217    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
218
219    fn param_spec_builder() -> Self::BuilderFn {
220        Self::ParamSpec::builder_with_default
221    }
222}
223
224impl glib::value::ValueType for ByteOrder {
225    type Type = Self;
226}
227
228unsafe impl<'a> glib::value::FromValue<'a> for ByteOrder {
229    type Checker = glib::value::GenericValueTypeChecker<Self>;
230
231    #[inline]
232    unsafe fn from_value(value: &'a glib::Value) -> Self {
233        skip_assert_initialized!();
234        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
235    }
236}
237
238impl ToValue for ByteOrder {
239    #[inline]
240    fn to_value(&self) -> glib::Value {
241        let mut value = glib::Value::for_value_type::<Self>();
242        unsafe {
243            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
244        }
245        value
246    }
247
248    #[inline]
249    fn value_type(&self) -> glib::Type {
250        Self::static_type()
251    }
252}
253
254impl From<ByteOrder> for glib::Value {
255    #[inline]
256    fn from(v: ByteOrder) -> Self {
257        skip_assert_initialized!();
258        ToValue::to_value(&v)
259    }
260}
261
262/// Specifies the crossing mode for [`EventCrossing`][crate::EventCrossing].
263#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
264#[non_exhaustive]
265#[doc(alias = "GdkCrossingMode")]
266pub enum CrossingMode {
267    /// crossing because of pointer motion.
268    #[doc(alias = "GDK_CROSSING_NORMAL")]
269    Normal,
270    /// crossing because a grab is activated.
271    #[doc(alias = "GDK_CROSSING_GRAB")]
272    Grab,
273    /// crossing because a grab is deactivated.
274    #[doc(alias = "GDK_CROSSING_UNGRAB")]
275    Ungrab,
276    /// crossing because a GTK+ grab is activated.
277    #[doc(alias = "GDK_CROSSING_GTK_GRAB")]
278    GtkGrab,
279    /// crossing because a GTK+ grab is deactivated.
280    #[doc(alias = "GDK_CROSSING_GTK_UNGRAB")]
281    GtkUngrab,
282    /// crossing because a GTK+ widget changed
283    ///  state (e.g. sensitivity).
284    #[doc(alias = "GDK_CROSSING_STATE_CHANGED")]
285    StateChanged,
286    /// crossing because a touch sequence has begun,
287    ///  this event is synthetic as the pointer might have not left the window.
288    #[doc(alias = "GDK_CROSSING_TOUCH_BEGIN")]
289    TouchBegin,
290    /// crossing because a touch sequence has ended,
291    ///  this event is synthetic as the pointer might have not left the window.
292    #[doc(alias = "GDK_CROSSING_TOUCH_END")]
293    TouchEnd,
294    /// crossing because of a device switch (i.e.
295    ///  a mouse taking control of the pointer after a touch device), this event
296    ///  is synthetic as the pointer didn’t leave the window.
297    #[doc(alias = "GDK_CROSSING_DEVICE_SWITCH")]
298    DeviceSwitch,
299    #[doc(hidden)]
300    __Unknown(i32),
301}
302
303#[doc(hidden)]
304impl IntoGlib for CrossingMode {
305    type GlibType = ffi::GdkCrossingMode;
306
307    #[inline]
308    fn into_glib(self) -> ffi::GdkCrossingMode {
309        match self {
310            Self::Normal => ffi::GDK_CROSSING_NORMAL,
311            Self::Grab => ffi::GDK_CROSSING_GRAB,
312            Self::Ungrab => ffi::GDK_CROSSING_UNGRAB,
313            Self::GtkGrab => ffi::GDK_CROSSING_GTK_GRAB,
314            Self::GtkUngrab => ffi::GDK_CROSSING_GTK_UNGRAB,
315            Self::StateChanged => ffi::GDK_CROSSING_STATE_CHANGED,
316            Self::TouchBegin => ffi::GDK_CROSSING_TOUCH_BEGIN,
317            Self::TouchEnd => ffi::GDK_CROSSING_TOUCH_END,
318            Self::DeviceSwitch => ffi::GDK_CROSSING_DEVICE_SWITCH,
319            Self::__Unknown(value) => value,
320        }
321    }
322}
323
324#[doc(hidden)]
325impl FromGlib<ffi::GdkCrossingMode> for CrossingMode {
326    #[inline]
327    unsafe fn from_glib(value: ffi::GdkCrossingMode) -> Self {
328        skip_assert_initialized!();
329
330        match value {
331            ffi::GDK_CROSSING_NORMAL => Self::Normal,
332            ffi::GDK_CROSSING_GRAB => Self::Grab,
333            ffi::GDK_CROSSING_UNGRAB => Self::Ungrab,
334            ffi::GDK_CROSSING_GTK_GRAB => Self::GtkGrab,
335            ffi::GDK_CROSSING_GTK_UNGRAB => Self::GtkUngrab,
336            ffi::GDK_CROSSING_STATE_CHANGED => Self::StateChanged,
337            ffi::GDK_CROSSING_TOUCH_BEGIN => Self::TouchBegin,
338            ffi::GDK_CROSSING_TOUCH_END => Self::TouchEnd,
339            ffi::GDK_CROSSING_DEVICE_SWITCH => Self::DeviceSwitch,
340            value => Self::__Unknown(value),
341        }
342    }
343}
344
345impl StaticType for CrossingMode {
346    #[inline]
347    #[doc(alias = "gdk_crossing_mode_get_type")]
348    fn static_type() -> glib::Type {
349        unsafe { from_glib(ffi::gdk_crossing_mode_get_type()) }
350    }
351}
352
353impl glib::HasParamSpec for CrossingMode {
354    type ParamSpec = glib::ParamSpecEnum;
355    type SetValue = Self;
356    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
357
358    fn param_spec_builder() -> Self::BuilderFn {
359        Self::ParamSpec::builder_with_default
360    }
361}
362
363impl glib::value::ValueType for CrossingMode {
364    type Type = Self;
365}
366
367unsafe impl<'a> glib::value::FromValue<'a> for CrossingMode {
368    type Checker = glib::value::GenericValueTypeChecker<Self>;
369
370    #[inline]
371    unsafe fn from_value(value: &'a glib::Value) -> Self {
372        skip_assert_initialized!();
373        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
374    }
375}
376
377impl ToValue for CrossingMode {
378    #[inline]
379    fn to_value(&self) -> glib::Value {
380        let mut value = glib::Value::for_value_type::<Self>();
381        unsafe {
382            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
383        }
384        value
385    }
386
387    #[inline]
388    fn value_type(&self) -> glib::Type {
389        Self::static_type()
390    }
391}
392
393impl From<CrossingMode> for glib::Value {
394    #[inline]
395    fn from(v: CrossingMode) -> Self {
396        skip_assert_initialized!();
397        ToValue::to_value(&v)
398    }
399}
400
401/// Predefined cursors.
402///
403/// Note that these IDs are directly taken from the X cursor font, and many
404/// of these cursors are either not useful, or are not available on other platforms.
405///
406/// The recommended way to create cursors is to use [`Cursor::from_name()`][crate::Cursor::from_name()].
407#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
408#[non_exhaustive]
409#[doc(alias = "GdkCursorType")]
410pub enum CursorType {
411    /// ![](X_cursor.png)
412    #[doc(alias = "GDK_X_CURSOR")]
413    XCursor,
414    /// ![](arrow.png)
415    #[doc(alias = "GDK_ARROW")]
416    Arrow,
417    /// ![](based_arrow_down.png)
418    #[doc(alias = "GDK_BASED_ARROW_DOWN")]
419    BasedArrowDown,
420    /// ![](based_arrow_up.png)
421    #[doc(alias = "GDK_BASED_ARROW_UP")]
422    BasedArrowUp,
423    /// ![](boat.png)
424    #[doc(alias = "GDK_BOAT")]
425    Boat,
426    /// ![](bogosity.png)
427    #[doc(alias = "GDK_BOGOSITY")]
428    Bogosity,
429    /// ![](bottom_left_corner.png)
430    #[doc(alias = "GDK_BOTTOM_LEFT_CORNER")]
431    BottomLeftCorner,
432    /// ![](bottom_right_corner.png)
433    #[doc(alias = "GDK_BOTTOM_RIGHT_CORNER")]
434    BottomRightCorner,
435    /// ![](bottom_side.png)
436    #[doc(alias = "GDK_BOTTOM_SIDE")]
437    BottomSide,
438    /// ![](bottom_tee.png)
439    #[doc(alias = "GDK_BOTTOM_TEE")]
440    BottomTee,
441    /// ![](box_spiral.png)
442    #[doc(alias = "GDK_BOX_SPIRAL")]
443    BoxSpiral,
444    /// ![](center_ptr.png)
445    #[doc(alias = "GDK_CENTER_PTR")]
446    CenterPtr,
447    /// ![](circle.png)
448    #[doc(alias = "GDK_CIRCLE")]
449    Circle,
450    /// ![](clock.png)
451    #[doc(alias = "GDK_CLOCK")]
452    Clock,
453    /// ![](coffee_mug.png)
454    #[doc(alias = "GDK_COFFEE_MUG")]
455    CoffeeMug,
456    /// ![](cross.png)
457    #[doc(alias = "GDK_CROSS")]
458    Cross,
459    /// ![](cross_reverse.png)
460    #[doc(alias = "GDK_CROSS_REVERSE")]
461    CrossReverse,
462    /// ![](crosshair.png)
463    #[doc(alias = "GDK_CROSSHAIR")]
464    Crosshair,
465    /// ![](diamond_cross.png)
466    #[doc(alias = "GDK_DIAMOND_CROSS")]
467    DiamondCross,
468    /// ![](dot.png)
469    #[doc(alias = "GDK_DOT")]
470    Dot,
471    /// ![](dotbox.png)
472    #[doc(alias = "GDK_DOTBOX")]
473    Dotbox,
474    /// ![](double_arrow.png)
475    #[doc(alias = "GDK_DOUBLE_ARROW")]
476    DoubleArrow,
477    /// ![](draft_large.png)
478    #[doc(alias = "GDK_DRAFT_LARGE")]
479    DraftLarge,
480    /// ![](draft_small.png)
481    #[doc(alias = "GDK_DRAFT_SMALL")]
482    DraftSmall,
483    /// ![](draped_box.png)
484    #[doc(alias = "GDK_DRAPED_BOX")]
485    DrapedBox,
486    /// ![](exchange.png)
487    #[doc(alias = "GDK_EXCHANGE")]
488    Exchange,
489    /// ![](fleur.png)
490    #[doc(alias = "GDK_FLEUR")]
491    Fleur,
492    /// ![](gobbler.png)
493    #[doc(alias = "GDK_GOBBLER")]
494    Gobbler,
495    /// ![](gumby.png)
496    #[doc(alias = "GDK_GUMBY")]
497    Gumby,
498    /// ![](hand1.png)
499    #[doc(alias = "GDK_HAND1")]
500    Hand1,
501    /// ![](hand2.png)
502    #[doc(alias = "GDK_HAND2")]
503    Hand2,
504    /// ![](heart.png)
505    #[doc(alias = "GDK_HEART")]
506    Heart,
507    /// ![](icon.png)
508    #[doc(alias = "GDK_ICON")]
509    Icon,
510    /// ![](iron_cross.png)
511    #[doc(alias = "GDK_IRON_CROSS")]
512    IronCross,
513    /// ![](left_ptr.png)
514    #[doc(alias = "GDK_LEFT_PTR")]
515    LeftPtr,
516    /// ![](left_side.png)
517    #[doc(alias = "GDK_LEFT_SIDE")]
518    LeftSide,
519    /// ![](left_tee.png)
520    #[doc(alias = "GDK_LEFT_TEE")]
521    LeftTee,
522    /// ![](leftbutton.png)
523    #[doc(alias = "GDK_LEFTBUTTON")]
524    Leftbutton,
525    /// ![](ll_angle.png)
526    #[doc(alias = "GDK_LL_ANGLE")]
527    LlAngle,
528    /// ![](lr_angle.png)
529    #[doc(alias = "GDK_LR_ANGLE")]
530    LrAngle,
531    /// ![](man.png)
532    #[doc(alias = "GDK_MAN")]
533    Man,
534    /// ![](middlebutton.png)
535    #[doc(alias = "GDK_MIDDLEBUTTON")]
536    Middlebutton,
537    /// ![](mouse.png)
538    #[doc(alias = "GDK_MOUSE")]
539    Mouse,
540    /// ![](pencil.png)
541    #[doc(alias = "GDK_PENCIL")]
542    Pencil,
543    /// ![](pirate.png)
544    #[doc(alias = "GDK_PIRATE")]
545    Pirate,
546    /// ![](plus.png)
547    #[doc(alias = "GDK_PLUS")]
548    Plus,
549    /// ![](question_arrow.png)
550    #[doc(alias = "GDK_QUESTION_ARROW")]
551    QuestionArrow,
552    /// ![](right_ptr.png)
553    #[doc(alias = "GDK_RIGHT_PTR")]
554    RightPtr,
555    /// ![](right_side.png)
556    #[doc(alias = "GDK_RIGHT_SIDE")]
557    RightSide,
558    /// ![](right_tee.png)
559    #[doc(alias = "GDK_RIGHT_TEE")]
560    RightTee,
561    /// ![](rightbutton.png)
562    #[doc(alias = "GDK_RIGHTBUTTON")]
563    Rightbutton,
564    /// ![](rtl_logo.png)
565    #[doc(alias = "GDK_RTL_LOGO")]
566    RtlLogo,
567    /// ![](sailboat.png)
568    #[doc(alias = "GDK_SAILBOAT")]
569    Sailboat,
570    /// ![](sb_down_arrow.png)
571    #[doc(alias = "GDK_SB_DOWN_ARROW")]
572    SbDownArrow,
573    /// ![](sb_h_double_arrow.png)
574    #[doc(alias = "GDK_SB_H_DOUBLE_ARROW")]
575    SbHDoubleArrow,
576    /// ![](sb_left_arrow.png)
577    #[doc(alias = "GDK_SB_LEFT_ARROW")]
578    SbLeftArrow,
579    /// ![](sb_right_arrow.png)
580    #[doc(alias = "GDK_SB_RIGHT_ARROW")]
581    SbRightArrow,
582    /// ![](sb_up_arrow.png)
583    #[doc(alias = "GDK_SB_UP_ARROW")]
584    SbUpArrow,
585    /// ![](sb_v_double_arrow.png)
586    #[doc(alias = "GDK_SB_V_DOUBLE_ARROW")]
587    SbVDoubleArrow,
588    /// ![](shuttle.png)
589    #[doc(alias = "GDK_SHUTTLE")]
590    Shuttle,
591    /// ![](sizing.png)
592    #[doc(alias = "GDK_SIZING")]
593    Sizing,
594    /// ![](spider.png)
595    #[doc(alias = "GDK_SPIDER")]
596    Spider,
597    /// ![](spraycan.png)
598    #[doc(alias = "GDK_SPRAYCAN")]
599    Spraycan,
600    /// ![](star.png)
601    #[doc(alias = "GDK_STAR")]
602    Star,
603    /// ![](target.png)
604    #[doc(alias = "GDK_TARGET")]
605    Target,
606    /// ![](tcross.png)
607    #[doc(alias = "GDK_TCROSS")]
608    Tcross,
609    /// ![](top_left_arrow.png)
610    #[doc(alias = "GDK_TOP_LEFT_ARROW")]
611    TopLeftArrow,
612    /// ![](top_left_corner.png)
613    #[doc(alias = "GDK_TOP_LEFT_CORNER")]
614    TopLeftCorner,
615    /// ![](top_right_corner.png)
616    #[doc(alias = "GDK_TOP_RIGHT_CORNER")]
617    TopRightCorner,
618    /// ![](top_side.png)
619    #[doc(alias = "GDK_TOP_SIDE")]
620    TopSide,
621    /// ![](top_tee.png)
622    #[doc(alias = "GDK_TOP_TEE")]
623    TopTee,
624    /// ![](trek.png)
625    #[doc(alias = "GDK_TREK")]
626    Trek,
627    /// ![](ul_angle.png)
628    #[doc(alias = "GDK_UL_ANGLE")]
629    UlAngle,
630    /// ![](umbrella.png)
631    #[doc(alias = "GDK_UMBRELLA")]
632    Umbrella,
633    /// ![](ur_angle.png)
634    #[doc(alias = "GDK_UR_ANGLE")]
635    UrAngle,
636    /// ![](watch.png)
637    #[doc(alias = "GDK_WATCH")]
638    Watch,
639    /// ![](xterm.png)
640    #[doc(alias = "GDK_XTERM")]
641    Xterm,
642    /// last cursor type
643    #[doc(alias = "GDK_LAST_CURSOR")]
644    LastCursor,
645    /// Blank cursor. Since 2.16
646    #[doc(alias = "GDK_BLANK_CURSOR")]
647    BlankCursor,
648    /// type of cursors constructed with
649    ///  [`Cursor::from_pixbuf()`][crate::Cursor::from_pixbuf()]
650    #[doc(alias = "GDK_CURSOR_IS_PIXMAP")]
651    CursorIsPixmap,
652    #[doc(hidden)]
653    __Unknown(i32),
654}
655
656#[doc(hidden)]
657impl IntoGlib for CursorType {
658    type GlibType = ffi::GdkCursorType;
659
660    fn into_glib(self) -> ffi::GdkCursorType {
661        match self {
662            Self::XCursor => ffi::GDK_X_CURSOR,
663            Self::Arrow => ffi::GDK_ARROW,
664            Self::BasedArrowDown => ffi::GDK_BASED_ARROW_DOWN,
665            Self::BasedArrowUp => ffi::GDK_BASED_ARROW_UP,
666            Self::Boat => ffi::GDK_BOAT,
667            Self::Bogosity => ffi::GDK_BOGOSITY,
668            Self::BottomLeftCorner => ffi::GDK_BOTTOM_LEFT_CORNER,
669            Self::BottomRightCorner => ffi::GDK_BOTTOM_RIGHT_CORNER,
670            Self::BottomSide => ffi::GDK_BOTTOM_SIDE,
671            Self::BottomTee => ffi::GDK_BOTTOM_TEE,
672            Self::BoxSpiral => ffi::GDK_BOX_SPIRAL,
673            Self::CenterPtr => ffi::GDK_CENTER_PTR,
674            Self::Circle => ffi::GDK_CIRCLE,
675            Self::Clock => ffi::GDK_CLOCK,
676            Self::CoffeeMug => ffi::GDK_COFFEE_MUG,
677            Self::Cross => ffi::GDK_CROSS,
678            Self::CrossReverse => ffi::GDK_CROSS_REVERSE,
679            Self::Crosshair => ffi::GDK_CROSSHAIR,
680            Self::DiamondCross => ffi::GDK_DIAMOND_CROSS,
681            Self::Dot => ffi::GDK_DOT,
682            Self::Dotbox => ffi::GDK_DOTBOX,
683            Self::DoubleArrow => ffi::GDK_DOUBLE_ARROW,
684            Self::DraftLarge => ffi::GDK_DRAFT_LARGE,
685            Self::DraftSmall => ffi::GDK_DRAFT_SMALL,
686            Self::DrapedBox => ffi::GDK_DRAPED_BOX,
687            Self::Exchange => ffi::GDK_EXCHANGE,
688            Self::Fleur => ffi::GDK_FLEUR,
689            Self::Gobbler => ffi::GDK_GOBBLER,
690            Self::Gumby => ffi::GDK_GUMBY,
691            Self::Hand1 => ffi::GDK_HAND1,
692            Self::Hand2 => ffi::GDK_HAND2,
693            Self::Heart => ffi::GDK_HEART,
694            Self::Icon => ffi::GDK_ICON,
695            Self::IronCross => ffi::GDK_IRON_CROSS,
696            Self::LeftPtr => ffi::GDK_LEFT_PTR,
697            Self::LeftSide => ffi::GDK_LEFT_SIDE,
698            Self::LeftTee => ffi::GDK_LEFT_TEE,
699            Self::Leftbutton => ffi::GDK_LEFTBUTTON,
700            Self::LlAngle => ffi::GDK_LL_ANGLE,
701            Self::LrAngle => ffi::GDK_LR_ANGLE,
702            Self::Man => ffi::GDK_MAN,
703            Self::Middlebutton => ffi::GDK_MIDDLEBUTTON,
704            Self::Mouse => ffi::GDK_MOUSE,
705            Self::Pencil => ffi::GDK_PENCIL,
706            Self::Pirate => ffi::GDK_PIRATE,
707            Self::Plus => ffi::GDK_PLUS,
708            Self::QuestionArrow => ffi::GDK_QUESTION_ARROW,
709            Self::RightPtr => ffi::GDK_RIGHT_PTR,
710            Self::RightSide => ffi::GDK_RIGHT_SIDE,
711            Self::RightTee => ffi::GDK_RIGHT_TEE,
712            Self::Rightbutton => ffi::GDK_RIGHTBUTTON,
713            Self::RtlLogo => ffi::GDK_RTL_LOGO,
714            Self::Sailboat => ffi::GDK_SAILBOAT,
715            Self::SbDownArrow => ffi::GDK_SB_DOWN_ARROW,
716            Self::SbHDoubleArrow => ffi::GDK_SB_H_DOUBLE_ARROW,
717            Self::SbLeftArrow => ffi::GDK_SB_LEFT_ARROW,
718            Self::SbRightArrow => ffi::GDK_SB_RIGHT_ARROW,
719            Self::SbUpArrow => ffi::GDK_SB_UP_ARROW,
720            Self::SbVDoubleArrow => ffi::GDK_SB_V_DOUBLE_ARROW,
721            Self::Shuttle => ffi::GDK_SHUTTLE,
722            Self::Sizing => ffi::GDK_SIZING,
723            Self::Spider => ffi::GDK_SPIDER,
724            Self::Spraycan => ffi::GDK_SPRAYCAN,
725            Self::Star => ffi::GDK_STAR,
726            Self::Target => ffi::GDK_TARGET,
727            Self::Tcross => ffi::GDK_TCROSS,
728            Self::TopLeftArrow => ffi::GDK_TOP_LEFT_ARROW,
729            Self::TopLeftCorner => ffi::GDK_TOP_LEFT_CORNER,
730            Self::TopRightCorner => ffi::GDK_TOP_RIGHT_CORNER,
731            Self::TopSide => ffi::GDK_TOP_SIDE,
732            Self::TopTee => ffi::GDK_TOP_TEE,
733            Self::Trek => ffi::GDK_TREK,
734            Self::UlAngle => ffi::GDK_UL_ANGLE,
735            Self::Umbrella => ffi::GDK_UMBRELLA,
736            Self::UrAngle => ffi::GDK_UR_ANGLE,
737            Self::Watch => ffi::GDK_WATCH,
738            Self::Xterm => ffi::GDK_XTERM,
739            Self::LastCursor => ffi::GDK_LAST_CURSOR,
740            Self::BlankCursor => ffi::GDK_BLANK_CURSOR,
741            Self::CursorIsPixmap => ffi::GDK_CURSOR_IS_PIXMAP,
742            Self::__Unknown(value) => value,
743        }
744    }
745}
746
747#[doc(hidden)]
748impl FromGlib<ffi::GdkCursorType> for CursorType {
749    unsafe fn from_glib(value: ffi::GdkCursorType) -> Self {
750        skip_assert_initialized!();
751
752        match value {
753            ffi::GDK_X_CURSOR => Self::XCursor,
754            ffi::GDK_ARROW => Self::Arrow,
755            ffi::GDK_BASED_ARROW_DOWN => Self::BasedArrowDown,
756            ffi::GDK_BASED_ARROW_UP => Self::BasedArrowUp,
757            ffi::GDK_BOAT => Self::Boat,
758            ffi::GDK_BOGOSITY => Self::Bogosity,
759            ffi::GDK_BOTTOM_LEFT_CORNER => Self::BottomLeftCorner,
760            ffi::GDK_BOTTOM_RIGHT_CORNER => Self::BottomRightCorner,
761            ffi::GDK_BOTTOM_SIDE => Self::BottomSide,
762            ffi::GDK_BOTTOM_TEE => Self::BottomTee,
763            ffi::GDK_BOX_SPIRAL => Self::BoxSpiral,
764            ffi::GDK_CENTER_PTR => Self::CenterPtr,
765            ffi::GDK_CIRCLE => Self::Circle,
766            ffi::GDK_CLOCK => Self::Clock,
767            ffi::GDK_COFFEE_MUG => Self::CoffeeMug,
768            ffi::GDK_CROSS => Self::Cross,
769            ffi::GDK_CROSS_REVERSE => Self::CrossReverse,
770            ffi::GDK_CROSSHAIR => Self::Crosshair,
771            ffi::GDK_DIAMOND_CROSS => Self::DiamondCross,
772            ffi::GDK_DOT => Self::Dot,
773            ffi::GDK_DOTBOX => Self::Dotbox,
774            ffi::GDK_DOUBLE_ARROW => Self::DoubleArrow,
775            ffi::GDK_DRAFT_LARGE => Self::DraftLarge,
776            ffi::GDK_DRAFT_SMALL => Self::DraftSmall,
777            ffi::GDK_DRAPED_BOX => Self::DrapedBox,
778            ffi::GDK_EXCHANGE => Self::Exchange,
779            ffi::GDK_FLEUR => Self::Fleur,
780            ffi::GDK_GOBBLER => Self::Gobbler,
781            ffi::GDK_GUMBY => Self::Gumby,
782            ffi::GDK_HAND1 => Self::Hand1,
783            ffi::GDK_HAND2 => Self::Hand2,
784            ffi::GDK_HEART => Self::Heart,
785            ffi::GDK_ICON => Self::Icon,
786            ffi::GDK_IRON_CROSS => Self::IronCross,
787            ffi::GDK_LEFT_PTR => Self::LeftPtr,
788            ffi::GDK_LEFT_SIDE => Self::LeftSide,
789            ffi::GDK_LEFT_TEE => Self::LeftTee,
790            ffi::GDK_LEFTBUTTON => Self::Leftbutton,
791            ffi::GDK_LL_ANGLE => Self::LlAngle,
792            ffi::GDK_LR_ANGLE => Self::LrAngle,
793            ffi::GDK_MAN => Self::Man,
794            ffi::GDK_MIDDLEBUTTON => Self::Middlebutton,
795            ffi::GDK_MOUSE => Self::Mouse,
796            ffi::GDK_PENCIL => Self::Pencil,
797            ffi::GDK_PIRATE => Self::Pirate,
798            ffi::GDK_PLUS => Self::Plus,
799            ffi::GDK_QUESTION_ARROW => Self::QuestionArrow,
800            ffi::GDK_RIGHT_PTR => Self::RightPtr,
801            ffi::GDK_RIGHT_SIDE => Self::RightSide,
802            ffi::GDK_RIGHT_TEE => Self::RightTee,
803            ffi::GDK_RIGHTBUTTON => Self::Rightbutton,
804            ffi::GDK_RTL_LOGO => Self::RtlLogo,
805            ffi::GDK_SAILBOAT => Self::Sailboat,
806            ffi::GDK_SB_DOWN_ARROW => Self::SbDownArrow,
807            ffi::GDK_SB_H_DOUBLE_ARROW => Self::SbHDoubleArrow,
808            ffi::GDK_SB_LEFT_ARROW => Self::SbLeftArrow,
809            ffi::GDK_SB_RIGHT_ARROW => Self::SbRightArrow,
810            ffi::GDK_SB_UP_ARROW => Self::SbUpArrow,
811            ffi::GDK_SB_V_DOUBLE_ARROW => Self::SbVDoubleArrow,
812            ffi::GDK_SHUTTLE => Self::Shuttle,
813            ffi::GDK_SIZING => Self::Sizing,
814            ffi::GDK_SPIDER => Self::Spider,
815            ffi::GDK_SPRAYCAN => Self::Spraycan,
816            ffi::GDK_STAR => Self::Star,
817            ffi::GDK_TARGET => Self::Target,
818            ffi::GDK_TCROSS => Self::Tcross,
819            ffi::GDK_TOP_LEFT_ARROW => Self::TopLeftArrow,
820            ffi::GDK_TOP_LEFT_CORNER => Self::TopLeftCorner,
821            ffi::GDK_TOP_RIGHT_CORNER => Self::TopRightCorner,
822            ffi::GDK_TOP_SIDE => Self::TopSide,
823            ffi::GDK_TOP_TEE => Self::TopTee,
824            ffi::GDK_TREK => Self::Trek,
825            ffi::GDK_UL_ANGLE => Self::UlAngle,
826            ffi::GDK_UMBRELLA => Self::Umbrella,
827            ffi::GDK_UR_ANGLE => Self::UrAngle,
828            ffi::GDK_WATCH => Self::Watch,
829            ffi::GDK_XTERM => Self::Xterm,
830            ffi::GDK_LAST_CURSOR => Self::LastCursor,
831            ffi::GDK_BLANK_CURSOR => Self::BlankCursor,
832            ffi::GDK_CURSOR_IS_PIXMAP => Self::CursorIsPixmap,
833            value => Self::__Unknown(value),
834        }
835    }
836}
837
838impl StaticType for CursorType {
839    #[inline]
840    #[doc(alias = "gdk_cursor_type_get_type")]
841    fn static_type() -> glib::Type {
842        unsafe { from_glib(ffi::gdk_cursor_type_get_type()) }
843    }
844}
845
846impl glib::HasParamSpec for CursorType {
847    type ParamSpec = glib::ParamSpecEnum;
848    type SetValue = Self;
849    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
850
851    fn param_spec_builder() -> Self::BuilderFn {
852        Self::ParamSpec::builder_with_default
853    }
854}
855
856impl glib::value::ValueType for CursorType {
857    type Type = Self;
858}
859
860unsafe impl<'a> glib::value::FromValue<'a> for CursorType {
861    type Checker = glib::value::GenericValueTypeChecker<Self>;
862
863    #[inline]
864    unsafe fn from_value(value: &'a glib::Value) -> Self {
865        skip_assert_initialized!();
866        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
867    }
868}
869
870impl ToValue for CursorType {
871    #[inline]
872    fn to_value(&self) -> glib::Value {
873        let mut value = glib::Value::for_value_type::<Self>();
874        unsafe {
875            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
876        }
877        value
878    }
879
880    #[inline]
881    fn value_type(&self) -> glib::Type {
882        Self::static_type()
883    }
884}
885
886impl From<CursorType> for glib::Value {
887    #[inline]
888    fn from(v: CursorType) -> Self {
889        skip_assert_initialized!();
890        ToValue::to_value(&v)
891    }
892}
893
894/// A pad feature.
895#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
896#[non_exhaustive]
897#[doc(alias = "GdkDevicePadFeature")]
898pub enum DevicePadFeature {
899    /// a button
900    #[doc(alias = "GDK_DEVICE_PAD_FEATURE_BUTTON")]
901    Button,
902    /// a ring-shaped interactive area
903    #[doc(alias = "GDK_DEVICE_PAD_FEATURE_RING")]
904    Ring,
905    /// a straight interactive area
906    #[doc(alias = "GDK_DEVICE_PAD_FEATURE_STRIP")]
907    Strip,
908    #[doc(hidden)]
909    __Unknown(i32),
910}
911
912#[doc(hidden)]
913impl IntoGlib for DevicePadFeature {
914    type GlibType = ffi::GdkDevicePadFeature;
915
916    #[inline]
917    fn into_glib(self) -> ffi::GdkDevicePadFeature {
918        match self {
919            Self::Button => ffi::GDK_DEVICE_PAD_FEATURE_BUTTON,
920            Self::Ring => ffi::GDK_DEVICE_PAD_FEATURE_RING,
921            Self::Strip => ffi::GDK_DEVICE_PAD_FEATURE_STRIP,
922            Self::__Unknown(value) => value,
923        }
924    }
925}
926
927#[doc(hidden)]
928impl FromGlib<ffi::GdkDevicePadFeature> for DevicePadFeature {
929    #[inline]
930    unsafe fn from_glib(value: ffi::GdkDevicePadFeature) -> Self {
931        skip_assert_initialized!();
932
933        match value {
934            ffi::GDK_DEVICE_PAD_FEATURE_BUTTON => Self::Button,
935            ffi::GDK_DEVICE_PAD_FEATURE_RING => Self::Ring,
936            ffi::GDK_DEVICE_PAD_FEATURE_STRIP => Self::Strip,
937            value => Self::__Unknown(value),
938        }
939    }
940}
941
942impl StaticType for DevicePadFeature {
943    #[inline]
944    #[doc(alias = "gdk_device_pad_feature_get_type")]
945    fn static_type() -> glib::Type {
946        unsafe { from_glib(ffi::gdk_device_pad_feature_get_type()) }
947    }
948}
949
950impl glib::HasParamSpec for DevicePadFeature {
951    type ParamSpec = glib::ParamSpecEnum;
952    type SetValue = Self;
953    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
954
955    fn param_spec_builder() -> Self::BuilderFn {
956        Self::ParamSpec::builder_with_default
957    }
958}
959
960impl glib::value::ValueType for DevicePadFeature {
961    type Type = Self;
962}
963
964unsafe impl<'a> glib::value::FromValue<'a> for DevicePadFeature {
965    type Checker = glib::value::GenericValueTypeChecker<Self>;
966
967    #[inline]
968    unsafe fn from_value(value: &'a glib::Value) -> Self {
969        skip_assert_initialized!();
970        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
971    }
972}
973
974impl ToValue for DevicePadFeature {
975    #[inline]
976    fn to_value(&self) -> glib::Value {
977        let mut value = glib::Value::for_value_type::<Self>();
978        unsafe {
979            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
980        }
981        value
982    }
983
984    #[inline]
985    fn value_type(&self) -> glib::Type {
986        Self::static_type()
987    }
988}
989
990impl From<DevicePadFeature> for glib::Value {
991    #[inline]
992    fn from(v: DevicePadFeature) -> Self {
993        skip_assert_initialized!();
994        ToValue::to_value(&v)
995    }
996}
997
998/// Indicates the specific type of tool being used being a tablet. Such as an
999/// airbrush, pencil, etc.
1000#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1001#[non_exhaustive]
1002#[doc(alias = "GdkDeviceToolType")]
1003pub enum DeviceToolType {
1004    /// Tool is of an unknown type.
1005    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_UNKNOWN")]
1006    Unknown,
1007    /// Tool is a standard tablet stylus.
1008    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_PEN")]
1009    Pen,
1010    /// Tool is standard tablet eraser.
1011    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_ERASER")]
1012    Eraser,
1013    /// Tool is a brush stylus.
1014    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_BRUSH")]
1015    Brush,
1016    /// Tool is a pencil stylus.
1017    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_PENCIL")]
1018    Pencil,
1019    /// Tool is an airbrush stylus.
1020    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_AIRBRUSH")]
1021    Airbrush,
1022    /// Tool is a mouse.
1023    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_MOUSE")]
1024    Mouse,
1025    /// Tool is a lens cursor.
1026    #[doc(alias = "GDK_DEVICE_TOOL_TYPE_LENS")]
1027    Lens,
1028    #[doc(hidden)]
1029    __Unknown(i32),
1030}
1031
1032#[doc(hidden)]
1033impl IntoGlib for DeviceToolType {
1034    type GlibType = ffi::GdkDeviceToolType;
1035
1036    #[inline]
1037    fn into_glib(self) -> ffi::GdkDeviceToolType {
1038        match self {
1039            Self::Unknown => ffi::GDK_DEVICE_TOOL_TYPE_UNKNOWN,
1040            Self::Pen => ffi::GDK_DEVICE_TOOL_TYPE_PEN,
1041            Self::Eraser => ffi::GDK_DEVICE_TOOL_TYPE_ERASER,
1042            Self::Brush => ffi::GDK_DEVICE_TOOL_TYPE_BRUSH,
1043            Self::Pencil => ffi::GDK_DEVICE_TOOL_TYPE_PENCIL,
1044            Self::Airbrush => ffi::GDK_DEVICE_TOOL_TYPE_AIRBRUSH,
1045            Self::Mouse => ffi::GDK_DEVICE_TOOL_TYPE_MOUSE,
1046            Self::Lens => ffi::GDK_DEVICE_TOOL_TYPE_LENS,
1047            Self::__Unknown(value) => value,
1048        }
1049    }
1050}
1051
1052#[doc(hidden)]
1053impl FromGlib<ffi::GdkDeviceToolType> for DeviceToolType {
1054    #[inline]
1055    unsafe fn from_glib(value: ffi::GdkDeviceToolType) -> Self {
1056        skip_assert_initialized!();
1057
1058        match value {
1059            ffi::GDK_DEVICE_TOOL_TYPE_UNKNOWN => Self::Unknown,
1060            ffi::GDK_DEVICE_TOOL_TYPE_PEN => Self::Pen,
1061            ffi::GDK_DEVICE_TOOL_TYPE_ERASER => Self::Eraser,
1062            ffi::GDK_DEVICE_TOOL_TYPE_BRUSH => Self::Brush,
1063            ffi::GDK_DEVICE_TOOL_TYPE_PENCIL => Self::Pencil,
1064            ffi::GDK_DEVICE_TOOL_TYPE_AIRBRUSH => Self::Airbrush,
1065            ffi::GDK_DEVICE_TOOL_TYPE_MOUSE => Self::Mouse,
1066            ffi::GDK_DEVICE_TOOL_TYPE_LENS => Self::Lens,
1067            value => Self::__Unknown(value),
1068        }
1069    }
1070}
1071
1072impl StaticType for DeviceToolType {
1073    #[inline]
1074    #[doc(alias = "gdk_device_tool_type_get_type")]
1075    fn static_type() -> glib::Type {
1076        unsafe { from_glib(ffi::gdk_device_tool_type_get_type()) }
1077    }
1078}
1079
1080impl glib::HasParamSpec for DeviceToolType {
1081    type ParamSpec = glib::ParamSpecEnum;
1082    type SetValue = Self;
1083    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1084
1085    fn param_spec_builder() -> Self::BuilderFn {
1086        Self::ParamSpec::builder_with_default
1087    }
1088}
1089
1090impl glib::value::ValueType for DeviceToolType {
1091    type Type = Self;
1092}
1093
1094unsafe impl<'a> glib::value::FromValue<'a> for DeviceToolType {
1095    type Checker = glib::value::GenericValueTypeChecker<Self>;
1096
1097    #[inline]
1098    unsafe fn from_value(value: &'a glib::Value) -> Self {
1099        skip_assert_initialized!();
1100        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1101    }
1102}
1103
1104impl ToValue for DeviceToolType {
1105    #[inline]
1106    fn to_value(&self) -> glib::Value {
1107        let mut value = glib::Value::for_value_type::<Self>();
1108        unsafe {
1109            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1110        }
1111        value
1112    }
1113
1114    #[inline]
1115    fn value_type(&self) -> glib::Type {
1116        Self::static_type()
1117    }
1118}
1119
1120impl From<DeviceToolType> for glib::Value {
1121    #[inline]
1122    fn from(v: DeviceToolType) -> Self {
1123        skip_assert_initialized!();
1124        ToValue::to_value(&v)
1125    }
1126}
1127
1128/// Indicates the device type. See [above][GdkDeviceManager.description]
1129/// for more information about the meaning of these device types.
1130#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1131#[non_exhaustive]
1132#[doc(alias = "GdkDeviceType")]
1133pub enum DeviceType {
1134    /// Device is a master (or virtual) device. There will
1135    ///  be an associated focus indicator on the screen.
1136    #[doc(alias = "GDK_DEVICE_TYPE_MASTER")]
1137    Master,
1138    /// Device is a slave (or physical) device.
1139    #[doc(alias = "GDK_DEVICE_TYPE_SLAVE")]
1140    Slave,
1141    /// Device is a physical device, currently not attached to
1142    ///  any virtual device.
1143    #[doc(alias = "GDK_DEVICE_TYPE_FLOATING")]
1144    Floating,
1145    #[doc(hidden)]
1146    __Unknown(i32),
1147}
1148
1149#[doc(hidden)]
1150impl IntoGlib for DeviceType {
1151    type GlibType = ffi::GdkDeviceType;
1152
1153    #[inline]
1154    fn into_glib(self) -> ffi::GdkDeviceType {
1155        match self {
1156            Self::Master => ffi::GDK_DEVICE_TYPE_MASTER,
1157            Self::Slave => ffi::GDK_DEVICE_TYPE_SLAVE,
1158            Self::Floating => ffi::GDK_DEVICE_TYPE_FLOATING,
1159            Self::__Unknown(value) => value,
1160        }
1161    }
1162}
1163
1164#[doc(hidden)]
1165impl FromGlib<ffi::GdkDeviceType> for DeviceType {
1166    #[inline]
1167    unsafe fn from_glib(value: ffi::GdkDeviceType) -> Self {
1168        skip_assert_initialized!();
1169
1170        match value {
1171            ffi::GDK_DEVICE_TYPE_MASTER => Self::Master,
1172            ffi::GDK_DEVICE_TYPE_SLAVE => Self::Slave,
1173            ffi::GDK_DEVICE_TYPE_FLOATING => Self::Floating,
1174            value => Self::__Unknown(value),
1175        }
1176    }
1177}
1178
1179impl StaticType for DeviceType {
1180    #[inline]
1181    #[doc(alias = "gdk_device_type_get_type")]
1182    fn static_type() -> glib::Type {
1183        unsafe { from_glib(ffi::gdk_device_type_get_type()) }
1184    }
1185}
1186
1187impl glib::HasParamSpec for DeviceType {
1188    type ParamSpec = glib::ParamSpecEnum;
1189    type SetValue = Self;
1190    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1191
1192    fn param_spec_builder() -> Self::BuilderFn {
1193        Self::ParamSpec::builder_with_default
1194    }
1195}
1196
1197impl glib::value::ValueType for DeviceType {
1198    type Type = Self;
1199}
1200
1201unsafe impl<'a> glib::value::FromValue<'a> for DeviceType {
1202    type Checker = glib::value::GenericValueTypeChecker<Self>;
1203
1204    #[inline]
1205    unsafe fn from_value(value: &'a glib::Value) -> Self {
1206        skip_assert_initialized!();
1207        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1208    }
1209}
1210
1211impl ToValue for DeviceType {
1212    #[inline]
1213    fn to_value(&self) -> glib::Value {
1214        let mut value = glib::Value::for_value_type::<Self>();
1215        unsafe {
1216            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1217        }
1218        value
1219    }
1220
1221    #[inline]
1222    fn value_type(&self) -> glib::Type {
1223        Self::static_type()
1224    }
1225}
1226
1227impl From<DeviceType> for glib::Value {
1228    #[inline]
1229    fn from(v: DeviceType) -> Self {
1230        skip_assert_initialized!();
1231        ToValue::to_value(&v)
1232    }
1233}
1234
1235/// Used in [`DragContext`][crate::DragContext] to the reason of a cancelled DND operation.
1236#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1237#[non_exhaustive]
1238#[doc(alias = "GdkDragCancelReason")]
1239pub enum DragCancelReason {
1240    /// There is no suitable drop target.
1241    #[doc(alias = "GDK_DRAG_CANCEL_NO_TARGET")]
1242    NoTarget,
1243    /// Drag cancelled by the user
1244    #[doc(alias = "GDK_DRAG_CANCEL_USER_CANCELLED")]
1245    UserCancelled,
1246    /// Unspecified error.
1247    #[doc(alias = "GDK_DRAG_CANCEL_ERROR")]
1248    Error,
1249    #[doc(hidden)]
1250    __Unknown(i32),
1251}
1252
1253#[doc(hidden)]
1254impl IntoGlib for DragCancelReason {
1255    type GlibType = ffi::GdkDragCancelReason;
1256
1257    #[inline]
1258    fn into_glib(self) -> ffi::GdkDragCancelReason {
1259        match self {
1260            Self::NoTarget => ffi::GDK_DRAG_CANCEL_NO_TARGET,
1261            Self::UserCancelled => ffi::GDK_DRAG_CANCEL_USER_CANCELLED,
1262            Self::Error => ffi::GDK_DRAG_CANCEL_ERROR,
1263            Self::__Unknown(value) => value,
1264        }
1265    }
1266}
1267
1268#[doc(hidden)]
1269impl FromGlib<ffi::GdkDragCancelReason> for DragCancelReason {
1270    #[inline]
1271    unsafe fn from_glib(value: ffi::GdkDragCancelReason) -> Self {
1272        skip_assert_initialized!();
1273
1274        match value {
1275            ffi::GDK_DRAG_CANCEL_NO_TARGET => Self::NoTarget,
1276            ffi::GDK_DRAG_CANCEL_USER_CANCELLED => Self::UserCancelled,
1277            ffi::GDK_DRAG_CANCEL_ERROR => Self::Error,
1278            value => Self::__Unknown(value),
1279        }
1280    }
1281}
1282
1283impl StaticType for DragCancelReason {
1284    #[inline]
1285    #[doc(alias = "gdk_drag_cancel_reason_get_type")]
1286    fn static_type() -> glib::Type {
1287        unsafe { from_glib(ffi::gdk_drag_cancel_reason_get_type()) }
1288    }
1289}
1290
1291impl glib::HasParamSpec for DragCancelReason {
1292    type ParamSpec = glib::ParamSpecEnum;
1293    type SetValue = Self;
1294    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1295
1296    fn param_spec_builder() -> Self::BuilderFn {
1297        Self::ParamSpec::builder_with_default
1298    }
1299}
1300
1301impl glib::value::ValueType for DragCancelReason {
1302    type Type = Self;
1303}
1304
1305unsafe impl<'a> glib::value::FromValue<'a> for DragCancelReason {
1306    type Checker = glib::value::GenericValueTypeChecker<Self>;
1307
1308    #[inline]
1309    unsafe fn from_value(value: &'a glib::Value) -> Self {
1310        skip_assert_initialized!();
1311        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1312    }
1313}
1314
1315impl ToValue for DragCancelReason {
1316    #[inline]
1317    fn to_value(&self) -> glib::Value {
1318        let mut value = glib::Value::for_value_type::<Self>();
1319        unsafe {
1320            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1321        }
1322        value
1323    }
1324
1325    #[inline]
1326    fn value_type(&self) -> glib::Type {
1327        Self::static_type()
1328    }
1329}
1330
1331impl From<DragCancelReason> for glib::Value {
1332    #[inline]
1333    fn from(v: DragCancelReason) -> Self {
1334        skip_assert_initialized!();
1335        ToValue::to_value(&v)
1336    }
1337}
1338
1339/// Used in [`DragContext`][crate::DragContext] to indicate the protocol according to
1340/// which DND is done.
1341#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1342#[non_exhaustive]
1343#[doc(alias = "GdkDragProtocol")]
1344pub enum DragProtocol {
1345    /// no protocol.
1346    #[doc(alias = "GDK_DRAG_PROTO_NONE")]
1347    None,
1348    /// The Motif DND protocol. No longer supported
1349    #[doc(alias = "GDK_DRAG_PROTO_MOTIF")]
1350    Motif,
1351    /// The Xdnd protocol.
1352    #[doc(alias = "GDK_DRAG_PROTO_XDND")]
1353    Xdnd,
1354    /// An extension to the Xdnd protocol for
1355    ///  unclaimed root window drops.
1356    #[doc(alias = "GDK_DRAG_PROTO_ROOTWIN")]
1357    Rootwin,
1358    /// The simple WM_DROPFILES protocol.
1359    #[doc(alias = "GDK_DRAG_PROTO_WIN32_DROPFILES")]
1360    Win32Dropfiles,
1361    /// The complex OLE2 DND protocol (not implemented).
1362    #[doc(alias = "GDK_DRAG_PROTO_OLE2")]
1363    Ole2,
1364    /// Intra-application DND.
1365    #[doc(alias = "GDK_DRAG_PROTO_LOCAL")]
1366    Local,
1367    /// Wayland DND protocol.
1368    #[doc(alias = "GDK_DRAG_PROTO_WAYLAND")]
1369    Wayland,
1370    #[doc(hidden)]
1371    __Unknown(i32),
1372}
1373
1374#[doc(hidden)]
1375impl IntoGlib for DragProtocol {
1376    type GlibType = ffi::GdkDragProtocol;
1377
1378    #[inline]
1379    fn into_glib(self) -> ffi::GdkDragProtocol {
1380        match self {
1381            Self::None => ffi::GDK_DRAG_PROTO_NONE,
1382            Self::Motif => ffi::GDK_DRAG_PROTO_MOTIF,
1383            Self::Xdnd => ffi::GDK_DRAG_PROTO_XDND,
1384            Self::Rootwin => ffi::GDK_DRAG_PROTO_ROOTWIN,
1385            Self::Win32Dropfiles => ffi::GDK_DRAG_PROTO_WIN32_DROPFILES,
1386            Self::Ole2 => ffi::GDK_DRAG_PROTO_OLE2,
1387            Self::Local => ffi::GDK_DRAG_PROTO_LOCAL,
1388            Self::Wayland => ffi::GDK_DRAG_PROTO_WAYLAND,
1389            Self::__Unknown(value) => value,
1390        }
1391    }
1392}
1393
1394#[doc(hidden)]
1395impl FromGlib<ffi::GdkDragProtocol> for DragProtocol {
1396    #[inline]
1397    unsafe fn from_glib(value: ffi::GdkDragProtocol) -> Self {
1398        skip_assert_initialized!();
1399
1400        match value {
1401            ffi::GDK_DRAG_PROTO_NONE => Self::None,
1402            ffi::GDK_DRAG_PROTO_MOTIF => Self::Motif,
1403            ffi::GDK_DRAG_PROTO_XDND => Self::Xdnd,
1404            ffi::GDK_DRAG_PROTO_ROOTWIN => Self::Rootwin,
1405            ffi::GDK_DRAG_PROTO_WIN32_DROPFILES => Self::Win32Dropfiles,
1406            ffi::GDK_DRAG_PROTO_OLE2 => Self::Ole2,
1407            ffi::GDK_DRAG_PROTO_LOCAL => Self::Local,
1408            ffi::GDK_DRAG_PROTO_WAYLAND => Self::Wayland,
1409            value => Self::__Unknown(value),
1410        }
1411    }
1412}
1413
1414impl StaticType for DragProtocol {
1415    #[inline]
1416    #[doc(alias = "gdk_drag_protocol_get_type")]
1417    fn static_type() -> glib::Type {
1418        unsafe { from_glib(ffi::gdk_drag_protocol_get_type()) }
1419    }
1420}
1421
1422impl glib::HasParamSpec for DragProtocol {
1423    type ParamSpec = glib::ParamSpecEnum;
1424    type SetValue = Self;
1425    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1426
1427    fn param_spec_builder() -> Self::BuilderFn {
1428        Self::ParamSpec::builder_with_default
1429    }
1430}
1431
1432impl glib::value::ValueType for DragProtocol {
1433    type Type = Self;
1434}
1435
1436unsafe impl<'a> glib::value::FromValue<'a> for DragProtocol {
1437    type Checker = glib::value::GenericValueTypeChecker<Self>;
1438
1439    #[inline]
1440    unsafe fn from_value(value: &'a glib::Value) -> Self {
1441        skip_assert_initialized!();
1442        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1443    }
1444}
1445
1446impl ToValue for DragProtocol {
1447    #[inline]
1448    fn to_value(&self) -> glib::Value {
1449        let mut value = glib::Value::for_value_type::<Self>();
1450        unsafe {
1451            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1452        }
1453        value
1454    }
1455
1456    #[inline]
1457    fn value_type(&self) -> glib::Type {
1458        Self::static_type()
1459    }
1460}
1461
1462impl From<DragProtocol> for glib::Value {
1463    #[inline]
1464    fn from(v: DragProtocol) -> Self {
1465        skip_assert_initialized!();
1466        ToValue::to_value(&v)
1467    }
1468}
1469
1470/// Specifies the type of the event.
1471///
1472/// Do not confuse these events with the signals that GTK+ widgets emit.
1473/// Although many of these events result in corresponding signals being emitted,
1474/// the events are often transformed or filtered along the way.
1475///
1476/// In some language bindings, the values [`_2buttonPress`][Self::_2buttonPress] and
1477/// [`_3buttonPress`][Self::_3buttonPress] would translate into something syntactically
1478/// invalid (eg `Gdk.EventType.2ButtonPress`, where a
1479/// symbol is not allowed to start with a number). In that case, the
1480/// aliases [`DoubleButtonPress`][Self::DoubleButtonPress] and [`TripleButtonPress`][Self::TripleButtonPress] can
1481/// be used instead.
1482#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1483#[non_exhaustive]
1484#[doc(alias = "GdkEventType")]
1485pub enum EventType {
1486    /// a special code to indicate a null event.
1487    #[doc(alias = "GDK_NOTHING")]
1488    Nothing,
1489    /// the window manager has requested that the toplevel window be
1490    ///  hidden or destroyed, usually when the user clicks on a special icon in the
1491    ///  title bar.
1492    #[doc(alias = "GDK_DELETE")]
1493    Delete,
1494    /// the window has been destroyed.
1495    #[doc(alias = "GDK_DESTROY")]
1496    Destroy,
1497    /// all or part of the window has become visible and needs to be
1498    ///  redrawn.
1499    #[doc(alias = "GDK_EXPOSE")]
1500    Expose,
1501    /// the pointer (usually a mouse) has moved.
1502    #[doc(alias = "GDK_MOTION_NOTIFY")]
1503    MotionNotify,
1504    /// a mouse button has been pressed.
1505    #[doc(alias = "GDK_BUTTON_PRESS")]
1506    ButtonPress,
1507    /// a mouse button has been double-clicked (clicked twice
1508    ///  within a short period of time). Note that each click also generates a
1509    ///  [`ButtonPress`][Self::ButtonPress] event.
1510    #[doc(alias = "GDK_2BUTTON_PRESS")]
1511    _2buttonPress,
1512    /// a mouse button has been clicked 3 times in a short period
1513    ///  of time. Note that each click also generates a [`ButtonPress`][Self::ButtonPress] event.
1514    #[doc(alias = "GDK_3BUTTON_PRESS")]
1515    _3buttonPress,
1516    /// a mouse button has been released.
1517    #[doc(alias = "GDK_BUTTON_RELEASE")]
1518    ButtonRelease,
1519    /// a key has been pressed.
1520    #[doc(alias = "GDK_KEY_PRESS")]
1521    KeyPress,
1522    /// a key has been released.
1523    #[doc(alias = "GDK_KEY_RELEASE")]
1524    KeyRelease,
1525    /// the pointer has entered the window.
1526    #[doc(alias = "GDK_ENTER_NOTIFY")]
1527    EnterNotify,
1528    /// the pointer has left the window.
1529    #[doc(alias = "GDK_LEAVE_NOTIFY")]
1530    LeaveNotify,
1531    /// the keyboard focus has entered or left the window.
1532    #[doc(alias = "GDK_FOCUS_CHANGE")]
1533    FocusChange,
1534    /// the size, position or stacking order of the window has changed.
1535    ///  Note that GTK+ discards these events for [`WindowType::Child`][crate::WindowType::Child] windows.
1536    #[doc(alias = "GDK_CONFIGURE")]
1537    Configure,
1538    /// the window has been mapped.
1539    #[doc(alias = "GDK_MAP")]
1540    Map,
1541    /// the window has been unmapped.
1542    #[doc(alias = "GDK_UNMAP")]
1543    Unmap,
1544    /// a property on the window has been changed or deleted.
1545    #[doc(alias = "GDK_PROPERTY_NOTIFY")]
1546    PropertyNotify,
1547    /// the application has lost ownership of a selection.
1548    #[doc(alias = "GDK_SELECTION_CLEAR")]
1549    SelectionClear,
1550    /// another application has requested a selection.
1551    #[doc(alias = "GDK_SELECTION_REQUEST")]
1552    SelectionRequest,
1553    /// a selection has been received.
1554    #[doc(alias = "GDK_SELECTION_NOTIFY")]
1555    SelectionNotify,
1556    /// an input device has moved into contact with a sensing
1557    ///  surface (e.g. a touchscreen or graphics tablet).
1558    #[doc(alias = "GDK_PROXIMITY_IN")]
1559    ProximityIn,
1560    /// an input device has moved out of contact with a sensing
1561    ///  surface.
1562    #[doc(alias = "GDK_PROXIMITY_OUT")]
1563    ProximityOut,
1564    /// the mouse has entered the window while a drag is in progress.
1565    #[doc(alias = "GDK_DRAG_ENTER")]
1566    DragEnter,
1567    /// the mouse has left the window while a drag is in progress.
1568    #[doc(alias = "GDK_DRAG_LEAVE")]
1569    DragLeave,
1570    /// the mouse has moved in the window while a drag is in
1571    ///  progress.
1572    #[doc(alias = "GDK_DRAG_MOTION")]
1573    DragMotion,
1574    /// the status of the drag operation initiated by the window
1575    ///  has changed.
1576    #[doc(alias = "GDK_DRAG_STATUS")]
1577    DragStatus,
1578    /// a drop operation onto the window has started.
1579    #[doc(alias = "GDK_DROP_START")]
1580    DropStart,
1581    /// the drop operation initiated by the window has completed.
1582    #[doc(alias = "GDK_DROP_FINISHED")]
1583    DropFinished,
1584    /// a message has been received from another application.
1585    #[doc(alias = "GDK_CLIENT_EVENT")]
1586    ClientEvent,
1587    /// the window visibility status has changed.
1588    #[doc(alias = "GDK_VISIBILITY_NOTIFY")]
1589    VisibilityNotify,
1590    /// the scroll wheel was turned
1591    #[doc(alias = "GDK_SCROLL")]
1592    Scroll,
1593    /// the state of a window has changed. See [`WindowState`][crate::WindowState]
1594    ///  for the possible window states
1595    #[doc(alias = "GDK_WINDOW_STATE")]
1596    WindowState,
1597    /// a setting has been modified.
1598    #[doc(alias = "GDK_SETTING")]
1599    Setting,
1600    /// the owner of a selection has changed. This event type
1601    ///  was added in 2.6
1602    #[doc(alias = "GDK_OWNER_CHANGE")]
1603    OwnerChange,
1604    /// a pointer or keyboard grab was broken. This event type
1605    ///  was added in 2.8.
1606    #[doc(alias = "GDK_GRAB_BROKEN")]
1607    GrabBroken,
1608    /// the content of the window has been changed. This event type
1609    ///  was added in 2.14.
1610    #[doc(alias = "GDK_DAMAGE")]
1611    Damage,
1612    /// A new touch event sequence has just started. This event
1613    ///  type was added in 3.4.
1614    #[doc(alias = "GDK_TOUCH_BEGIN")]
1615    TouchBegin,
1616    /// A touch event sequence has been updated. This event type
1617    ///  was added in 3.4.
1618    #[doc(alias = "GDK_TOUCH_UPDATE")]
1619    TouchUpdate,
1620    /// A touch event sequence has finished. This event type
1621    ///  was added in 3.4.
1622    #[doc(alias = "GDK_TOUCH_END")]
1623    TouchEnd,
1624    /// A touch event sequence has been canceled. This event type
1625    ///  was added in 3.4.
1626    #[doc(alias = "GDK_TOUCH_CANCEL")]
1627    TouchCancel,
1628    /// A touchpad swipe gesture event, the current state
1629    ///  is determined by its phase field. This event type was added in 3.18.
1630    #[doc(alias = "GDK_TOUCHPAD_SWIPE")]
1631    TouchpadSwipe,
1632    /// A touchpad pinch gesture event, the current state
1633    ///  is determined by its phase field. This event type was added in 3.18.
1634    #[doc(alias = "GDK_TOUCHPAD_PINCH")]
1635    TouchpadPinch,
1636    /// A tablet pad button press event. This event type
1637    ///  was added in 3.22.
1638    #[doc(alias = "GDK_PAD_BUTTON_PRESS")]
1639    PadButtonPress,
1640    /// A tablet pad button release event. This event type
1641    ///  was added in 3.22.
1642    #[doc(alias = "GDK_PAD_BUTTON_RELEASE")]
1643    PadButtonRelease,
1644    /// A tablet pad axis event from a "ring". This event type was
1645    ///  added in 3.22.
1646    #[doc(alias = "GDK_PAD_RING")]
1647    PadRing,
1648    /// A tablet pad axis event from a "strip". This event type was
1649    ///  added in 3.22.
1650    #[doc(alias = "GDK_PAD_STRIP")]
1651    PadStrip,
1652    /// A tablet pad group mode change. This event type was
1653    ///  added in 3.22.
1654    #[doc(alias = "GDK_PAD_GROUP_MODE")]
1655    PadGroupMode,
1656    /// marks the end of the GdkEventType enumeration. Added in 2.18
1657    #[doc(alias = "GDK_EVENT_LAST")]
1658    EventLast,
1659    #[doc(hidden)]
1660    __Unknown(i32),
1661}
1662
1663#[doc(hidden)]
1664impl IntoGlib for EventType {
1665    type GlibType = ffi::GdkEventType;
1666
1667    fn into_glib(self) -> ffi::GdkEventType {
1668        match self {
1669            Self::Nothing => ffi::GDK_NOTHING,
1670            Self::Delete => ffi::GDK_DELETE,
1671            Self::Destroy => ffi::GDK_DESTROY,
1672            Self::Expose => ffi::GDK_EXPOSE,
1673            Self::MotionNotify => ffi::GDK_MOTION_NOTIFY,
1674            Self::ButtonPress => ffi::GDK_BUTTON_PRESS,
1675            Self::_2buttonPress => ffi::GDK_2BUTTON_PRESS,
1676            Self::_3buttonPress => ffi::GDK_3BUTTON_PRESS,
1677            Self::ButtonRelease => ffi::GDK_BUTTON_RELEASE,
1678            Self::KeyPress => ffi::GDK_KEY_PRESS,
1679            Self::KeyRelease => ffi::GDK_KEY_RELEASE,
1680            Self::EnterNotify => ffi::GDK_ENTER_NOTIFY,
1681            Self::LeaveNotify => ffi::GDK_LEAVE_NOTIFY,
1682            Self::FocusChange => ffi::GDK_FOCUS_CHANGE,
1683            Self::Configure => ffi::GDK_CONFIGURE,
1684            Self::Map => ffi::GDK_MAP,
1685            Self::Unmap => ffi::GDK_UNMAP,
1686            Self::PropertyNotify => ffi::GDK_PROPERTY_NOTIFY,
1687            Self::SelectionClear => ffi::GDK_SELECTION_CLEAR,
1688            Self::SelectionRequest => ffi::GDK_SELECTION_REQUEST,
1689            Self::SelectionNotify => ffi::GDK_SELECTION_NOTIFY,
1690            Self::ProximityIn => ffi::GDK_PROXIMITY_IN,
1691            Self::ProximityOut => ffi::GDK_PROXIMITY_OUT,
1692            Self::DragEnter => ffi::GDK_DRAG_ENTER,
1693            Self::DragLeave => ffi::GDK_DRAG_LEAVE,
1694            Self::DragMotion => ffi::GDK_DRAG_MOTION,
1695            Self::DragStatus => ffi::GDK_DRAG_STATUS,
1696            Self::DropStart => ffi::GDK_DROP_START,
1697            Self::DropFinished => ffi::GDK_DROP_FINISHED,
1698            Self::ClientEvent => ffi::GDK_CLIENT_EVENT,
1699            Self::VisibilityNotify => ffi::GDK_VISIBILITY_NOTIFY,
1700            Self::Scroll => ffi::GDK_SCROLL,
1701            Self::WindowState => ffi::GDK_WINDOW_STATE,
1702            Self::Setting => ffi::GDK_SETTING,
1703            Self::OwnerChange => ffi::GDK_OWNER_CHANGE,
1704            Self::GrabBroken => ffi::GDK_GRAB_BROKEN,
1705            Self::Damage => ffi::GDK_DAMAGE,
1706            Self::TouchBegin => ffi::GDK_TOUCH_BEGIN,
1707            Self::TouchUpdate => ffi::GDK_TOUCH_UPDATE,
1708            Self::TouchEnd => ffi::GDK_TOUCH_END,
1709            Self::TouchCancel => ffi::GDK_TOUCH_CANCEL,
1710            Self::TouchpadSwipe => ffi::GDK_TOUCHPAD_SWIPE,
1711            Self::TouchpadPinch => ffi::GDK_TOUCHPAD_PINCH,
1712            Self::PadButtonPress => ffi::GDK_PAD_BUTTON_PRESS,
1713            Self::PadButtonRelease => ffi::GDK_PAD_BUTTON_RELEASE,
1714            Self::PadRing => ffi::GDK_PAD_RING,
1715            Self::PadStrip => ffi::GDK_PAD_STRIP,
1716            Self::PadGroupMode => ffi::GDK_PAD_GROUP_MODE,
1717            Self::EventLast => ffi::GDK_EVENT_LAST,
1718            Self::__Unknown(value) => value,
1719        }
1720    }
1721}
1722
1723#[doc(hidden)]
1724impl FromGlib<ffi::GdkEventType> for EventType {
1725    unsafe fn from_glib(value: ffi::GdkEventType) -> Self {
1726        skip_assert_initialized!();
1727
1728        match value {
1729            ffi::GDK_NOTHING => Self::Nothing,
1730            ffi::GDK_DELETE => Self::Delete,
1731            ffi::GDK_DESTROY => Self::Destroy,
1732            ffi::GDK_EXPOSE => Self::Expose,
1733            ffi::GDK_MOTION_NOTIFY => Self::MotionNotify,
1734            ffi::GDK_BUTTON_PRESS => Self::ButtonPress,
1735            ffi::GDK_2BUTTON_PRESS => Self::_2buttonPress,
1736            ffi::GDK_3BUTTON_PRESS => Self::_3buttonPress,
1737            ffi::GDK_BUTTON_RELEASE => Self::ButtonRelease,
1738            ffi::GDK_KEY_PRESS => Self::KeyPress,
1739            ffi::GDK_KEY_RELEASE => Self::KeyRelease,
1740            ffi::GDK_ENTER_NOTIFY => Self::EnterNotify,
1741            ffi::GDK_LEAVE_NOTIFY => Self::LeaveNotify,
1742            ffi::GDK_FOCUS_CHANGE => Self::FocusChange,
1743            ffi::GDK_CONFIGURE => Self::Configure,
1744            ffi::GDK_MAP => Self::Map,
1745            ffi::GDK_UNMAP => Self::Unmap,
1746            ffi::GDK_PROPERTY_NOTIFY => Self::PropertyNotify,
1747            ffi::GDK_SELECTION_CLEAR => Self::SelectionClear,
1748            ffi::GDK_SELECTION_REQUEST => Self::SelectionRequest,
1749            ffi::GDK_SELECTION_NOTIFY => Self::SelectionNotify,
1750            ffi::GDK_PROXIMITY_IN => Self::ProximityIn,
1751            ffi::GDK_PROXIMITY_OUT => Self::ProximityOut,
1752            ffi::GDK_DRAG_ENTER => Self::DragEnter,
1753            ffi::GDK_DRAG_LEAVE => Self::DragLeave,
1754            ffi::GDK_DRAG_MOTION => Self::DragMotion,
1755            ffi::GDK_DRAG_STATUS => Self::DragStatus,
1756            ffi::GDK_DROP_START => Self::DropStart,
1757            ffi::GDK_DROP_FINISHED => Self::DropFinished,
1758            ffi::GDK_CLIENT_EVENT => Self::ClientEvent,
1759            ffi::GDK_VISIBILITY_NOTIFY => Self::VisibilityNotify,
1760            ffi::GDK_SCROLL => Self::Scroll,
1761            ffi::GDK_WINDOW_STATE => Self::WindowState,
1762            ffi::GDK_SETTING => Self::Setting,
1763            ffi::GDK_OWNER_CHANGE => Self::OwnerChange,
1764            ffi::GDK_GRAB_BROKEN => Self::GrabBroken,
1765            ffi::GDK_DAMAGE => Self::Damage,
1766            ffi::GDK_TOUCH_BEGIN => Self::TouchBegin,
1767            ffi::GDK_TOUCH_UPDATE => Self::TouchUpdate,
1768            ffi::GDK_TOUCH_END => Self::TouchEnd,
1769            ffi::GDK_TOUCH_CANCEL => Self::TouchCancel,
1770            ffi::GDK_TOUCHPAD_SWIPE => Self::TouchpadSwipe,
1771            ffi::GDK_TOUCHPAD_PINCH => Self::TouchpadPinch,
1772            ffi::GDK_PAD_BUTTON_PRESS => Self::PadButtonPress,
1773            ffi::GDK_PAD_BUTTON_RELEASE => Self::PadButtonRelease,
1774            ffi::GDK_PAD_RING => Self::PadRing,
1775            ffi::GDK_PAD_STRIP => Self::PadStrip,
1776            ffi::GDK_PAD_GROUP_MODE => Self::PadGroupMode,
1777            ffi::GDK_EVENT_LAST => Self::EventLast,
1778            value => Self::__Unknown(value),
1779        }
1780    }
1781}
1782
1783impl StaticType for EventType {
1784    #[inline]
1785    #[doc(alias = "gdk_event_type_get_type")]
1786    fn static_type() -> glib::Type {
1787        unsafe { from_glib(ffi::gdk_event_type_get_type()) }
1788    }
1789}
1790
1791impl glib::HasParamSpec for EventType {
1792    type ParamSpec = glib::ParamSpecEnum;
1793    type SetValue = Self;
1794    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1795
1796    fn param_spec_builder() -> Self::BuilderFn {
1797        Self::ParamSpec::builder_with_default
1798    }
1799}
1800
1801impl glib::value::ValueType for EventType {
1802    type Type = Self;
1803}
1804
1805unsafe impl<'a> glib::value::FromValue<'a> for EventType {
1806    type Checker = glib::value::GenericValueTypeChecker<Self>;
1807
1808    #[inline]
1809    unsafe fn from_value(value: &'a glib::Value) -> Self {
1810        skip_assert_initialized!();
1811        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1812    }
1813}
1814
1815impl ToValue for EventType {
1816    #[inline]
1817    fn to_value(&self) -> glib::Value {
1818        let mut value = glib::Value::for_value_type::<Self>();
1819        unsafe {
1820            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1821        }
1822        value
1823    }
1824
1825    #[inline]
1826    fn value_type(&self) -> glib::Type {
1827        Self::static_type()
1828    }
1829}
1830
1831impl From<EventType> for glib::Value {
1832    #[inline]
1833    fn from(v: EventType) -> Self {
1834        skip_assert_initialized!();
1835        ToValue::to_value(&v)
1836    }
1837}
1838
1839/// Indicates which monitor (in a multi-head setup) a window should span over
1840/// when in fullscreen mode.
1841#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1842#[non_exhaustive]
1843#[doc(alias = "GdkFullscreenMode")]
1844pub enum FullscreenMode {
1845    /// Fullscreen on current monitor only.
1846    #[doc(alias = "GDK_FULLSCREEN_ON_CURRENT_MONITOR")]
1847    CurrentMonitor,
1848    /// Span across all monitors when fullscreen.
1849    #[doc(alias = "GDK_FULLSCREEN_ON_ALL_MONITORS")]
1850    AllMonitors,
1851    #[doc(hidden)]
1852    __Unknown(i32),
1853}
1854
1855#[doc(hidden)]
1856impl IntoGlib for FullscreenMode {
1857    type GlibType = ffi::GdkFullscreenMode;
1858
1859    #[inline]
1860    fn into_glib(self) -> ffi::GdkFullscreenMode {
1861        match self {
1862            Self::CurrentMonitor => ffi::GDK_FULLSCREEN_ON_CURRENT_MONITOR,
1863            Self::AllMonitors => ffi::GDK_FULLSCREEN_ON_ALL_MONITORS,
1864            Self::__Unknown(value) => value,
1865        }
1866    }
1867}
1868
1869#[doc(hidden)]
1870impl FromGlib<ffi::GdkFullscreenMode> for FullscreenMode {
1871    #[inline]
1872    unsafe fn from_glib(value: ffi::GdkFullscreenMode) -> Self {
1873        skip_assert_initialized!();
1874
1875        match value {
1876            ffi::GDK_FULLSCREEN_ON_CURRENT_MONITOR => Self::CurrentMonitor,
1877            ffi::GDK_FULLSCREEN_ON_ALL_MONITORS => Self::AllMonitors,
1878            value => Self::__Unknown(value),
1879        }
1880    }
1881}
1882
1883impl StaticType for FullscreenMode {
1884    #[inline]
1885    #[doc(alias = "gdk_fullscreen_mode_get_type")]
1886    fn static_type() -> glib::Type {
1887        unsafe { from_glib(ffi::gdk_fullscreen_mode_get_type()) }
1888    }
1889}
1890
1891impl glib::HasParamSpec for FullscreenMode {
1892    type ParamSpec = glib::ParamSpecEnum;
1893    type SetValue = Self;
1894    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1895
1896    fn param_spec_builder() -> Self::BuilderFn {
1897        Self::ParamSpec::builder_with_default
1898    }
1899}
1900
1901impl glib::value::ValueType for FullscreenMode {
1902    type Type = Self;
1903}
1904
1905unsafe impl<'a> glib::value::FromValue<'a> for FullscreenMode {
1906    type Checker = glib::value::GenericValueTypeChecker<Self>;
1907
1908    #[inline]
1909    unsafe fn from_value(value: &'a glib::Value) -> Self {
1910        skip_assert_initialized!();
1911        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1912    }
1913}
1914
1915impl ToValue for FullscreenMode {
1916    #[inline]
1917    fn to_value(&self) -> glib::Value {
1918        let mut value = glib::Value::for_value_type::<Self>();
1919        unsafe {
1920            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1921        }
1922        value
1923    }
1924
1925    #[inline]
1926    fn value_type(&self) -> glib::Type {
1927        Self::static_type()
1928    }
1929}
1930
1931impl From<FullscreenMode> for glib::Value {
1932    #[inline]
1933    fn from(v: FullscreenMode) -> Self {
1934        skip_assert_initialized!();
1935        ToValue::to_value(&v)
1936    }
1937}
1938
1939/// Error enumeration for [`GLContext`][crate::GLContext].
1940#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1941#[non_exhaustive]
1942#[doc(alias = "GdkGLError")]
1943pub enum GLError {
1944    /// OpenGL support is not available
1945    #[doc(alias = "GDK_GL_ERROR_NOT_AVAILABLE")]
1946    NotAvailable,
1947    /// The requested visual format is not supported
1948    #[doc(alias = "GDK_GL_ERROR_UNSUPPORTED_FORMAT")]
1949    UnsupportedFormat,
1950    /// The requested profile is not supported
1951    #[doc(alias = "GDK_GL_ERROR_UNSUPPORTED_PROFILE")]
1952    UnsupportedProfile,
1953    #[doc(hidden)]
1954    __Unknown(i32),
1955}
1956
1957#[doc(hidden)]
1958impl IntoGlib for GLError {
1959    type GlibType = ffi::GdkGLError;
1960
1961    #[inline]
1962    fn into_glib(self) -> ffi::GdkGLError {
1963        match self {
1964            Self::NotAvailable => ffi::GDK_GL_ERROR_NOT_AVAILABLE,
1965            Self::UnsupportedFormat => ffi::GDK_GL_ERROR_UNSUPPORTED_FORMAT,
1966            Self::UnsupportedProfile => ffi::GDK_GL_ERROR_UNSUPPORTED_PROFILE,
1967            Self::__Unknown(value) => value,
1968        }
1969    }
1970}
1971
1972#[doc(hidden)]
1973impl FromGlib<ffi::GdkGLError> for GLError {
1974    #[inline]
1975    unsafe fn from_glib(value: ffi::GdkGLError) -> Self {
1976        skip_assert_initialized!();
1977
1978        match value {
1979            ffi::GDK_GL_ERROR_NOT_AVAILABLE => Self::NotAvailable,
1980            ffi::GDK_GL_ERROR_UNSUPPORTED_FORMAT => Self::UnsupportedFormat,
1981            ffi::GDK_GL_ERROR_UNSUPPORTED_PROFILE => Self::UnsupportedProfile,
1982            value => Self::__Unknown(value),
1983        }
1984    }
1985}
1986
1987impl glib::error::ErrorDomain for GLError {
1988    #[inline]
1989    fn domain() -> glib::Quark {
1990        skip_assert_initialized!();
1991
1992        unsafe { from_glib(ffi::gdk_gl_error_quark()) }
1993    }
1994
1995    #[inline]
1996    fn code(self) -> i32 {
1997        self.into_glib()
1998    }
1999
2000    #[inline]
2001    #[allow(clippy::match_single_binding)]
2002    fn from(code: i32) -> Option<Self> {
2003        skip_assert_initialized!();
2004        match unsafe { from_glib(code) } {
2005            value => Some(value),
2006        }
2007    }
2008}
2009
2010impl StaticType for GLError {
2011    #[inline]
2012    #[doc(alias = "gdk_gl_error_get_type")]
2013    fn static_type() -> glib::Type {
2014        unsafe { from_glib(ffi::gdk_gl_error_get_type()) }
2015    }
2016}
2017
2018impl glib::HasParamSpec for GLError {
2019    type ParamSpec = glib::ParamSpecEnum;
2020    type SetValue = Self;
2021    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2022
2023    fn param_spec_builder() -> Self::BuilderFn {
2024        Self::ParamSpec::builder_with_default
2025    }
2026}
2027
2028impl glib::value::ValueType for GLError {
2029    type Type = Self;
2030}
2031
2032unsafe impl<'a> glib::value::FromValue<'a> for GLError {
2033    type Checker = glib::value::GenericValueTypeChecker<Self>;
2034
2035    #[inline]
2036    unsafe fn from_value(value: &'a glib::Value) -> Self {
2037        skip_assert_initialized!();
2038        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2039    }
2040}
2041
2042impl ToValue for GLError {
2043    #[inline]
2044    fn to_value(&self) -> glib::Value {
2045        let mut value = glib::Value::for_value_type::<Self>();
2046        unsafe {
2047            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2048        }
2049        value
2050    }
2051
2052    #[inline]
2053    fn value_type(&self) -> glib::Type {
2054        Self::static_type()
2055    }
2056}
2057
2058impl From<GLError> for glib::Value {
2059    #[inline]
2060    fn from(v: GLError) -> Self {
2061        skip_assert_initialized!();
2062        ToValue::to_value(&v)
2063    }
2064}
2065
2066/// Defines how device grabs interact with other devices.
2067#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2068#[non_exhaustive]
2069#[doc(alias = "GdkGrabOwnership")]
2070pub enum GrabOwnership {
2071    /// All other devices’ events are allowed.
2072    #[doc(alias = "GDK_OWNERSHIP_NONE")]
2073    None,
2074    /// Other devices’ events are blocked for the grab window.
2075    #[doc(alias = "GDK_OWNERSHIP_WINDOW")]
2076    Window,
2077    /// Other devices’ events are blocked for the whole application.
2078    #[doc(alias = "GDK_OWNERSHIP_APPLICATION")]
2079    Application,
2080    #[doc(hidden)]
2081    __Unknown(i32),
2082}
2083
2084#[doc(hidden)]
2085impl IntoGlib for GrabOwnership {
2086    type GlibType = ffi::GdkGrabOwnership;
2087
2088    #[inline]
2089    fn into_glib(self) -> ffi::GdkGrabOwnership {
2090        match self {
2091            Self::None => ffi::GDK_OWNERSHIP_NONE,
2092            Self::Window => ffi::GDK_OWNERSHIP_WINDOW,
2093            Self::Application => ffi::GDK_OWNERSHIP_APPLICATION,
2094            Self::__Unknown(value) => value,
2095        }
2096    }
2097}
2098
2099#[doc(hidden)]
2100impl FromGlib<ffi::GdkGrabOwnership> for GrabOwnership {
2101    #[inline]
2102    unsafe fn from_glib(value: ffi::GdkGrabOwnership) -> Self {
2103        skip_assert_initialized!();
2104
2105        match value {
2106            ffi::GDK_OWNERSHIP_NONE => Self::None,
2107            ffi::GDK_OWNERSHIP_WINDOW => Self::Window,
2108            ffi::GDK_OWNERSHIP_APPLICATION => Self::Application,
2109            value => Self::__Unknown(value),
2110        }
2111    }
2112}
2113
2114impl StaticType for GrabOwnership {
2115    #[inline]
2116    #[doc(alias = "gdk_grab_ownership_get_type")]
2117    fn static_type() -> glib::Type {
2118        unsafe { from_glib(ffi::gdk_grab_ownership_get_type()) }
2119    }
2120}
2121
2122impl glib::HasParamSpec for GrabOwnership {
2123    type ParamSpec = glib::ParamSpecEnum;
2124    type SetValue = Self;
2125    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2126
2127    fn param_spec_builder() -> Self::BuilderFn {
2128        Self::ParamSpec::builder_with_default
2129    }
2130}
2131
2132impl glib::value::ValueType for GrabOwnership {
2133    type Type = Self;
2134}
2135
2136unsafe impl<'a> glib::value::FromValue<'a> for GrabOwnership {
2137    type Checker = glib::value::GenericValueTypeChecker<Self>;
2138
2139    #[inline]
2140    unsafe fn from_value(value: &'a glib::Value) -> Self {
2141        skip_assert_initialized!();
2142        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2143    }
2144}
2145
2146impl ToValue for GrabOwnership {
2147    #[inline]
2148    fn to_value(&self) -> glib::Value {
2149        let mut value = glib::Value::for_value_type::<Self>();
2150        unsafe {
2151            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2152        }
2153        value
2154    }
2155
2156    #[inline]
2157    fn value_type(&self) -> glib::Type {
2158        Self::static_type()
2159    }
2160}
2161
2162impl From<GrabOwnership> for glib::Value {
2163    #[inline]
2164    fn from(v: GrabOwnership) -> Self {
2165        skip_assert_initialized!();
2166        ToValue::to_value(&v)
2167    }
2168}
2169
2170/// Returned by `gdk_device_grab()`, `gdk_pointer_grab()` and `gdk_keyboard_grab()` to
2171/// indicate success or the reason for the failure of the grab attempt.
2172#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2173#[non_exhaustive]
2174#[doc(alias = "GdkGrabStatus")]
2175pub enum GrabStatus {
2176    /// the resource was successfully grabbed.
2177    #[doc(alias = "GDK_GRAB_SUCCESS")]
2178    Success,
2179    /// the resource is actively grabbed by another client.
2180    #[doc(alias = "GDK_GRAB_ALREADY_GRABBED")]
2181    AlreadyGrabbed,
2182    /// the resource was grabbed more recently than the
2183    ///  specified time.
2184    #[doc(alias = "GDK_GRAB_INVALID_TIME")]
2185    InvalidTime,
2186    /// the grab window or the `confine_to` window are not
2187    ///  viewable.
2188    #[doc(alias = "GDK_GRAB_NOT_VIEWABLE")]
2189    NotViewable,
2190    /// the resource is frozen by an active grab of another client.
2191    #[doc(alias = "GDK_GRAB_FROZEN")]
2192    Frozen,
2193    /// the grab failed for some other reason. Since 3.16
2194    #[doc(alias = "GDK_GRAB_FAILED")]
2195    Failed,
2196    #[doc(hidden)]
2197    __Unknown(i32),
2198}
2199
2200#[doc(hidden)]
2201impl IntoGlib for GrabStatus {
2202    type GlibType = ffi::GdkGrabStatus;
2203
2204    #[inline]
2205    fn into_glib(self) -> ffi::GdkGrabStatus {
2206        match self {
2207            Self::Success => ffi::GDK_GRAB_SUCCESS,
2208            Self::AlreadyGrabbed => ffi::GDK_GRAB_ALREADY_GRABBED,
2209            Self::InvalidTime => ffi::GDK_GRAB_INVALID_TIME,
2210            Self::NotViewable => ffi::GDK_GRAB_NOT_VIEWABLE,
2211            Self::Frozen => ffi::GDK_GRAB_FROZEN,
2212            Self::Failed => ffi::GDK_GRAB_FAILED,
2213            Self::__Unknown(value) => value,
2214        }
2215    }
2216}
2217
2218#[doc(hidden)]
2219impl FromGlib<ffi::GdkGrabStatus> for GrabStatus {
2220    #[inline]
2221    unsafe fn from_glib(value: ffi::GdkGrabStatus) -> Self {
2222        skip_assert_initialized!();
2223
2224        match value {
2225            ffi::GDK_GRAB_SUCCESS => Self::Success,
2226            ffi::GDK_GRAB_ALREADY_GRABBED => Self::AlreadyGrabbed,
2227            ffi::GDK_GRAB_INVALID_TIME => Self::InvalidTime,
2228            ffi::GDK_GRAB_NOT_VIEWABLE => Self::NotViewable,
2229            ffi::GDK_GRAB_FROZEN => Self::Frozen,
2230            ffi::GDK_GRAB_FAILED => Self::Failed,
2231            value => Self::__Unknown(value),
2232        }
2233    }
2234}
2235
2236impl StaticType for GrabStatus {
2237    #[inline]
2238    #[doc(alias = "gdk_grab_status_get_type")]
2239    fn static_type() -> glib::Type {
2240        unsafe { from_glib(ffi::gdk_grab_status_get_type()) }
2241    }
2242}
2243
2244impl glib::HasParamSpec for GrabStatus {
2245    type ParamSpec = glib::ParamSpecEnum;
2246    type SetValue = Self;
2247    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2248
2249    fn param_spec_builder() -> Self::BuilderFn {
2250        Self::ParamSpec::builder_with_default
2251    }
2252}
2253
2254impl glib::value::ValueType for GrabStatus {
2255    type Type = Self;
2256}
2257
2258unsafe impl<'a> glib::value::FromValue<'a> for GrabStatus {
2259    type Checker = glib::value::GenericValueTypeChecker<Self>;
2260
2261    #[inline]
2262    unsafe fn from_value(value: &'a glib::Value) -> Self {
2263        skip_assert_initialized!();
2264        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2265    }
2266}
2267
2268impl ToValue for GrabStatus {
2269    #[inline]
2270    fn to_value(&self) -> glib::Value {
2271        let mut value = glib::Value::for_value_type::<Self>();
2272        unsafe {
2273            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2274        }
2275        value
2276    }
2277
2278    #[inline]
2279    fn value_type(&self) -> glib::Type {
2280        Self::static_type()
2281    }
2282}
2283
2284impl From<GrabStatus> for glib::Value {
2285    #[inline]
2286    fn from(v: GrabStatus) -> Self {
2287        skip_assert_initialized!();
2288        ToValue::to_value(&v)
2289    }
2290}
2291
2292/// Defines the reference point of a window and the meaning of coordinates
2293/// passed to `gtk_window_move()`. See `gtk_window_move()` and the "implementation
2294/// notes" section of the
2295/// [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
2296/// specification for more details.
2297#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2298#[non_exhaustive]
2299#[doc(alias = "GdkGravity")]
2300pub enum Gravity {
2301    /// the reference point is at the top left corner.
2302    #[doc(alias = "GDK_GRAVITY_NORTH_WEST")]
2303    NorthWest,
2304    /// the reference point is in the middle of the top edge.
2305    #[doc(alias = "GDK_GRAVITY_NORTH")]
2306    North,
2307    /// the reference point is at the top right corner.
2308    #[doc(alias = "GDK_GRAVITY_NORTH_EAST")]
2309    NorthEast,
2310    /// the reference point is at the middle of the left edge.
2311    #[doc(alias = "GDK_GRAVITY_WEST")]
2312    West,
2313    /// the reference point is at the center of the window.
2314    #[doc(alias = "GDK_GRAVITY_CENTER")]
2315    Center,
2316    /// the reference point is at the middle of the right edge.
2317    #[doc(alias = "GDK_GRAVITY_EAST")]
2318    East,
2319    /// the reference point is at the lower left corner.
2320    #[doc(alias = "GDK_GRAVITY_SOUTH_WEST")]
2321    SouthWest,
2322    /// the reference point is at the middle of the lower edge.
2323    #[doc(alias = "GDK_GRAVITY_SOUTH")]
2324    South,
2325    /// the reference point is at the lower right corner.
2326    #[doc(alias = "GDK_GRAVITY_SOUTH_EAST")]
2327    SouthEast,
2328    /// the reference point is at the top left corner of the
2329    ///  window itself, ignoring window manager decorations.
2330    #[doc(alias = "GDK_GRAVITY_STATIC")]
2331    Static,
2332    #[doc(hidden)]
2333    __Unknown(i32),
2334}
2335
2336#[doc(hidden)]
2337impl IntoGlib for Gravity {
2338    type GlibType = ffi::GdkGravity;
2339
2340    #[inline]
2341    fn into_glib(self) -> ffi::GdkGravity {
2342        match self {
2343            Self::NorthWest => ffi::GDK_GRAVITY_NORTH_WEST,
2344            Self::North => ffi::GDK_GRAVITY_NORTH,
2345            Self::NorthEast => ffi::GDK_GRAVITY_NORTH_EAST,
2346            Self::West => ffi::GDK_GRAVITY_WEST,
2347            Self::Center => ffi::GDK_GRAVITY_CENTER,
2348            Self::East => ffi::GDK_GRAVITY_EAST,
2349            Self::SouthWest => ffi::GDK_GRAVITY_SOUTH_WEST,
2350            Self::South => ffi::GDK_GRAVITY_SOUTH,
2351            Self::SouthEast => ffi::GDK_GRAVITY_SOUTH_EAST,
2352            Self::Static => ffi::GDK_GRAVITY_STATIC,
2353            Self::__Unknown(value) => value,
2354        }
2355    }
2356}
2357
2358#[doc(hidden)]
2359impl FromGlib<ffi::GdkGravity> for Gravity {
2360    #[inline]
2361    unsafe fn from_glib(value: ffi::GdkGravity) -> Self {
2362        skip_assert_initialized!();
2363
2364        match value {
2365            ffi::GDK_GRAVITY_NORTH_WEST => Self::NorthWest,
2366            ffi::GDK_GRAVITY_NORTH => Self::North,
2367            ffi::GDK_GRAVITY_NORTH_EAST => Self::NorthEast,
2368            ffi::GDK_GRAVITY_WEST => Self::West,
2369            ffi::GDK_GRAVITY_CENTER => Self::Center,
2370            ffi::GDK_GRAVITY_EAST => Self::East,
2371            ffi::GDK_GRAVITY_SOUTH_WEST => Self::SouthWest,
2372            ffi::GDK_GRAVITY_SOUTH => Self::South,
2373            ffi::GDK_GRAVITY_SOUTH_EAST => Self::SouthEast,
2374            ffi::GDK_GRAVITY_STATIC => Self::Static,
2375            value => Self::__Unknown(value),
2376        }
2377    }
2378}
2379
2380impl StaticType for Gravity {
2381    #[inline]
2382    #[doc(alias = "gdk_gravity_get_type")]
2383    fn static_type() -> glib::Type {
2384        unsafe { from_glib(ffi::gdk_gravity_get_type()) }
2385    }
2386}
2387
2388impl glib::HasParamSpec for Gravity {
2389    type ParamSpec = glib::ParamSpecEnum;
2390    type SetValue = Self;
2391    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2392
2393    fn param_spec_builder() -> Self::BuilderFn {
2394        Self::ParamSpec::builder_with_default
2395    }
2396}
2397
2398impl glib::value::ValueType for Gravity {
2399    type Type = Self;
2400}
2401
2402unsafe impl<'a> glib::value::FromValue<'a> for Gravity {
2403    type Checker = glib::value::GenericValueTypeChecker<Self>;
2404
2405    #[inline]
2406    unsafe fn from_value(value: &'a glib::Value) -> Self {
2407        skip_assert_initialized!();
2408        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2409    }
2410}
2411
2412impl ToValue for Gravity {
2413    #[inline]
2414    fn to_value(&self) -> glib::Value {
2415        let mut value = glib::Value::for_value_type::<Self>();
2416        unsafe {
2417            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2418        }
2419        value
2420    }
2421
2422    #[inline]
2423    fn value_type(&self) -> glib::Type {
2424        Self::static_type()
2425    }
2426}
2427
2428impl From<Gravity> for glib::Value {
2429    #[inline]
2430    fn from(v: Gravity) -> Self {
2431        skip_assert_initialized!();
2432        ToValue::to_value(&v)
2433    }
2434}
2435
2436/// An enumeration that describes the mode of an input device.
2437#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2438#[non_exhaustive]
2439#[doc(alias = "GdkInputMode")]
2440pub enum InputMode {
2441    /// the device is disabled and will not report any events.
2442    #[doc(alias = "GDK_MODE_DISABLED")]
2443    Disabled,
2444    /// the device is enabled. The device’s coordinate space
2445    ///  maps to the entire screen.
2446    #[doc(alias = "GDK_MODE_SCREEN")]
2447    Screen,
2448    /// the device is enabled. The device’s coordinate space
2449    ///  is mapped to a single window. The manner in which this window
2450    ///  is chosen is undefined, but it will typically be the same
2451    ///  way in which the focus window for key events is determined.
2452    #[doc(alias = "GDK_MODE_WINDOW")]
2453    Window,
2454    #[doc(hidden)]
2455    __Unknown(i32),
2456}
2457
2458#[doc(hidden)]
2459impl IntoGlib for InputMode {
2460    type GlibType = ffi::GdkInputMode;
2461
2462    #[inline]
2463    fn into_glib(self) -> ffi::GdkInputMode {
2464        match self {
2465            Self::Disabled => ffi::GDK_MODE_DISABLED,
2466            Self::Screen => ffi::GDK_MODE_SCREEN,
2467            Self::Window => ffi::GDK_MODE_WINDOW,
2468            Self::__Unknown(value) => value,
2469        }
2470    }
2471}
2472
2473#[doc(hidden)]
2474impl FromGlib<ffi::GdkInputMode> for InputMode {
2475    #[inline]
2476    unsafe fn from_glib(value: ffi::GdkInputMode) -> Self {
2477        skip_assert_initialized!();
2478
2479        match value {
2480            ffi::GDK_MODE_DISABLED => Self::Disabled,
2481            ffi::GDK_MODE_SCREEN => Self::Screen,
2482            ffi::GDK_MODE_WINDOW => Self::Window,
2483            value => Self::__Unknown(value),
2484        }
2485    }
2486}
2487
2488impl StaticType for InputMode {
2489    #[inline]
2490    #[doc(alias = "gdk_input_mode_get_type")]
2491    fn static_type() -> glib::Type {
2492        unsafe { from_glib(ffi::gdk_input_mode_get_type()) }
2493    }
2494}
2495
2496impl glib::HasParamSpec for InputMode {
2497    type ParamSpec = glib::ParamSpecEnum;
2498    type SetValue = Self;
2499    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2500
2501    fn param_spec_builder() -> Self::BuilderFn {
2502        Self::ParamSpec::builder_with_default
2503    }
2504}
2505
2506impl glib::value::ValueType for InputMode {
2507    type Type = Self;
2508}
2509
2510unsafe impl<'a> glib::value::FromValue<'a> for InputMode {
2511    type Checker = glib::value::GenericValueTypeChecker<Self>;
2512
2513    #[inline]
2514    unsafe fn from_value(value: &'a glib::Value) -> Self {
2515        skip_assert_initialized!();
2516        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2517    }
2518}
2519
2520impl ToValue for InputMode {
2521    #[inline]
2522    fn to_value(&self) -> glib::Value {
2523        let mut value = glib::Value::for_value_type::<Self>();
2524        unsafe {
2525            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2526        }
2527        value
2528    }
2529
2530    #[inline]
2531    fn value_type(&self) -> glib::Type {
2532        Self::static_type()
2533    }
2534}
2535
2536impl From<InputMode> for glib::Value {
2537    #[inline]
2538    fn from(v: InputMode) -> Self {
2539        skip_assert_initialized!();
2540        ToValue::to_value(&v)
2541    }
2542}
2543
2544/// An enumeration describing the type of an input device in general terms.
2545#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2546#[non_exhaustive]
2547#[doc(alias = "GdkInputSource")]
2548pub enum InputSource {
2549    /// the device is a mouse. (This will be reported for the core
2550    ///  pointer, even if it is something else, such as a trackball.)
2551    #[doc(alias = "GDK_SOURCE_MOUSE")]
2552    Mouse,
2553    /// the device is a stylus of a graphics tablet or similar device.
2554    #[doc(alias = "GDK_SOURCE_PEN")]
2555    Pen,
2556    /// the device is an eraser. Typically, this would be the other end
2557    ///  of a stylus on a graphics tablet.
2558    #[doc(alias = "GDK_SOURCE_ERASER")]
2559    Eraser,
2560    /// the device is a graphics tablet “puck” or similar device.
2561    #[doc(alias = "GDK_SOURCE_CURSOR")]
2562    Cursor,
2563    /// the device is a keyboard.
2564    #[doc(alias = "GDK_SOURCE_KEYBOARD")]
2565    Keyboard,
2566    /// the device is a direct-input touch device, such
2567    ///  as a touchscreen or tablet. This device type has been added in 3.4.
2568    #[doc(alias = "GDK_SOURCE_TOUCHSCREEN")]
2569    Touchscreen,
2570    /// the device is an indirect touch device, such
2571    ///  as a touchpad. This device type has been added in 3.4.
2572    #[doc(alias = "GDK_SOURCE_TOUCHPAD")]
2573    Touchpad,
2574    /// the device is a trackpoint. This device type has been
2575    ///  added in 3.22
2576    #[doc(alias = "GDK_SOURCE_TRACKPOINT")]
2577    Trackpoint,
2578    /// the device is a "pad", a collection of buttons,
2579    ///  rings and strips found in drawing tablets. This device type has been
2580    ///  added in 3.22.
2581    #[doc(alias = "GDK_SOURCE_TABLET_PAD")]
2582    TabletPad,
2583    #[doc(hidden)]
2584    __Unknown(i32),
2585}
2586
2587#[doc(hidden)]
2588impl IntoGlib for InputSource {
2589    type GlibType = ffi::GdkInputSource;
2590
2591    #[inline]
2592    fn into_glib(self) -> ffi::GdkInputSource {
2593        match self {
2594            Self::Mouse => ffi::GDK_SOURCE_MOUSE,
2595            Self::Pen => ffi::GDK_SOURCE_PEN,
2596            Self::Eraser => ffi::GDK_SOURCE_ERASER,
2597            Self::Cursor => ffi::GDK_SOURCE_CURSOR,
2598            Self::Keyboard => ffi::GDK_SOURCE_KEYBOARD,
2599            Self::Touchscreen => ffi::GDK_SOURCE_TOUCHSCREEN,
2600            Self::Touchpad => ffi::GDK_SOURCE_TOUCHPAD,
2601            Self::Trackpoint => ffi::GDK_SOURCE_TRACKPOINT,
2602            Self::TabletPad => ffi::GDK_SOURCE_TABLET_PAD,
2603            Self::__Unknown(value) => value,
2604        }
2605    }
2606}
2607
2608#[doc(hidden)]
2609impl FromGlib<ffi::GdkInputSource> for InputSource {
2610    #[inline]
2611    unsafe fn from_glib(value: ffi::GdkInputSource) -> Self {
2612        skip_assert_initialized!();
2613
2614        match value {
2615            ffi::GDK_SOURCE_MOUSE => Self::Mouse,
2616            ffi::GDK_SOURCE_PEN => Self::Pen,
2617            ffi::GDK_SOURCE_ERASER => Self::Eraser,
2618            ffi::GDK_SOURCE_CURSOR => Self::Cursor,
2619            ffi::GDK_SOURCE_KEYBOARD => Self::Keyboard,
2620            ffi::GDK_SOURCE_TOUCHSCREEN => Self::Touchscreen,
2621            ffi::GDK_SOURCE_TOUCHPAD => Self::Touchpad,
2622            ffi::GDK_SOURCE_TRACKPOINT => Self::Trackpoint,
2623            ffi::GDK_SOURCE_TABLET_PAD => Self::TabletPad,
2624            value => Self::__Unknown(value),
2625        }
2626    }
2627}
2628
2629impl StaticType for InputSource {
2630    #[inline]
2631    #[doc(alias = "gdk_input_source_get_type")]
2632    fn static_type() -> glib::Type {
2633        unsafe { from_glib(ffi::gdk_input_source_get_type()) }
2634    }
2635}
2636
2637impl glib::HasParamSpec for InputSource {
2638    type ParamSpec = glib::ParamSpecEnum;
2639    type SetValue = Self;
2640    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2641
2642    fn param_spec_builder() -> Self::BuilderFn {
2643        Self::ParamSpec::builder_with_default
2644    }
2645}
2646
2647impl glib::value::ValueType for InputSource {
2648    type Type = Self;
2649}
2650
2651unsafe impl<'a> glib::value::FromValue<'a> for InputSource {
2652    type Checker = glib::value::GenericValueTypeChecker<Self>;
2653
2654    #[inline]
2655    unsafe fn from_value(value: &'a glib::Value) -> Self {
2656        skip_assert_initialized!();
2657        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2658    }
2659}
2660
2661impl ToValue for InputSource {
2662    #[inline]
2663    fn to_value(&self) -> glib::Value {
2664        let mut value = glib::Value::for_value_type::<Self>();
2665        unsafe {
2666            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2667        }
2668        value
2669    }
2670
2671    #[inline]
2672    fn value_type(&self) -> glib::Type {
2673        Self::static_type()
2674    }
2675}
2676
2677impl From<InputSource> for glib::Value {
2678    #[inline]
2679    fn from(v: InputSource) -> Self {
2680        skip_assert_initialized!();
2681        ToValue::to_value(&v)
2682    }
2683}
2684
2685/// This enum is used with [`Keymap::modifier_mask()`][crate::Keymap::modifier_mask()]
2686/// in order to determine what modifiers the
2687/// currently used windowing system backend uses for particular
2688/// purposes. For example, on X11/Windows, the Control key is used for
2689/// invoking menu shortcuts (accelerators), whereas on Apple computers
2690/// it’s the Command key (which correspond to [`ModifierType::CONTROL_MASK`][crate::ModifierType::CONTROL_MASK] and
2691/// [`ModifierType::MOD2_MASK`][crate::ModifierType::MOD2_MASK], respectively).
2692#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2693#[non_exhaustive]
2694#[doc(alias = "GdkModifierIntent")]
2695pub enum ModifierIntent {
2696    /// the primary modifier used to invoke
2697    ///  menu accelerators.
2698    #[doc(alias = "GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR")]
2699    PrimaryAccelerator,
2700    /// the modifier used to invoke context menus.
2701    ///  Note that mouse button 3 always triggers context menus. When this modifier
2702    ///  is not 0, it additionally triggers context menus when used with mouse button 1.
2703    #[doc(alias = "GDK_MODIFIER_INTENT_CONTEXT_MENU")]
2704    ContextMenu,
2705    /// the modifier used to extend selections
2706    ///  using `modifier`-click or `modifier`-cursor-key
2707    #[doc(alias = "GDK_MODIFIER_INTENT_EXTEND_SELECTION")]
2708    ExtendSelection,
2709    /// the modifier used to modify selections,
2710    ///  which in most cases means toggling the clicked item into or out of the selection.
2711    #[doc(alias = "GDK_MODIFIER_INTENT_MODIFY_SELECTION")]
2712    ModifySelection,
2713    /// when any of these modifiers is pressed, the
2714    ///  key event cannot produce a symbol directly. This is meant to be used for
2715    ///  input methods, and for use cases like typeahead search.
2716    #[doc(alias = "GDK_MODIFIER_INTENT_NO_TEXT_INPUT")]
2717    NoTextInput,
2718    /// the modifier that switches between keyboard
2719    ///  groups (AltGr on X11/Windows and Option/Alt on OS X).
2720    #[doc(alias = "GDK_MODIFIER_INTENT_SHIFT_GROUP")]
2721    ShiftGroup,
2722    /// The set of modifier masks accepted
2723    /// as modifiers in accelerators. Needed because Command is mapped to MOD2 on
2724    /// OSX, which is widely used, but on X11 MOD2 is NumLock and using that for a
2725    /// mod key is problematic at best.
2726    /// Ref: https://bugzilla.gnome.org/show_bug.cgi?id=736125.
2727    #[doc(alias = "GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK")]
2728    DefaultModMask,
2729    #[doc(hidden)]
2730    __Unknown(i32),
2731}
2732
2733#[doc(hidden)]
2734impl IntoGlib for ModifierIntent {
2735    type GlibType = ffi::GdkModifierIntent;
2736
2737    #[inline]
2738    fn into_glib(self) -> ffi::GdkModifierIntent {
2739        match self {
2740            Self::PrimaryAccelerator => ffi::GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR,
2741            Self::ContextMenu => ffi::GDK_MODIFIER_INTENT_CONTEXT_MENU,
2742            Self::ExtendSelection => ffi::GDK_MODIFIER_INTENT_EXTEND_SELECTION,
2743            Self::ModifySelection => ffi::GDK_MODIFIER_INTENT_MODIFY_SELECTION,
2744            Self::NoTextInput => ffi::GDK_MODIFIER_INTENT_NO_TEXT_INPUT,
2745            Self::ShiftGroup => ffi::GDK_MODIFIER_INTENT_SHIFT_GROUP,
2746            Self::DefaultModMask => ffi::GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK,
2747            Self::__Unknown(value) => value,
2748        }
2749    }
2750}
2751
2752#[doc(hidden)]
2753impl FromGlib<ffi::GdkModifierIntent> for ModifierIntent {
2754    #[inline]
2755    unsafe fn from_glib(value: ffi::GdkModifierIntent) -> Self {
2756        skip_assert_initialized!();
2757
2758        match value {
2759            ffi::GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR => Self::PrimaryAccelerator,
2760            ffi::GDK_MODIFIER_INTENT_CONTEXT_MENU => Self::ContextMenu,
2761            ffi::GDK_MODIFIER_INTENT_EXTEND_SELECTION => Self::ExtendSelection,
2762            ffi::GDK_MODIFIER_INTENT_MODIFY_SELECTION => Self::ModifySelection,
2763            ffi::GDK_MODIFIER_INTENT_NO_TEXT_INPUT => Self::NoTextInput,
2764            ffi::GDK_MODIFIER_INTENT_SHIFT_GROUP => Self::ShiftGroup,
2765            ffi::GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK => Self::DefaultModMask,
2766            value => Self::__Unknown(value),
2767        }
2768    }
2769}
2770
2771impl StaticType for ModifierIntent {
2772    #[inline]
2773    #[doc(alias = "gdk_modifier_intent_get_type")]
2774    fn static_type() -> glib::Type {
2775        unsafe { from_glib(ffi::gdk_modifier_intent_get_type()) }
2776    }
2777}
2778
2779impl glib::HasParamSpec for ModifierIntent {
2780    type ParamSpec = glib::ParamSpecEnum;
2781    type SetValue = Self;
2782    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2783
2784    fn param_spec_builder() -> Self::BuilderFn {
2785        Self::ParamSpec::builder_with_default
2786    }
2787}
2788
2789impl glib::value::ValueType for ModifierIntent {
2790    type Type = Self;
2791}
2792
2793unsafe impl<'a> glib::value::FromValue<'a> for ModifierIntent {
2794    type Checker = glib::value::GenericValueTypeChecker<Self>;
2795
2796    #[inline]
2797    unsafe fn from_value(value: &'a glib::Value) -> Self {
2798        skip_assert_initialized!();
2799        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2800    }
2801}
2802
2803impl ToValue for ModifierIntent {
2804    #[inline]
2805    fn to_value(&self) -> glib::Value {
2806        let mut value = glib::Value::for_value_type::<Self>();
2807        unsafe {
2808            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2809        }
2810        value
2811    }
2812
2813    #[inline]
2814    fn value_type(&self) -> glib::Type {
2815        Self::static_type()
2816    }
2817}
2818
2819impl From<ModifierIntent> for glib::Value {
2820    #[inline]
2821    fn from(v: ModifierIntent) -> Self {
2822        skip_assert_initialized!();
2823        ToValue::to_value(&v)
2824    }
2825}
2826
2827/// Specifies the kind of crossing for [`EventCrossing`][crate::EventCrossing].
2828///
2829/// See the X11 protocol specification of LeaveNotify for
2830/// full details of crossing event generation.
2831#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2832#[non_exhaustive]
2833#[doc(alias = "GdkNotifyType")]
2834pub enum NotifyType {
2835    /// the window is entered from an ancestor or
2836    ///  left towards an ancestor.
2837    #[doc(alias = "GDK_NOTIFY_ANCESTOR")]
2838    Ancestor,
2839    /// the pointer moves between an ancestor and an
2840    ///  inferior of the window.
2841    #[doc(alias = "GDK_NOTIFY_VIRTUAL")]
2842    Virtual,
2843    /// the window is entered from an inferior or
2844    ///  left towards an inferior.
2845    #[doc(alias = "GDK_NOTIFY_INFERIOR")]
2846    Inferior,
2847    /// the window is entered from or left towards
2848    ///  a window which is neither an ancestor nor an inferior.
2849    #[doc(alias = "GDK_NOTIFY_NONLINEAR")]
2850    Nonlinear,
2851    /// the pointer moves between two windows
2852    ///  which are not ancestors of each other and the window is part of
2853    ///  the ancestor chain between one of these windows and their least
2854    ///  common ancestor.
2855    #[doc(alias = "GDK_NOTIFY_NONLINEAR_VIRTUAL")]
2856    NonlinearVirtual,
2857    /// an unknown type of enter/leave event occurred.
2858    #[doc(alias = "GDK_NOTIFY_UNKNOWN")]
2859    Unknown,
2860    #[doc(hidden)]
2861    __Unknown(i32),
2862}
2863
2864#[doc(hidden)]
2865impl IntoGlib for NotifyType {
2866    type GlibType = ffi::GdkNotifyType;
2867
2868    #[inline]
2869    fn into_glib(self) -> ffi::GdkNotifyType {
2870        match self {
2871            Self::Ancestor => ffi::GDK_NOTIFY_ANCESTOR,
2872            Self::Virtual => ffi::GDK_NOTIFY_VIRTUAL,
2873            Self::Inferior => ffi::GDK_NOTIFY_INFERIOR,
2874            Self::Nonlinear => ffi::GDK_NOTIFY_NONLINEAR,
2875            Self::NonlinearVirtual => ffi::GDK_NOTIFY_NONLINEAR_VIRTUAL,
2876            Self::Unknown => ffi::GDK_NOTIFY_UNKNOWN,
2877            Self::__Unknown(value) => value,
2878        }
2879    }
2880}
2881
2882#[doc(hidden)]
2883impl FromGlib<ffi::GdkNotifyType> for NotifyType {
2884    #[inline]
2885    unsafe fn from_glib(value: ffi::GdkNotifyType) -> Self {
2886        skip_assert_initialized!();
2887
2888        match value {
2889            ffi::GDK_NOTIFY_ANCESTOR => Self::Ancestor,
2890            ffi::GDK_NOTIFY_VIRTUAL => Self::Virtual,
2891            ffi::GDK_NOTIFY_INFERIOR => Self::Inferior,
2892            ffi::GDK_NOTIFY_NONLINEAR => Self::Nonlinear,
2893            ffi::GDK_NOTIFY_NONLINEAR_VIRTUAL => Self::NonlinearVirtual,
2894            ffi::GDK_NOTIFY_UNKNOWN => Self::Unknown,
2895            value => Self::__Unknown(value),
2896        }
2897    }
2898}
2899
2900impl StaticType for NotifyType {
2901    #[inline]
2902    #[doc(alias = "gdk_notify_type_get_type")]
2903    fn static_type() -> glib::Type {
2904        unsafe { from_glib(ffi::gdk_notify_type_get_type()) }
2905    }
2906}
2907
2908impl glib::HasParamSpec for NotifyType {
2909    type ParamSpec = glib::ParamSpecEnum;
2910    type SetValue = Self;
2911    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2912
2913    fn param_spec_builder() -> Self::BuilderFn {
2914        Self::ParamSpec::builder_with_default
2915    }
2916}
2917
2918impl glib::value::ValueType for NotifyType {
2919    type Type = Self;
2920}
2921
2922unsafe impl<'a> glib::value::FromValue<'a> for NotifyType {
2923    type Checker = glib::value::GenericValueTypeChecker<Self>;
2924
2925    #[inline]
2926    unsafe fn from_value(value: &'a glib::Value) -> Self {
2927        skip_assert_initialized!();
2928        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2929    }
2930}
2931
2932impl ToValue for NotifyType {
2933    #[inline]
2934    fn to_value(&self) -> glib::Value {
2935        let mut value = glib::Value::for_value_type::<Self>();
2936        unsafe {
2937            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2938        }
2939        value
2940    }
2941
2942    #[inline]
2943    fn value_type(&self) -> glib::Type {
2944        Self::static_type()
2945    }
2946}
2947
2948impl From<NotifyType> for glib::Value {
2949    #[inline]
2950    fn from(v: NotifyType) -> Self {
2951        skip_assert_initialized!();
2952        ToValue::to_value(&v)
2953    }
2954}
2955
2956/// Specifies why a selection ownership was changed.
2957#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2958#[non_exhaustive]
2959#[doc(alias = "GdkOwnerChange")]
2960pub enum OwnerChange {
2961    /// some other app claimed the ownership
2962    #[doc(alias = "GDK_OWNER_CHANGE_NEW_OWNER")]
2963    NewOwner,
2964    /// the window was destroyed
2965    #[doc(alias = "GDK_OWNER_CHANGE_DESTROY")]
2966    Destroy,
2967    /// the client was closed
2968    #[doc(alias = "GDK_OWNER_CHANGE_CLOSE")]
2969    Close,
2970    #[doc(hidden)]
2971    __Unknown(i32),
2972}
2973
2974#[doc(hidden)]
2975impl IntoGlib for OwnerChange {
2976    type GlibType = ffi::GdkOwnerChange;
2977
2978    #[inline]
2979    fn into_glib(self) -> ffi::GdkOwnerChange {
2980        match self {
2981            Self::NewOwner => ffi::GDK_OWNER_CHANGE_NEW_OWNER,
2982            Self::Destroy => ffi::GDK_OWNER_CHANGE_DESTROY,
2983            Self::Close => ffi::GDK_OWNER_CHANGE_CLOSE,
2984            Self::__Unknown(value) => value,
2985        }
2986    }
2987}
2988
2989#[doc(hidden)]
2990impl FromGlib<ffi::GdkOwnerChange> for OwnerChange {
2991    #[inline]
2992    unsafe fn from_glib(value: ffi::GdkOwnerChange) -> Self {
2993        skip_assert_initialized!();
2994
2995        match value {
2996            ffi::GDK_OWNER_CHANGE_NEW_OWNER => Self::NewOwner,
2997            ffi::GDK_OWNER_CHANGE_DESTROY => Self::Destroy,
2998            ffi::GDK_OWNER_CHANGE_CLOSE => Self::Close,
2999            value => Self::__Unknown(value),
3000        }
3001    }
3002}
3003
3004impl StaticType for OwnerChange {
3005    #[inline]
3006    #[doc(alias = "gdk_owner_change_get_type")]
3007    fn static_type() -> glib::Type {
3008        unsafe { from_glib(ffi::gdk_owner_change_get_type()) }
3009    }
3010}
3011
3012impl glib::HasParamSpec for OwnerChange {
3013    type ParamSpec = glib::ParamSpecEnum;
3014    type SetValue = Self;
3015    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3016
3017    fn param_spec_builder() -> Self::BuilderFn {
3018        Self::ParamSpec::builder_with_default
3019    }
3020}
3021
3022impl glib::value::ValueType for OwnerChange {
3023    type Type = Self;
3024}
3025
3026unsafe impl<'a> glib::value::FromValue<'a> for OwnerChange {
3027    type Checker = glib::value::GenericValueTypeChecker<Self>;
3028
3029    #[inline]
3030    unsafe fn from_value(value: &'a glib::Value) -> Self {
3031        skip_assert_initialized!();
3032        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3033    }
3034}
3035
3036impl ToValue for OwnerChange {
3037    #[inline]
3038    fn to_value(&self) -> glib::Value {
3039        let mut value = glib::Value::for_value_type::<Self>();
3040        unsafe {
3041            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3042        }
3043        value
3044    }
3045
3046    #[inline]
3047    fn value_type(&self) -> glib::Type {
3048        Self::static_type()
3049    }
3050}
3051
3052impl From<OwnerChange> for glib::Value {
3053    #[inline]
3054    fn from(v: OwnerChange) -> Self {
3055        skip_assert_initialized!();
3056        ToValue::to_value(&v)
3057    }
3058}
3059
3060/// Describes how existing data is combined with new data when
3061/// using `gdk_property_change()`.
3062#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3063#[non_exhaustive]
3064#[doc(alias = "GdkPropMode")]
3065pub enum PropMode {
3066    /// the new data replaces the existing data.
3067    #[doc(alias = "GDK_PROP_MODE_REPLACE")]
3068    Replace,
3069    /// the new data is prepended to the existing data.
3070    #[doc(alias = "GDK_PROP_MODE_PREPEND")]
3071    Prepend,
3072    /// the new data is appended to the existing data.
3073    #[doc(alias = "GDK_PROP_MODE_APPEND")]
3074    Append,
3075    #[doc(hidden)]
3076    __Unknown(i32),
3077}
3078
3079#[doc(hidden)]
3080impl IntoGlib for PropMode {
3081    type GlibType = ffi::GdkPropMode;
3082
3083    #[inline]
3084    fn into_glib(self) -> ffi::GdkPropMode {
3085        match self {
3086            Self::Replace => ffi::GDK_PROP_MODE_REPLACE,
3087            Self::Prepend => ffi::GDK_PROP_MODE_PREPEND,
3088            Self::Append => ffi::GDK_PROP_MODE_APPEND,
3089            Self::__Unknown(value) => value,
3090        }
3091    }
3092}
3093
3094#[doc(hidden)]
3095impl FromGlib<ffi::GdkPropMode> for PropMode {
3096    #[inline]
3097    unsafe fn from_glib(value: ffi::GdkPropMode) -> Self {
3098        skip_assert_initialized!();
3099
3100        match value {
3101            ffi::GDK_PROP_MODE_REPLACE => Self::Replace,
3102            ffi::GDK_PROP_MODE_PREPEND => Self::Prepend,
3103            ffi::GDK_PROP_MODE_APPEND => Self::Append,
3104            value => Self::__Unknown(value),
3105        }
3106    }
3107}
3108
3109impl StaticType for PropMode {
3110    #[inline]
3111    #[doc(alias = "gdk_prop_mode_get_type")]
3112    fn static_type() -> glib::Type {
3113        unsafe { from_glib(ffi::gdk_prop_mode_get_type()) }
3114    }
3115}
3116
3117impl glib::HasParamSpec for PropMode {
3118    type ParamSpec = glib::ParamSpecEnum;
3119    type SetValue = Self;
3120    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3121
3122    fn param_spec_builder() -> Self::BuilderFn {
3123        Self::ParamSpec::builder_with_default
3124    }
3125}
3126
3127impl glib::value::ValueType for PropMode {
3128    type Type = Self;
3129}
3130
3131unsafe impl<'a> glib::value::FromValue<'a> for PropMode {
3132    type Checker = glib::value::GenericValueTypeChecker<Self>;
3133
3134    #[inline]
3135    unsafe fn from_value(value: &'a glib::Value) -> Self {
3136        skip_assert_initialized!();
3137        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3138    }
3139}
3140
3141impl ToValue for PropMode {
3142    #[inline]
3143    fn to_value(&self) -> glib::Value {
3144        let mut value = glib::Value::for_value_type::<Self>();
3145        unsafe {
3146            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3147        }
3148        value
3149    }
3150
3151    #[inline]
3152    fn value_type(&self) -> glib::Type {
3153        Self::static_type()
3154    }
3155}
3156
3157impl From<PropMode> for glib::Value {
3158    #[inline]
3159    fn from(v: PropMode) -> Self {
3160        skip_assert_initialized!();
3161        ToValue::to_value(&v)
3162    }
3163}
3164
3165/// Specifies the type of a property change for a [`EventProperty`][crate::EventProperty].
3166#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3167#[non_exhaustive]
3168#[doc(alias = "GdkPropertyState")]
3169pub enum PropertyState {
3170    /// the property value was changed.
3171    #[doc(alias = "GDK_PROPERTY_NEW_VALUE")]
3172    NewValue,
3173    /// the property was deleted.
3174    #[doc(alias = "GDK_PROPERTY_DELETE")]
3175    Delete,
3176    #[doc(hidden)]
3177    __Unknown(i32),
3178}
3179
3180#[doc(hidden)]
3181impl IntoGlib for PropertyState {
3182    type GlibType = ffi::GdkPropertyState;
3183
3184    #[inline]
3185    fn into_glib(self) -> ffi::GdkPropertyState {
3186        match self {
3187            Self::NewValue => ffi::GDK_PROPERTY_NEW_VALUE,
3188            Self::Delete => ffi::GDK_PROPERTY_DELETE,
3189            Self::__Unknown(value) => value,
3190        }
3191    }
3192}
3193
3194#[doc(hidden)]
3195impl FromGlib<ffi::GdkPropertyState> for PropertyState {
3196    #[inline]
3197    unsafe fn from_glib(value: ffi::GdkPropertyState) -> Self {
3198        skip_assert_initialized!();
3199
3200        match value {
3201            ffi::GDK_PROPERTY_NEW_VALUE => Self::NewValue,
3202            ffi::GDK_PROPERTY_DELETE => Self::Delete,
3203            value => Self::__Unknown(value),
3204        }
3205    }
3206}
3207
3208impl StaticType for PropertyState {
3209    #[inline]
3210    #[doc(alias = "gdk_property_state_get_type")]
3211    fn static_type() -> glib::Type {
3212        unsafe { from_glib(ffi::gdk_property_state_get_type()) }
3213    }
3214}
3215
3216impl glib::HasParamSpec for PropertyState {
3217    type ParamSpec = glib::ParamSpecEnum;
3218    type SetValue = Self;
3219    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3220
3221    fn param_spec_builder() -> Self::BuilderFn {
3222        Self::ParamSpec::builder_with_default
3223    }
3224}
3225
3226impl glib::value::ValueType for PropertyState {
3227    type Type = Self;
3228}
3229
3230unsafe impl<'a> glib::value::FromValue<'a> for PropertyState {
3231    type Checker = glib::value::GenericValueTypeChecker<Self>;
3232
3233    #[inline]
3234    unsafe fn from_value(value: &'a glib::Value) -> Self {
3235        skip_assert_initialized!();
3236        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3237    }
3238}
3239
3240impl ToValue for PropertyState {
3241    #[inline]
3242    fn to_value(&self) -> glib::Value {
3243        let mut value = glib::Value::for_value_type::<Self>();
3244        unsafe {
3245            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3246        }
3247        value
3248    }
3249
3250    #[inline]
3251    fn value_type(&self) -> glib::Type {
3252        Self::static_type()
3253    }
3254}
3255
3256impl From<PropertyState> for glib::Value {
3257    #[inline]
3258    fn from(v: PropertyState) -> Self {
3259        skip_assert_initialized!();
3260        ToValue::to_value(&v)
3261    }
3262}
3263
3264/// Specifies the direction for [`EventScroll`][crate::EventScroll].
3265#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3266#[non_exhaustive]
3267#[doc(alias = "GdkScrollDirection")]
3268pub enum ScrollDirection {
3269    /// the window is scrolled up.
3270    #[doc(alias = "GDK_SCROLL_UP")]
3271    Up,
3272    /// the window is scrolled down.
3273    #[doc(alias = "GDK_SCROLL_DOWN")]
3274    Down,
3275    /// the window is scrolled to the left.
3276    #[doc(alias = "GDK_SCROLL_LEFT")]
3277    Left,
3278    /// the window is scrolled to the right.
3279    #[doc(alias = "GDK_SCROLL_RIGHT")]
3280    Right,
3281    /// the scrolling is determined by the delta values
3282    ///  in [`EventScroll`][crate::EventScroll]. See `gdk_event_get_scroll_deltas()`. Since: 3.4
3283    #[doc(alias = "GDK_SCROLL_SMOOTH")]
3284    Smooth,
3285    #[doc(hidden)]
3286    __Unknown(i32),
3287}
3288
3289#[doc(hidden)]
3290impl IntoGlib for ScrollDirection {
3291    type GlibType = ffi::GdkScrollDirection;
3292
3293    #[inline]
3294    fn into_glib(self) -> ffi::GdkScrollDirection {
3295        match self {
3296            Self::Up => ffi::GDK_SCROLL_UP,
3297            Self::Down => ffi::GDK_SCROLL_DOWN,
3298            Self::Left => ffi::GDK_SCROLL_LEFT,
3299            Self::Right => ffi::GDK_SCROLL_RIGHT,
3300            Self::Smooth => ffi::GDK_SCROLL_SMOOTH,
3301            Self::__Unknown(value) => value,
3302        }
3303    }
3304}
3305
3306#[doc(hidden)]
3307impl FromGlib<ffi::GdkScrollDirection> for ScrollDirection {
3308    #[inline]
3309    unsafe fn from_glib(value: ffi::GdkScrollDirection) -> Self {
3310        skip_assert_initialized!();
3311
3312        match value {
3313            ffi::GDK_SCROLL_UP => Self::Up,
3314            ffi::GDK_SCROLL_DOWN => Self::Down,
3315            ffi::GDK_SCROLL_LEFT => Self::Left,
3316            ffi::GDK_SCROLL_RIGHT => Self::Right,
3317            ffi::GDK_SCROLL_SMOOTH => Self::Smooth,
3318            value => Self::__Unknown(value),
3319        }
3320    }
3321}
3322
3323impl StaticType for ScrollDirection {
3324    #[inline]
3325    #[doc(alias = "gdk_scroll_direction_get_type")]
3326    fn static_type() -> glib::Type {
3327        unsafe { from_glib(ffi::gdk_scroll_direction_get_type()) }
3328    }
3329}
3330
3331impl glib::HasParamSpec for ScrollDirection {
3332    type ParamSpec = glib::ParamSpecEnum;
3333    type SetValue = Self;
3334    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3335
3336    fn param_spec_builder() -> Self::BuilderFn {
3337        Self::ParamSpec::builder_with_default
3338    }
3339}
3340
3341impl glib::value::ValueType for ScrollDirection {
3342    type Type = Self;
3343}
3344
3345unsafe impl<'a> glib::value::FromValue<'a> for ScrollDirection {
3346    type Checker = glib::value::GenericValueTypeChecker<Self>;
3347
3348    #[inline]
3349    unsafe fn from_value(value: &'a glib::Value) -> Self {
3350        skip_assert_initialized!();
3351        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3352    }
3353}
3354
3355impl ToValue for ScrollDirection {
3356    #[inline]
3357    fn to_value(&self) -> glib::Value {
3358        let mut value = glib::Value::for_value_type::<Self>();
3359        unsafe {
3360            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3361        }
3362        value
3363    }
3364
3365    #[inline]
3366    fn value_type(&self) -> glib::Type {
3367        Self::static_type()
3368    }
3369}
3370
3371impl From<ScrollDirection> for glib::Value {
3372    #[inline]
3373    fn from(v: ScrollDirection) -> Self {
3374        skip_assert_initialized!();
3375        ToValue::to_value(&v)
3376    }
3377}
3378
3379/// Specifies the kind of modification applied to a setting in a
3380/// [`EventSetting`][crate::EventSetting].
3381#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3382#[non_exhaustive]
3383#[doc(alias = "GdkSettingAction")]
3384pub enum SettingAction {
3385    /// a setting was added.
3386    #[doc(alias = "GDK_SETTING_ACTION_NEW")]
3387    New,
3388    /// a setting was changed.
3389    #[doc(alias = "GDK_SETTING_ACTION_CHANGED")]
3390    Changed,
3391    /// a setting was deleted.
3392    #[doc(alias = "GDK_SETTING_ACTION_DELETED")]
3393    Deleted,
3394    #[doc(hidden)]
3395    __Unknown(i32),
3396}
3397
3398#[doc(hidden)]
3399impl IntoGlib for SettingAction {
3400    type GlibType = ffi::GdkSettingAction;
3401
3402    #[inline]
3403    fn into_glib(self) -> ffi::GdkSettingAction {
3404        match self {
3405            Self::New => ffi::GDK_SETTING_ACTION_NEW,
3406            Self::Changed => ffi::GDK_SETTING_ACTION_CHANGED,
3407            Self::Deleted => ffi::GDK_SETTING_ACTION_DELETED,
3408            Self::__Unknown(value) => value,
3409        }
3410    }
3411}
3412
3413#[doc(hidden)]
3414impl FromGlib<ffi::GdkSettingAction> for SettingAction {
3415    #[inline]
3416    unsafe fn from_glib(value: ffi::GdkSettingAction) -> Self {
3417        skip_assert_initialized!();
3418
3419        match value {
3420            ffi::GDK_SETTING_ACTION_NEW => Self::New,
3421            ffi::GDK_SETTING_ACTION_CHANGED => Self::Changed,
3422            ffi::GDK_SETTING_ACTION_DELETED => Self::Deleted,
3423            value => Self::__Unknown(value),
3424        }
3425    }
3426}
3427
3428impl StaticType for SettingAction {
3429    #[inline]
3430    #[doc(alias = "gdk_setting_action_get_type")]
3431    fn static_type() -> glib::Type {
3432        unsafe { from_glib(ffi::gdk_setting_action_get_type()) }
3433    }
3434}
3435
3436impl glib::HasParamSpec for SettingAction {
3437    type ParamSpec = glib::ParamSpecEnum;
3438    type SetValue = Self;
3439    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3440
3441    fn param_spec_builder() -> Self::BuilderFn {
3442        Self::ParamSpec::builder_with_default
3443    }
3444}
3445
3446impl glib::value::ValueType for SettingAction {
3447    type Type = Self;
3448}
3449
3450unsafe impl<'a> glib::value::FromValue<'a> for SettingAction {
3451    type Checker = glib::value::GenericValueTypeChecker<Self>;
3452
3453    #[inline]
3454    unsafe fn from_value(value: &'a glib::Value) -> Self {
3455        skip_assert_initialized!();
3456        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3457    }
3458}
3459
3460impl ToValue for SettingAction {
3461    #[inline]
3462    fn to_value(&self) -> glib::Value {
3463        let mut value = glib::Value::for_value_type::<Self>();
3464        unsafe {
3465            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3466        }
3467        value
3468    }
3469
3470    #[inline]
3471    fn value_type(&self) -> glib::Type {
3472        Self::static_type()
3473    }
3474}
3475
3476impl From<SettingAction> for glib::Value {
3477    #[inline]
3478    fn from(v: SettingAction) -> Self {
3479        skip_assert_initialized!();
3480        ToValue::to_value(&v)
3481    }
3482}
3483
3484/// This enumeration describes how the red, green and blue components
3485/// of physical pixels on an output device are laid out.
3486#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3487#[non_exhaustive]
3488#[doc(alias = "GdkSubpixelLayout")]
3489pub enum SubpixelLayout {
3490    /// The layout is not known
3491    #[doc(alias = "GDK_SUBPIXEL_LAYOUT_UNKNOWN")]
3492    Unknown,
3493    /// Not organized in this way
3494    #[doc(alias = "GDK_SUBPIXEL_LAYOUT_NONE")]
3495    None,
3496    /// The layout is horizontal, the order is RGB
3497    #[doc(alias = "GDK_SUBPIXEL_LAYOUT_HORIZONTAL_RGB")]
3498    HorizontalRgb,
3499    /// The layout is horizontal, the order is BGR
3500    #[doc(alias = "GDK_SUBPIXEL_LAYOUT_HORIZONTAL_BGR")]
3501    HorizontalBgr,
3502    /// The layout is vertical, the order is RGB
3503    #[doc(alias = "GDK_SUBPIXEL_LAYOUT_VERTICAL_RGB")]
3504    VerticalRgb,
3505    /// The layout is vertical, the order is BGR
3506    #[doc(alias = "GDK_SUBPIXEL_LAYOUT_VERTICAL_BGR")]
3507    VerticalBgr,
3508    #[doc(hidden)]
3509    __Unknown(i32),
3510}
3511
3512#[doc(hidden)]
3513impl IntoGlib for SubpixelLayout {
3514    type GlibType = ffi::GdkSubpixelLayout;
3515
3516    #[inline]
3517    fn into_glib(self) -> ffi::GdkSubpixelLayout {
3518        match self {
3519            Self::Unknown => ffi::GDK_SUBPIXEL_LAYOUT_UNKNOWN,
3520            Self::None => ffi::GDK_SUBPIXEL_LAYOUT_NONE,
3521            Self::HorizontalRgb => ffi::GDK_SUBPIXEL_LAYOUT_HORIZONTAL_RGB,
3522            Self::HorizontalBgr => ffi::GDK_SUBPIXEL_LAYOUT_HORIZONTAL_BGR,
3523            Self::VerticalRgb => ffi::GDK_SUBPIXEL_LAYOUT_VERTICAL_RGB,
3524            Self::VerticalBgr => ffi::GDK_SUBPIXEL_LAYOUT_VERTICAL_BGR,
3525            Self::__Unknown(value) => value,
3526        }
3527    }
3528}
3529
3530#[doc(hidden)]
3531impl FromGlib<ffi::GdkSubpixelLayout> for SubpixelLayout {
3532    #[inline]
3533    unsafe fn from_glib(value: ffi::GdkSubpixelLayout) -> Self {
3534        skip_assert_initialized!();
3535
3536        match value {
3537            ffi::GDK_SUBPIXEL_LAYOUT_UNKNOWN => Self::Unknown,
3538            ffi::GDK_SUBPIXEL_LAYOUT_NONE => Self::None,
3539            ffi::GDK_SUBPIXEL_LAYOUT_HORIZONTAL_RGB => Self::HorizontalRgb,
3540            ffi::GDK_SUBPIXEL_LAYOUT_HORIZONTAL_BGR => Self::HorizontalBgr,
3541            ffi::GDK_SUBPIXEL_LAYOUT_VERTICAL_RGB => Self::VerticalRgb,
3542            ffi::GDK_SUBPIXEL_LAYOUT_VERTICAL_BGR => Self::VerticalBgr,
3543            value => Self::__Unknown(value),
3544        }
3545    }
3546}
3547
3548impl StaticType for SubpixelLayout {
3549    #[inline]
3550    #[doc(alias = "gdk_subpixel_layout_get_type")]
3551    fn static_type() -> glib::Type {
3552        unsafe { from_glib(ffi::gdk_subpixel_layout_get_type()) }
3553    }
3554}
3555
3556impl glib::HasParamSpec for SubpixelLayout {
3557    type ParamSpec = glib::ParamSpecEnum;
3558    type SetValue = Self;
3559    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3560
3561    fn param_spec_builder() -> Self::BuilderFn {
3562        Self::ParamSpec::builder_with_default
3563    }
3564}
3565
3566impl glib::value::ValueType for SubpixelLayout {
3567    type Type = Self;
3568}
3569
3570unsafe impl<'a> glib::value::FromValue<'a> for SubpixelLayout {
3571    type Checker = glib::value::GenericValueTypeChecker<Self>;
3572
3573    #[inline]
3574    unsafe fn from_value(value: &'a glib::Value) -> Self {
3575        skip_assert_initialized!();
3576        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3577    }
3578}
3579
3580impl ToValue for SubpixelLayout {
3581    #[inline]
3582    fn to_value(&self) -> glib::Value {
3583        let mut value = glib::Value::for_value_type::<Self>();
3584        unsafe {
3585            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3586        }
3587        value
3588    }
3589
3590    #[inline]
3591    fn value_type(&self) -> glib::Type {
3592        Self::static_type()
3593    }
3594}
3595
3596impl From<SubpixelLayout> for glib::Value {
3597    #[inline]
3598    fn from(v: SubpixelLayout) -> Self {
3599        skip_assert_initialized!();
3600        ToValue::to_value(&v)
3601    }
3602}
3603
3604/// Specifies the visiblity status of a window for a [`EventVisibility`][crate::EventVisibility].
3605#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3606#[non_exhaustive]
3607#[doc(alias = "GdkVisibilityState")]
3608pub enum VisibilityState {
3609    /// the window is completely visible.
3610    #[doc(alias = "GDK_VISIBILITY_UNOBSCURED")]
3611    Unobscured,
3612    /// the window is partially visible.
3613    #[doc(alias = "GDK_VISIBILITY_PARTIAL")]
3614    Partial,
3615    /// the window is not visible at all.
3616    #[doc(alias = "GDK_VISIBILITY_FULLY_OBSCURED")]
3617    FullyObscured,
3618    #[doc(hidden)]
3619    __Unknown(i32),
3620}
3621
3622#[doc(hidden)]
3623impl IntoGlib for VisibilityState {
3624    type GlibType = ffi::GdkVisibilityState;
3625
3626    #[inline]
3627    fn into_glib(self) -> ffi::GdkVisibilityState {
3628        match self {
3629            Self::Unobscured => ffi::GDK_VISIBILITY_UNOBSCURED,
3630            Self::Partial => ffi::GDK_VISIBILITY_PARTIAL,
3631            Self::FullyObscured => ffi::GDK_VISIBILITY_FULLY_OBSCURED,
3632            Self::__Unknown(value) => value,
3633        }
3634    }
3635}
3636
3637#[doc(hidden)]
3638impl FromGlib<ffi::GdkVisibilityState> for VisibilityState {
3639    #[inline]
3640    unsafe fn from_glib(value: ffi::GdkVisibilityState) -> Self {
3641        skip_assert_initialized!();
3642
3643        match value {
3644            ffi::GDK_VISIBILITY_UNOBSCURED => Self::Unobscured,
3645            ffi::GDK_VISIBILITY_PARTIAL => Self::Partial,
3646            ffi::GDK_VISIBILITY_FULLY_OBSCURED => Self::FullyObscured,
3647            value => Self::__Unknown(value),
3648        }
3649    }
3650}
3651
3652impl StaticType for VisibilityState {
3653    #[inline]
3654    #[doc(alias = "gdk_visibility_state_get_type")]
3655    fn static_type() -> glib::Type {
3656        unsafe { from_glib(ffi::gdk_visibility_state_get_type()) }
3657    }
3658}
3659
3660impl glib::HasParamSpec for VisibilityState {
3661    type ParamSpec = glib::ParamSpecEnum;
3662    type SetValue = Self;
3663    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3664
3665    fn param_spec_builder() -> Self::BuilderFn {
3666        Self::ParamSpec::builder_with_default
3667    }
3668}
3669
3670impl glib::value::ValueType for VisibilityState {
3671    type Type = Self;
3672}
3673
3674unsafe impl<'a> glib::value::FromValue<'a> for VisibilityState {
3675    type Checker = glib::value::GenericValueTypeChecker<Self>;
3676
3677    #[inline]
3678    unsafe fn from_value(value: &'a glib::Value) -> Self {
3679        skip_assert_initialized!();
3680        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3681    }
3682}
3683
3684impl ToValue for VisibilityState {
3685    #[inline]
3686    fn to_value(&self) -> glib::Value {
3687        let mut value = glib::Value::for_value_type::<Self>();
3688        unsafe {
3689            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3690        }
3691        value
3692    }
3693
3694    #[inline]
3695    fn value_type(&self) -> glib::Type {
3696        Self::static_type()
3697    }
3698}
3699
3700impl From<VisibilityState> for glib::Value {
3701    #[inline]
3702    fn from(v: VisibilityState) -> Self {
3703        skip_assert_initialized!();
3704        ToValue::to_value(&v)
3705    }
3706}
3707
3708/// A set of values that describe the manner in which the pixel values
3709/// for a visual are converted into RGB values for display.
3710#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3711#[non_exhaustive]
3712#[doc(alias = "GdkVisualType")]
3713pub enum VisualType {
3714    /// Each pixel value indexes a grayscale value
3715    ///  directly.
3716    #[doc(alias = "GDK_VISUAL_STATIC_GRAY")]
3717    StaticGray,
3718    /// Each pixel is an index into a color map that
3719    ///  maps pixel values into grayscale values. The color map can be
3720    ///  changed by an application.
3721    #[doc(alias = "GDK_VISUAL_GRAYSCALE")]
3722    Grayscale,
3723    /// Each pixel value is an index into a predefined,
3724    ///  unmodifiable color map that maps pixel values into RGB values.
3725    #[doc(alias = "GDK_VISUAL_STATIC_COLOR")]
3726    StaticColor,
3727    /// Each pixel is an index into a color map that
3728    ///  maps pixel values into rgb values. The color map can be changed by
3729    ///  an application.
3730    #[doc(alias = "GDK_VISUAL_PSEUDO_COLOR")]
3731    PseudoColor,
3732    /// Each pixel value directly contains red, green,
3733    ///  and blue components. Use [`Visual::red_pixel_details()`][crate::Visual::red_pixel_details()], etc,
3734    ///  to obtain information about how the components are assembled into
3735    ///  a pixel value.
3736    #[doc(alias = "GDK_VISUAL_TRUE_COLOR")]
3737    TrueColor,
3738    /// Each pixel value contains red, green, and blue
3739    ///  components as for [`TrueColor`][Self::TrueColor], but the components are
3740    ///  mapped via a color table into the final output table instead of
3741    ///  being converted directly.
3742    #[doc(alias = "GDK_VISUAL_DIRECT_COLOR")]
3743    DirectColor,
3744    #[doc(hidden)]
3745    __Unknown(i32),
3746}
3747
3748#[doc(hidden)]
3749impl IntoGlib for VisualType {
3750    type GlibType = ffi::GdkVisualType;
3751
3752    #[inline]
3753    fn into_glib(self) -> ffi::GdkVisualType {
3754        match self {
3755            Self::StaticGray => ffi::GDK_VISUAL_STATIC_GRAY,
3756            Self::Grayscale => ffi::GDK_VISUAL_GRAYSCALE,
3757            Self::StaticColor => ffi::GDK_VISUAL_STATIC_COLOR,
3758            Self::PseudoColor => ffi::GDK_VISUAL_PSEUDO_COLOR,
3759            Self::TrueColor => ffi::GDK_VISUAL_TRUE_COLOR,
3760            Self::DirectColor => ffi::GDK_VISUAL_DIRECT_COLOR,
3761            Self::__Unknown(value) => value,
3762        }
3763    }
3764}
3765
3766#[doc(hidden)]
3767impl FromGlib<ffi::GdkVisualType> for VisualType {
3768    #[inline]
3769    unsafe fn from_glib(value: ffi::GdkVisualType) -> Self {
3770        skip_assert_initialized!();
3771
3772        match value {
3773            ffi::GDK_VISUAL_STATIC_GRAY => Self::StaticGray,
3774            ffi::GDK_VISUAL_GRAYSCALE => Self::Grayscale,
3775            ffi::GDK_VISUAL_STATIC_COLOR => Self::StaticColor,
3776            ffi::GDK_VISUAL_PSEUDO_COLOR => Self::PseudoColor,
3777            ffi::GDK_VISUAL_TRUE_COLOR => Self::TrueColor,
3778            ffi::GDK_VISUAL_DIRECT_COLOR => Self::DirectColor,
3779            value => Self::__Unknown(value),
3780        }
3781    }
3782}
3783
3784impl StaticType for VisualType {
3785    #[inline]
3786    #[doc(alias = "gdk_visual_type_get_type")]
3787    fn static_type() -> glib::Type {
3788        unsafe { from_glib(ffi::gdk_visual_type_get_type()) }
3789    }
3790}
3791
3792impl glib::HasParamSpec for VisualType {
3793    type ParamSpec = glib::ParamSpecEnum;
3794    type SetValue = Self;
3795    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3796
3797    fn param_spec_builder() -> Self::BuilderFn {
3798        Self::ParamSpec::builder_with_default
3799    }
3800}
3801
3802impl glib::value::ValueType for VisualType {
3803    type Type = Self;
3804}
3805
3806unsafe impl<'a> glib::value::FromValue<'a> for VisualType {
3807    type Checker = glib::value::GenericValueTypeChecker<Self>;
3808
3809    #[inline]
3810    unsafe fn from_value(value: &'a glib::Value) -> Self {
3811        skip_assert_initialized!();
3812        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3813    }
3814}
3815
3816impl ToValue for VisualType {
3817    #[inline]
3818    fn to_value(&self) -> glib::Value {
3819        let mut value = glib::Value::for_value_type::<Self>();
3820        unsafe {
3821            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3822        }
3823        value
3824    }
3825
3826    #[inline]
3827    fn value_type(&self) -> glib::Type {
3828        Self::static_type()
3829    }
3830}
3831
3832impl From<VisualType> for glib::Value {
3833    #[inline]
3834    fn from(v: VisualType) -> Self {
3835        skip_assert_initialized!();
3836        ToValue::to_value(&v)
3837    }
3838}
3839
3840/// Determines a window edge or corner.
3841#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3842#[non_exhaustive]
3843#[doc(alias = "GdkWindowEdge")]
3844pub enum WindowEdge {
3845    /// the top left corner.
3846    #[doc(alias = "GDK_WINDOW_EDGE_NORTH_WEST")]
3847    NorthWest,
3848    /// the top edge.
3849    #[doc(alias = "GDK_WINDOW_EDGE_NORTH")]
3850    North,
3851    /// the top right corner.
3852    #[doc(alias = "GDK_WINDOW_EDGE_NORTH_EAST")]
3853    NorthEast,
3854    /// the left edge.
3855    #[doc(alias = "GDK_WINDOW_EDGE_WEST")]
3856    West,
3857    /// the right edge.
3858    #[doc(alias = "GDK_WINDOW_EDGE_EAST")]
3859    East,
3860    /// the lower left corner.
3861    #[doc(alias = "GDK_WINDOW_EDGE_SOUTH_WEST")]
3862    SouthWest,
3863    /// the lower edge.
3864    #[doc(alias = "GDK_WINDOW_EDGE_SOUTH")]
3865    South,
3866    /// the lower right corner.
3867    #[doc(alias = "GDK_WINDOW_EDGE_SOUTH_EAST")]
3868    SouthEast,
3869    #[doc(hidden)]
3870    __Unknown(i32),
3871}
3872
3873#[doc(hidden)]
3874impl IntoGlib for WindowEdge {
3875    type GlibType = ffi::GdkWindowEdge;
3876
3877    #[inline]
3878    fn into_glib(self) -> ffi::GdkWindowEdge {
3879        match self {
3880            Self::NorthWest => ffi::GDK_WINDOW_EDGE_NORTH_WEST,
3881            Self::North => ffi::GDK_WINDOW_EDGE_NORTH,
3882            Self::NorthEast => ffi::GDK_WINDOW_EDGE_NORTH_EAST,
3883            Self::West => ffi::GDK_WINDOW_EDGE_WEST,
3884            Self::East => ffi::GDK_WINDOW_EDGE_EAST,
3885            Self::SouthWest => ffi::GDK_WINDOW_EDGE_SOUTH_WEST,
3886            Self::South => ffi::GDK_WINDOW_EDGE_SOUTH,
3887            Self::SouthEast => ffi::GDK_WINDOW_EDGE_SOUTH_EAST,
3888            Self::__Unknown(value) => value,
3889        }
3890    }
3891}
3892
3893#[doc(hidden)]
3894impl FromGlib<ffi::GdkWindowEdge> for WindowEdge {
3895    #[inline]
3896    unsafe fn from_glib(value: ffi::GdkWindowEdge) -> Self {
3897        skip_assert_initialized!();
3898
3899        match value {
3900            ffi::GDK_WINDOW_EDGE_NORTH_WEST => Self::NorthWest,
3901            ffi::GDK_WINDOW_EDGE_NORTH => Self::North,
3902            ffi::GDK_WINDOW_EDGE_NORTH_EAST => Self::NorthEast,
3903            ffi::GDK_WINDOW_EDGE_WEST => Self::West,
3904            ffi::GDK_WINDOW_EDGE_EAST => Self::East,
3905            ffi::GDK_WINDOW_EDGE_SOUTH_WEST => Self::SouthWest,
3906            ffi::GDK_WINDOW_EDGE_SOUTH => Self::South,
3907            ffi::GDK_WINDOW_EDGE_SOUTH_EAST => Self::SouthEast,
3908            value => Self::__Unknown(value),
3909        }
3910    }
3911}
3912
3913impl StaticType for WindowEdge {
3914    #[inline]
3915    #[doc(alias = "gdk_window_edge_get_type")]
3916    fn static_type() -> glib::Type {
3917        unsafe { from_glib(ffi::gdk_window_edge_get_type()) }
3918    }
3919}
3920
3921impl glib::HasParamSpec for WindowEdge {
3922    type ParamSpec = glib::ParamSpecEnum;
3923    type SetValue = Self;
3924    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3925
3926    fn param_spec_builder() -> Self::BuilderFn {
3927        Self::ParamSpec::builder_with_default
3928    }
3929}
3930
3931impl glib::value::ValueType for WindowEdge {
3932    type Type = Self;
3933}
3934
3935unsafe impl<'a> glib::value::FromValue<'a> for WindowEdge {
3936    type Checker = glib::value::GenericValueTypeChecker<Self>;
3937
3938    #[inline]
3939    unsafe fn from_value(value: &'a glib::Value) -> Self {
3940        skip_assert_initialized!();
3941        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3942    }
3943}
3944
3945impl ToValue for WindowEdge {
3946    #[inline]
3947    fn to_value(&self) -> glib::Value {
3948        let mut value = glib::Value::for_value_type::<Self>();
3949        unsafe {
3950            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3951        }
3952        value
3953    }
3954
3955    #[inline]
3956    fn value_type(&self) -> glib::Type {
3957        Self::static_type()
3958    }
3959}
3960
3961impl From<WindowEdge> for glib::Value {
3962    #[inline]
3963    fn from(v: WindowEdge) -> Self {
3964        skip_assert_initialized!();
3965        ToValue::to_value(&v)
3966    }
3967}
3968
3969/// Describes the kind of window.
3970#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3971#[non_exhaustive]
3972#[doc(alias = "GdkWindowType")]
3973pub enum WindowType {
3974    /// root window; this window has no parent, covers the entire
3975    ///  screen, and is created by the window system
3976    #[doc(alias = "GDK_WINDOW_ROOT")]
3977    Root,
3978    /// toplevel window (used to implement `GtkWindow`)
3979    #[doc(alias = "GDK_WINDOW_TOPLEVEL")]
3980    Toplevel,
3981    /// child window (used to implement e.g. `GtkEntry`)
3982    #[doc(alias = "GDK_WINDOW_CHILD")]
3983    Child,
3984    /// override redirect temporary window (used to implement
3985    ///  `GtkMenu`)
3986    #[doc(alias = "GDK_WINDOW_TEMP")]
3987    Temp,
3988    /// foreign window (see `gdk_window_foreign_new()`)
3989    #[doc(alias = "GDK_WINDOW_FOREIGN")]
3990    Foreign,
3991    /// offscreen window (see
3992    ///  [Offscreen Windows][OFFSCREEN-WINDOWS]). Since 2.18
3993    #[doc(alias = "GDK_WINDOW_OFFSCREEN")]
3994    Offscreen,
3995    /// subsurface-based window; This window is visually
3996    ///  tied to a toplevel, and is moved/stacked with it. Currently this window
3997    ///  type is only implemented in Wayland. Since 3.14
3998    #[doc(alias = "GDK_WINDOW_SUBSURFACE")]
3999    Subsurface,
4000    #[doc(hidden)]
4001    __Unknown(i32),
4002}
4003
4004#[doc(hidden)]
4005impl IntoGlib for WindowType {
4006    type GlibType = ffi::GdkWindowType;
4007
4008    #[inline]
4009    fn into_glib(self) -> ffi::GdkWindowType {
4010        match self {
4011            Self::Root => ffi::GDK_WINDOW_ROOT,
4012            Self::Toplevel => ffi::GDK_WINDOW_TOPLEVEL,
4013            Self::Child => ffi::GDK_WINDOW_CHILD,
4014            Self::Temp => ffi::GDK_WINDOW_TEMP,
4015            Self::Foreign => ffi::GDK_WINDOW_FOREIGN,
4016            Self::Offscreen => ffi::GDK_WINDOW_OFFSCREEN,
4017            Self::Subsurface => ffi::GDK_WINDOW_SUBSURFACE,
4018            Self::__Unknown(value) => value,
4019        }
4020    }
4021}
4022
4023#[doc(hidden)]
4024impl FromGlib<ffi::GdkWindowType> for WindowType {
4025    #[inline]
4026    unsafe fn from_glib(value: ffi::GdkWindowType) -> Self {
4027        skip_assert_initialized!();
4028
4029        match value {
4030            ffi::GDK_WINDOW_ROOT => Self::Root,
4031            ffi::GDK_WINDOW_TOPLEVEL => Self::Toplevel,
4032            ffi::GDK_WINDOW_CHILD => Self::Child,
4033            ffi::GDK_WINDOW_TEMP => Self::Temp,
4034            ffi::GDK_WINDOW_FOREIGN => Self::Foreign,
4035            ffi::GDK_WINDOW_OFFSCREEN => Self::Offscreen,
4036            ffi::GDK_WINDOW_SUBSURFACE => Self::Subsurface,
4037            value => Self::__Unknown(value),
4038        }
4039    }
4040}
4041
4042impl StaticType for WindowType {
4043    #[inline]
4044    #[doc(alias = "gdk_window_type_get_type")]
4045    fn static_type() -> glib::Type {
4046        unsafe { from_glib(ffi::gdk_window_type_get_type()) }
4047    }
4048}
4049
4050impl glib::HasParamSpec for WindowType {
4051    type ParamSpec = glib::ParamSpecEnum;
4052    type SetValue = Self;
4053    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4054
4055    fn param_spec_builder() -> Self::BuilderFn {
4056        Self::ParamSpec::builder_with_default
4057    }
4058}
4059
4060impl glib::value::ValueType for WindowType {
4061    type Type = Self;
4062}
4063
4064unsafe impl<'a> glib::value::FromValue<'a> for WindowType {
4065    type Checker = glib::value::GenericValueTypeChecker<Self>;
4066
4067    #[inline]
4068    unsafe fn from_value(value: &'a glib::Value) -> Self {
4069        skip_assert_initialized!();
4070        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4071    }
4072}
4073
4074impl ToValue for WindowType {
4075    #[inline]
4076    fn to_value(&self) -> glib::Value {
4077        let mut value = glib::Value::for_value_type::<Self>();
4078        unsafe {
4079            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4080        }
4081        value
4082    }
4083
4084    #[inline]
4085    fn value_type(&self) -> glib::Type {
4086        Self::static_type()
4087    }
4088}
4089
4090impl From<WindowType> for glib::Value {
4091    #[inline]
4092    fn from(v: WindowType) -> Self {
4093        skip_assert_initialized!();
4094        ToValue::to_value(&v)
4095    }
4096}
4097
4098/// These are hints for the window manager that indicate what type of function
4099/// the window has. The window manager can use this when determining decoration
4100/// and behaviour of the window. The hint must be set before mapping the window.
4101///
4102/// See the [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec)
4103/// specification for more details about window types.
4104#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4105#[non_exhaustive]
4106#[doc(alias = "GdkWindowTypeHint")]
4107pub enum WindowTypeHint {
4108    /// Normal toplevel window.
4109    #[doc(alias = "GDK_WINDOW_TYPE_HINT_NORMAL")]
4110    Normal,
4111    /// Dialog window.
4112    #[doc(alias = "GDK_WINDOW_TYPE_HINT_DIALOG")]
4113    Dialog,
4114    /// Window used to implement a menu; GTK+ uses
4115    ///  this hint only for torn-off menus, see `GtkTearoffMenuItem`.
4116    #[doc(alias = "GDK_WINDOW_TYPE_HINT_MENU")]
4117    Menu,
4118    /// Window used to implement toolbars.
4119    #[doc(alias = "GDK_WINDOW_TYPE_HINT_TOOLBAR")]
4120    Toolbar,
4121    /// Window used to display a splash
4122    ///  screen during application startup.
4123    #[doc(alias = "GDK_WINDOW_TYPE_HINT_SPLASHSCREEN")]
4124    Splashscreen,
4125    /// Utility windows which are not detached
4126    ///  toolbars or dialogs.
4127    #[doc(alias = "GDK_WINDOW_TYPE_HINT_UTILITY")]
4128    Utility,
4129    /// Used for creating dock or panel windows.
4130    #[doc(alias = "GDK_WINDOW_TYPE_HINT_DOCK")]
4131    Dock,
4132    /// Used for creating the desktop background
4133    ///  window.
4134    #[doc(alias = "GDK_WINDOW_TYPE_HINT_DESKTOP")]
4135    Desktop,
4136    /// A menu that belongs to a menubar.
4137    #[doc(alias = "GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU")]
4138    DropdownMenu,
4139    /// A menu that does not belong to a menubar,
4140    ///  e.g. a context menu.
4141    #[doc(alias = "GDK_WINDOW_TYPE_HINT_POPUP_MENU")]
4142    PopupMenu,
4143    /// A tooltip.
4144    #[doc(alias = "GDK_WINDOW_TYPE_HINT_TOOLTIP")]
4145    Tooltip,
4146    /// A notification - typically a “bubble”
4147    ///  that belongs to a status icon.
4148    #[doc(alias = "GDK_WINDOW_TYPE_HINT_NOTIFICATION")]
4149    Notification,
4150    /// A popup from a combo box.
4151    #[doc(alias = "GDK_WINDOW_TYPE_HINT_COMBO")]
4152    Combo,
4153    /// A window that is used to implement a DND cursor.
4154    #[doc(alias = "GDK_WINDOW_TYPE_HINT_DND")]
4155    Dnd,
4156    #[doc(hidden)]
4157    __Unknown(i32),
4158}
4159
4160#[doc(hidden)]
4161impl IntoGlib for WindowTypeHint {
4162    type GlibType = ffi::GdkWindowTypeHint;
4163
4164    fn into_glib(self) -> ffi::GdkWindowTypeHint {
4165        match self {
4166            Self::Normal => ffi::GDK_WINDOW_TYPE_HINT_NORMAL,
4167            Self::Dialog => ffi::GDK_WINDOW_TYPE_HINT_DIALOG,
4168            Self::Menu => ffi::GDK_WINDOW_TYPE_HINT_MENU,
4169            Self::Toolbar => ffi::GDK_WINDOW_TYPE_HINT_TOOLBAR,
4170            Self::Splashscreen => ffi::GDK_WINDOW_TYPE_HINT_SPLASHSCREEN,
4171            Self::Utility => ffi::GDK_WINDOW_TYPE_HINT_UTILITY,
4172            Self::Dock => ffi::GDK_WINDOW_TYPE_HINT_DOCK,
4173            Self::Desktop => ffi::GDK_WINDOW_TYPE_HINT_DESKTOP,
4174            Self::DropdownMenu => ffi::GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU,
4175            Self::PopupMenu => ffi::GDK_WINDOW_TYPE_HINT_POPUP_MENU,
4176            Self::Tooltip => ffi::GDK_WINDOW_TYPE_HINT_TOOLTIP,
4177            Self::Notification => ffi::GDK_WINDOW_TYPE_HINT_NOTIFICATION,
4178            Self::Combo => ffi::GDK_WINDOW_TYPE_HINT_COMBO,
4179            Self::Dnd => ffi::GDK_WINDOW_TYPE_HINT_DND,
4180            Self::__Unknown(value) => value,
4181        }
4182    }
4183}
4184
4185#[doc(hidden)]
4186impl FromGlib<ffi::GdkWindowTypeHint> for WindowTypeHint {
4187    unsafe fn from_glib(value: ffi::GdkWindowTypeHint) -> Self {
4188        skip_assert_initialized!();
4189
4190        match value {
4191            ffi::GDK_WINDOW_TYPE_HINT_NORMAL => Self::Normal,
4192            ffi::GDK_WINDOW_TYPE_HINT_DIALOG => Self::Dialog,
4193            ffi::GDK_WINDOW_TYPE_HINT_MENU => Self::Menu,
4194            ffi::GDK_WINDOW_TYPE_HINT_TOOLBAR => Self::Toolbar,
4195            ffi::GDK_WINDOW_TYPE_HINT_SPLASHSCREEN => Self::Splashscreen,
4196            ffi::GDK_WINDOW_TYPE_HINT_UTILITY => Self::Utility,
4197            ffi::GDK_WINDOW_TYPE_HINT_DOCK => Self::Dock,
4198            ffi::GDK_WINDOW_TYPE_HINT_DESKTOP => Self::Desktop,
4199            ffi::GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU => Self::DropdownMenu,
4200            ffi::GDK_WINDOW_TYPE_HINT_POPUP_MENU => Self::PopupMenu,
4201            ffi::GDK_WINDOW_TYPE_HINT_TOOLTIP => Self::Tooltip,
4202            ffi::GDK_WINDOW_TYPE_HINT_NOTIFICATION => Self::Notification,
4203            ffi::GDK_WINDOW_TYPE_HINT_COMBO => Self::Combo,
4204            ffi::GDK_WINDOW_TYPE_HINT_DND => Self::Dnd,
4205            value => Self::__Unknown(value),
4206        }
4207    }
4208}
4209
4210impl StaticType for WindowTypeHint {
4211    #[inline]
4212    #[doc(alias = "gdk_window_type_hint_get_type")]
4213    fn static_type() -> glib::Type {
4214        unsafe { from_glib(ffi::gdk_window_type_hint_get_type()) }
4215    }
4216}
4217
4218impl glib::HasParamSpec for WindowTypeHint {
4219    type ParamSpec = glib::ParamSpecEnum;
4220    type SetValue = Self;
4221    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4222
4223    fn param_spec_builder() -> Self::BuilderFn {
4224        Self::ParamSpec::builder_with_default
4225    }
4226}
4227
4228impl glib::value::ValueType for WindowTypeHint {
4229    type Type = Self;
4230}
4231
4232unsafe impl<'a> glib::value::FromValue<'a> for WindowTypeHint {
4233    type Checker = glib::value::GenericValueTypeChecker<Self>;
4234
4235    #[inline]
4236    unsafe fn from_value(value: &'a glib::Value) -> Self {
4237        skip_assert_initialized!();
4238        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4239    }
4240}
4241
4242impl ToValue for WindowTypeHint {
4243    #[inline]
4244    fn to_value(&self) -> glib::Value {
4245        let mut value = glib::Value::for_value_type::<Self>();
4246        unsafe {
4247            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4248        }
4249        value
4250    }
4251
4252    #[inline]
4253    fn value_type(&self) -> glib::Type {
4254        Self::static_type()
4255    }
4256}
4257
4258impl From<WindowTypeHint> for glib::Value {
4259    #[inline]
4260    fn from(v: WindowTypeHint) -> Self {
4261        skip_assert_initialized!();
4262        ToValue::to_value(&v)
4263    }
4264}
4265
4266/// [`InputOutput`][Self::InputOutput] windows are the standard kind of window you might expect.
4267/// Such windows receive events and are also displayed on screen.
4268/// [`InputOnly`][Self::InputOnly] windows are invisible; they are usually placed above other
4269/// windows in order to trap or filter the events. You can’t draw on
4270/// [`InputOnly`][Self::InputOnly] windows.
4271#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4272#[non_exhaustive]
4273#[doc(alias = "GdkWindowWindowClass")]
4274pub enum WindowWindowClass {
4275    /// window for graphics and events
4276    #[doc(alias = "GDK_INPUT_OUTPUT")]
4277    InputOutput,
4278    /// window for events only
4279    #[doc(alias = "GDK_INPUT_ONLY")]
4280    InputOnly,
4281    #[doc(hidden)]
4282    __Unknown(i32),
4283}
4284
4285#[doc(hidden)]
4286impl IntoGlib for WindowWindowClass {
4287    type GlibType = ffi::GdkWindowWindowClass;
4288
4289    #[inline]
4290    fn into_glib(self) -> ffi::GdkWindowWindowClass {
4291        match self {
4292            Self::InputOutput => ffi::GDK_INPUT_OUTPUT,
4293            Self::InputOnly => ffi::GDK_INPUT_ONLY,
4294            Self::__Unknown(value) => value,
4295        }
4296    }
4297}
4298
4299#[doc(hidden)]
4300impl FromGlib<ffi::GdkWindowWindowClass> for WindowWindowClass {
4301    #[inline]
4302    unsafe fn from_glib(value: ffi::GdkWindowWindowClass) -> Self {
4303        skip_assert_initialized!();
4304
4305        match value {
4306            ffi::GDK_INPUT_OUTPUT => Self::InputOutput,
4307            ffi::GDK_INPUT_ONLY => Self::InputOnly,
4308            value => Self::__Unknown(value),
4309        }
4310    }
4311}
4312
4313impl StaticType for WindowWindowClass {
4314    #[inline]
4315    #[doc(alias = "gdk_window_window_class_get_type")]
4316    fn static_type() -> glib::Type {
4317        unsafe { from_glib(ffi::gdk_window_window_class_get_type()) }
4318    }
4319}
4320
4321impl glib::HasParamSpec for WindowWindowClass {
4322    type ParamSpec = glib::ParamSpecEnum;
4323    type SetValue = Self;
4324    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4325
4326    fn param_spec_builder() -> Self::BuilderFn {
4327        Self::ParamSpec::builder_with_default
4328    }
4329}
4330
4331impl glib::value::ValueType for WindowWindowClass {
4332    type Type = Self;
4333}
4334
4335unsafe impl<'a> glib::value::FromValue<'a> for WindowWindowClass {
4336    type Checker = glib::value::GenericValueTypeChecker<Self>;
4337
4338    #[inline]
4339    unsafe fn from_value(value: &'a glib::Value) -> Self {
4340        skip_assert_initialized!();
4341        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4342    }
4343}
4344
4345impl ToValue for WindowWindowClass {
4346    #[inline]
4347    fn to_value(&self) -> glib::Value {
4348        let mut value = glib::Value::for_value_type::<Self>();
4349        unsafe {
4350            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4351        }
4352        value
4353    }
4354
4355    #[inline]
4356    fn value_type(&self) -> glib::Type {
4357        Self::static_type()
4358    }
4359}
4360
4361impl From<WindowWindowClass> for glib::Value {
4362    #[inline]
4363    fn from(v: WindowWindowClass) -> Self {
4364        skip_assert_initialized!();
4365        ToValue::to_value(&v)
4366    }
4367}