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