gdk4/auto/
flags.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::ffi;
6use glib::{bitflags::bitflags, prelude::*, translate::*};
7
8bitflags! {
9    /// Positioning hints for aligning a surface relative to a rectangle.
10    ///
11    /// These hints determine how the surface should be positioned in the case that
12    /// the surface would fall off-screen if placed in its ideal position.
13    ///
14    /// For example, [`FLIP_X`][Self::FLIP_X] will replace [`Gravity::NorthWest`][crate::Gravity::NorthWest] with
15    /// [`Gravity::NorthEast`][crate::Gravity::NorthEast] and vice versa if the surface extends beyond the left
16    /// or right edges of the monitor.
17    ///
18    /// If [`SLIDE_X`][Self::SLIDE_X] is set, the surface can be shifted horizontally to fit
19    /// on-screen. If [`RESIZE_X`][Self::RESIZE_X] is set, the surface can be shrunken
20    /// horizontally to fit.
21    ///
22    /// In general, when multiple flags are set, flipping should take precedence over
23    /// sliding, which should take precedence over resizing.
24    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
25    #[doc(alias = "GdkAnchorHints")]
26    pub struct AnchorHints: u32 {
27        /// allow flipping anchors horizontally
28        #[doc(alias = "GDK_ANCHOR_FLIP_X")]
29        const FLIP_X = ffi::GDK_ANCHOR_FLIP_X as _;
30        /// allow flipping anchors vertically
31        #[doc(alias = "GDK_ANCHOR_FLIP_Y")]
32        const FLIP_Y = ffi::GDK_ANCHOR_FLIP_Y as _;
33        /// allow sliding surface horizontally
34        #[doc(alias = "GDK_ANCHOR_SLIDE_X")]
35        const SLIDE_X = ffi::GDK_ANCHOR_SLIDE_X as _;
36        /// allow sliding surface vertically
37        #[doc(alias = "GDK_ANCHOR_SLIDE_Y")]
38        const SLIDE_Y = ffi::GDK_ANCHOR_SLIDE_Y as _;
39        /// allow resizing surface horizontally
40        #[doc(alias = "GDK_ANCHOR_RESIZE_X")]
41        const RESIZE_X = ffi::GDK_ANCHOR_RESIZE_X as _;
42        /// allow resizing surface vertically
43        #[doc(alias = "GDK_ANCHOR_RESIZE_Y")]
44        const RESIZE_Y = ffi::GDK_ANCHOR_RESIZE_Y as _;
45        /// allow flipping anchors on both axes
46        #[doc(alias = "GDK_ANCHOR_FLIP")]
47        const FLIP = ffi::GDK_ANCHOR_FLIP as _;
48        /// allow sliding surface on both axes
49        #[doc(alias = "GDK_ANCHOR_SLIDE")]
50        const SLIDE = ffi::GDK_ANCHOR_SLIDE as _;
51        /// allow resizing surface on both axes
52        #[doc(alias = "GDK_ANCHOR_RESIZE")]
53        const RESIZE = ffi::GDK_ANCHOR_RESIZE as _;
54    }
55}
56
57#[doc(hidden)]
58impl IntoGlib for AnchorHints {
59    type GlibType = ffi::GdkAnchorHints;
60
61    #[inline]
62    fn into_glib(self) -> ffi::GdkAnchorHints {
63        self.bits()
64    }
65}
66
67#[doc(hidden)]
68impl FromGlib<ffi::GdkAnchorHints> for AnchorHints {
69    #[inline]
70    unsafe fn from_glib(value: ffi::GdkAnchorHints) -> Self {
71        skip_assert_initialized!();
72        Self::from_bits_truncate(value)
73    }
74}
75
76impl StaticType for AnchorHints {
77    #[inline]
78    #[doc(alias = "gdk_anchor_hints_get_type")]
79    fn static_type() -> glib::Type {
80        unsafe { from_glib(ffi::gdk_anchor_hints_get_type()) }
81    }
82}
83
84impl glib::HasParamSpec for AnchorHints {
85    type ParamSpec = glib::ParamSpecFlags;
86    type SetValue = Self;
87    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
88
89    fn param_spec_builder() -> Self::BuilderFn {
90        Self::ParamSpec::builder
91    }
92}
93
94impl glib::value::ValueType for AnchorHints {
95    type Type = Self;
96}
97
98unsafe impl<'a> glib::value::FromValue<'a> for AnchorHints {
99    type Checker = glib::value::GenericValueTypeChecker<Self>;
100
101    #[inline]
102    unsafe fn from_value(value: &'a glib::Value) -> Self {
103        skip_assert_initialized!();
104        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
105    }
106}
107
108impl ToValue for AnchorHints {
109    #[inline]
110    fn to_value(&self) -> glib::Value {
111        let mut value = glib::Value::for_value_type::<Self>();
112        unsafe {
113            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
114        }
115        value
116    }
117
118    #[inline]
119    fn value_type(&self) -> glib::Type {
120        Self::static_type()
121    }
122}
123
124impl From<AnchorHints> for glib::Value {
125    #[inline]
126    fn from(v: AnchorHints) -> Self {
127        skip_assert_initialized!();
128        ToValue::to_value(&v)
129    }
130}
131
132bitflags! {
133    /// Flags describing the current capabilities of a device/tool.
134    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
135    #[doc(alias = "GdkAxisFlags")]
136    pub struct AxisFlags: u32 {
137        /// X axis is present
138        #[doc(alias = "GDK_AXIS_FLAG_X")]
139        const X = ffi::GDK_AXIS_FLAG_X as _;
140        /// Y axis is present
141        #[doc(alias = "GDK_AXIS_FLAG_Y")]
142        const Y = ffi::GDK_AXIS_FLAG_Y as _;
143        /// Scroll X delta axis is present
144        #[doc(alias = "GDK_AXIS_FLAG_DELTA_X")]
145        const DELTA_X = ffi::GDK_AXIS_FLAG_DELTA_X as _;
146        /// Scroll Y delta axis is present
147        #[doc(alias = "GDK_AXIS_FLAG_DELTA_Y")]
148        const DELTA_Y = ffi::GDK_AXIS_FLAG_DELTA_Y as _;
149        /// Pressure axis is present
150        #[doc(alias = "GDK_AXIS_FLAG_PRESSURE")]
151        const PRESSURE = ffi::GDK_AXIS_FLAG_PRESSURE as _;
152        /// X tilt axis is present
153        #[doc(alias = "GDK_AXIS_FLAG_XTILT")]
154        const XTILT = ffi::GDK_AXIS_FLAG_XTILT as _;
155        /// Y tilt axis is present
156        #[doc(alias = "GDK_AXIS_FLAG_YTILT")]
157        const YTILT = ffi::GDK_AXIS_FLAG_YTILT as _;
158        /// Wheel axis is present
159        #[doc(alias = "GDK_AXIS_FLAG_WHEEL")]
160        const WHEEL = ffi::GDK_AXIS_FLAG_WHEEL as _;
161        /// Distance axis is present
162        #[doc(alias = "GDK_AXIS_FLAG_DISTANCE")]
163        const DISTANCE = ffi::GDK_AXIS_FLAG_DISTANCE as _;
164        /// Z-axis rotation is present
165        #[doc(alias = "GDK_AXIS_FLAG_ROTATION")]
166        const ROTATION = ffi::GDK_AXIS_FLAG_ROTATION as _;
167        /// Slider axis is present
168        #[doc(alias = "GDK_AXIS_FLAG_SLIDER")]
169        const SLIDER = ffi::GDK_AXIS_FLAG_SLIDER as _;
170    }
171}
172
173#[doc(hidden)]
174impl IntoGlib for AxisFlags {
175    type GlibType = ffi::GdkAxisFlags;
176
177    #[inline]
178    fn into_glib(self) -> ffi::GdkAxisFlags {
179        self.bits()
180    }
181}
182
183#[doc(hidden)]
184impl FromGlib<ffi::GdkAxisFlags> for AxisFlags {
185    #[inline]
186    unsafe fn from_glib(value: ffi::GdkAxisFlags) -> Self {
187        skip_assert_initialized!();
188        Self::from_bits_truncate(value)
189    }
190}
191
192impl StaticType for AxisFlags {
193    #[inline]
194    #[doc(alias = "gdk_axis_flags_get_type")]
195    fn static_type() -> glib::Type {
196        unsafe { from_glib(ffi::gdk_axis_flags_get_type()) }
197    }
198}
199
200impl glib::HasParamSpec for AxisFlags {
201    type ParamSpec = glib::ParamSpecFlags;
202    type SetValue = Self;
203    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
204
205    fn param_spec_builder() -> Self::BuilderFn {
206        Self::ParamSpec::builder
207    }
208}
209
210impl glib::value::ValueType for AxisFlags {
211    type Type = Self;
212}
213
214unsafe impl<'a> glib::value::FromValue<'a> for AxisFlags {
215    type Checker = glib::value::GenericValueTypeChecker<Self>;
216
217    #[inline]
218    unsafe fn from_value(value: &'a glib::Value) -> Self {
219        skip_assert_initialized!();
220        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
221    }
222}
223
224impl ToValue for AxisFlags {
225    #[inline]
226    fn to_value(&self) -> glib::Value {
227        let mut value = glib::Value::for_value_type::<Self>();
228        unsafe {
229            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
230        }
231        value
232    }
233
234    #[inline]
235    fn value_type(&self) -> glib::Type {
236        Self::static_type()
237    }
238}
239
240impl From<AxisFlags> for glib::Value {
241    #[inline]
242    fn from(v: AxisFlags) -> Self {
243        skip_assert_initialized!();
244        ToValue::to_value(&v)
245    }
246}
247
248bitflags! {
249    /// Used in [`Drop`][crate::Drop] and [`Drag`][crate::Drag] to indicate the actions that the
250    /// destination can and should do with the dropped data.
251    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
252    #[doc(alias = "GdkDragAction")]
253    pub struct DragAction: u32 {
254        /// No action.
255        #[cfg(feature = "v4_20")]
256        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
257        #[doc(alias = "GDK_ACTION_NONE")]
258        const NONE = ffi::GDK_ACTION_NONE as _;
259        /// Copy the data.
260        #[doc(alias = "GDK_ACTION_COPY")]
261        const COPY = ffi::GDK_ACTION_COPY as _;
262        /// Move the data, i.e. first copy it, then delete
263        ///   it from the source using the DELETE target of the X selection protocol.
264        #[doc(alias = "GDK_ACTION_MOVE")]
265        const MOVE = ffi::GDK_ACTION_MOVE as _;
266        /// Add a link to the data. Note that this is only
267        ///   useful if source and destination agree on what it means, and is not
268        ///   supported on all platforms.
269        #[doc(alias = "GDK_ACTION_LINK")]
270        const LINK = ffi::GDK_ACTION_LINK as _;
271        /// Ask the user what to do with the data.
272        #[doc(alias = "GDK_ACTION_ASK")]
273        const ASK = ffi::GDK_ACTION_ASK as _;
274    }
275}
276
277impl DragAction {
278    #[doc(alias = "gdk_drag_action_is_unique")]
279    pub fn is_unique(self) -> bool {
280        assert_initialized_main_thread!();
281        unsafe { from_glib(ffi::gdk_drag_action_is_unique(self.into_glib())) }
282    }
283}
284
285#[doc(hidden)]
286impl IntoGlib for DragAction {
287    type GlibType = ffi::GdkDragAction;
288
289    #[inline]
290    fn into_glib(self) -> ffi::GdkDragAction {
291        self.bits()
292    }
293}
294
295#[doc(hidden)]
296impl FromGlib<ffi::GdkDragAction> for DragAction {
297    #[inline]
298    unsafe fn from_glib(value: ffi::GdkDragAction) -> Self {
299        skip_assert_initialized!();
300        Self::from_bits_truncate(value)
301    }
302}
303
304impl StaticType for DragAction {
305    #[inline]
306    #[doc(alias = "gdk_drag_action_get_type")]
307    fn static_type() -> glib::Type {
308        unsafe { from_glib(ffi::gdk_drag_action_get_type()) }
309    }
310}
311
312impl glib::HasParamSpec for DragAction {
313    type ParamSpec = glib::ParamSpecFlags;
314    type SetValue = Self;
315    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
316
317    fn param_spec_builder() -> Self::BuilderFn {
318        Self::ParamSpec::builder
319    }
320}
321
322impl glib::value::ValueType for DragAction {
323    type Type = Self;
324}
325
326unsafe impl<'a> glib::value::FromValue<'a> for DragAction {
327    type Checker = glib::value::GenericValueTypeChecker<Self>;
328
329    #[inline]
330    unsafe fn from_value(value: &'a glib::Value) -> Self {
331        skip_assert_initialized!();
332        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
333    }
334}
335
336impl ToValue for DragAction {
337    #[inline]
338    fn to_value(&self) -> glib::Value {
339        let mut value = glib::Value::for_value_type::<Self>();
340        unsafe {
341            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
342        }
343        value
344    }
345
346    #[inline]
347    fn value_type(&self) -> glib::Type {
348        Self::static_type()
349    }
350}
351
352impl From<DragAction> for glib::Value {
353    #[inline]
354    fn from(v: DragAction) -> Self {
355        skip_assert_initialized!();
356        ToValue::to_value(&v)
357    }
358}
359
360bitflags! {
361    /// Used to represent the different paint clock phases that can be requested.
362    ///
363    /// The elements of the enumeration correspond to the signals of [`FrameClock`][crate::FrameClock].
364    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
365    #[doc(alias = "GdkFrameClockPhase")]
366    pub struct FrameClockPhase: u32 {
367        /// no phase
368        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_NONE")]
369        const NONE = ffi::GDK_FRAME_CLOCK_PHASE_NONE as _;
370        /// corresponds to GdkFrameClock::flush-events. Should not be handled by applications.
371        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS")]
372        const FLUSH_EVENTS = ffi::GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS as _;
373        /// corresponds to GdkFrameClock::before-paint. Should not be handled by applications.
374        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT")]
375        const BEFORE_PAINT = ffi::GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT as _;
376        /// corresponds to GdkFrameClock::update.
377        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_UPDATE")]
378        const UPDATE = ffi::GDK_FRAME_CLOCK_PHASE_UPDATE as _;
379        /// corresponds to GdkFrameClock::layout. Should not be handled by applications.
380        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_LAYOUT")]
381        const LAYOUT = ffi::GDK_FRAME_CLOCK_PHASE_LAYOUT as _;
382        /// corresponds to GdkFrameClock::paint.
383        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_PAINT")]
384        const PAINT = ffi::GDK_FRAME_CLOCK_PHASE_PAINT as _;
385        /// corresponds to GdkFrameClock::resume-events. Should not be handled by applications.
386        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS")]
387        const RESUME_EVENTS = ffi::GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS as _;
388        /// corresponds to GdkFrameClock::after-paint. Should not be handled by applications.
389        #[doc(alias = "GDK_FRAME_CLOCK_PHASE_AFTER_PAINT")]
390        const AFTER_PAINT = ffi::GDK_FRAME_CLOCK_PHASE_AFTER_PAINT as _;
391    }
392}
393
394#[doc(hidden)]
395impl IntoGlib for FrameClockPhase {
396    type GlibType = ffi::GdkFrameClockPhase;
397
398    #[inline]
399    fn into_glib(self) -> ffi::GdkFrameClockPhase {
400        self.bits()
401    }
402}
403
404#[doc(hidden)]
405impl FromGlib<ffi::GdkFrameClockPhase> for FrameClockPhase {
406    #[inline]
407    unsafe fn from_glib(value: ffi::GdkFrameClockPhase) -> Self {
408        skip_assert_initialized!();
409        Self::from_bits_truncate(value)
410    }
411}
412
413impl StaticType for FrameClockPhase {
414    #[inline]
415    #[doc(alias = "gdk_frame_clock_phase_get_type")]
416    fn static_type() -> glib::Type {
417        unsafe { from_glib(ffi::gdk_frame_clock_phase_get_type()) }
418    }
419}
420
421impl glib::HasParamSpec for FrameClockPhase {
422    type ParamSpec = glib::ParamSpecFlags;
423    type SetValue = Self;
424    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
425
426    fn param_spec_builder() -> Self::BuilderFn {
427        Self::ParamSpec::builder
428    }
429}
430
431impl glib::value::ValueType for FrameClockPhase {
432    type Type = Self;
433}
434
435unsafe impl<'a> glib::value::FromValue<'a> for FrameClockPhase {
436    type Checker = glib::value::GenericValueTypeChecker<Self>;
437
438    #[inline]
439    unsafe fn from_value(value: &'a glib::Value) -> Self {
440        skip_assert_initialized!();
441        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
442    }
443}
444
445impl ToValue for FrameClockPhase {
446    #[inline]
447    fn to_value(&self) -> glib::Value {
448        let mut value = glib::Value::for_value_type::<Self>();
449        unsafe {
450            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
451        }
452        value
453    }
454
455    #[inline]
456    fn value_type(&self) -> glib::Type {
457        Self::static_type()
458    }
459}
460
461impl From<FrameClockPhase> for glib::Value {
462    #[inline]
463    fn from(v: FrameClockPhase) -> Self {
464        skip_assert_initialized!();
465        ToValue::to_value(&v)
466    }
467}
468
469#[cfg(feature = "v4_6")]
470bitflags! {
471    /// The list of the different APIs that GdkGLContext can potentially support.
472    #[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
473    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
474    #[doc(alias = "GdkGLAPI")]
475    pub struct GLAPI: u32 {
476        /// The OpenGL API
477        #[doc(alias = "GDK_GL_API_GL")]
478        const GL = ffi::GDK_GL_API_GL as _;
479        /// The OpenGL ES API
480        #[doc(alias = "GDK_GL_API_GLES")]
481        const GLES = ffi::GDK_GL_API_GLES as _;
482    }
483}
484
485#[cfg(feature = "v4_6")]
486#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
487#[doc(hidden)]
488impl IntoGlib for GLAPI {
489    type GlibType = ffi::GdkGLAPI;
490
491    #[inline]
492    fn into_glib(self) -> ffi::GdkGLAPI {
493        self.bits()
494    }
495}
496
497#[cfg(feature = "v4_6")]
498#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
499#[doc(hidden)]
500impl FromGlib<ffi::GdkGLAPI> for GLAPI {
501    #[inline]
502    unsafe fn from_glib(value: ffi::GdkGLAPI) -> Self {
503        skip_assert_initialized!();
504        Self::from_bits_truncate(value)
505    }
506}
507
508#[cfg(feature = "v4_6")]
509#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
510impl StaticType for GLAPI {
511    #[inline]
512    #[doc(alias = "gdk_gl_api_get_type")]
513    fn static_type() -> glib::Type {
514        unsafe { from_glib(ffi::gdk_gl_api_get_type()) }
515    }
516}
517
518#[cfg(feature = "v4_6")]
519#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
520impl glib::HasParamSpec for GLAPI {
521    type ParamSpec = glib::ParamSpecFlags;
522    type SetValue = Self;
523    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
524
525    fn param_spec_builder() -> Self::BuilderFn {
526        Self::ParamSpec::builder
527    }
528}
529
530#[cfg(feature = "v4_6")]
531#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
532impl glib::value::ValueType for GLAPI {
533    type Type = Self;
534}
535
536#[cfg(feature = "v4_6")]
537#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
538unsafe impl<'a> glib::value::FromValue<'a> for GLAPI {
539    type Checker = glib::value::GenericValueTypeChecker<Self>;
540
541    #[inline]
542    unsafe fn from_value(value: &'a glib::Value) -> Self {
543        skip_assert_initialized!();
544        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
545    }
546}
547
548#[cfg(feature = "v4_6")]
549#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
550impl ToValue for GLAPI {
551    #[inline]
552    fn to_value(&self) -> glib::Value {
553        let mut value = glib::Value::for_value_type::<Self>();
554        unsafe {
555            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
556        }
557        value
558    }
559
560    #[inline]
561    fn value_type(&self) -> glib::Type {
562        Self::static_type()
563    }
564}
565
566#[cfg(feature = "v4_6")]
567#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
568impl From<GLAPI> for glib::Value {
569    #[inline]
570    fn from(v: GLAPI) -> Self {
571        skip_assert_initialized!();
572        ToValue::to_value(&v)
573    }
574}
575
576bitflags! {
577    /// Flags to indicate the state of modifier keys and mouse buttons
578    /// in events.
579    ///
580    /// Typical modifier keys are Shift, Control, Meta, Super, Hyper, Alt, Compose,
581    /// Apple, CapsLock or ShiftLock.
582    ///
583    /// Note that GDK may add internal values to events which include values outside
584    /// of this enumeration. Your code should preserve and ignore them. You can use
585    /// `GDK_MODIFIER_MASK` to remove all private values.
586    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
587    #[doc(alias = "GdkModifierType")]
588    pub struct ModifierType: u32 {
589        /// No modifier.
590        #[cfg(feature = "v4_14")]
591        #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
592        #[doc(alias = "GDK_NO_MODIFIER_MASK")]
593        const NO_MODIFIER_MASK = ffi::GDK_NO_MODIFIER_MASK as _;
594        /// the Shift key.
595        #[doc(alias = "GDK_SHIFT_MASK")]
596        const SHIFT_MASK = ffi::GDK_SHIFT_MASK as _;
597        /// a Lock key (depending on the Windowing System configuration,
598        ///    this may either be <kbd>CapsLock</kbd> or <kbd>ShiftLock</kbd>).
599        #[doc(alias = "GDK_LOCK_MASK")]
600        const LOCK_MASK = ffi::GDK_LOCK_MASK as _;
601        /// the Control key.
602        #[doc(alias = "GDK_CONTROL_MASK")]
603        const CONTROL_MASK = ffi::GDK_CONTROL_MASK as _;
604        /// the fourth modifier key (it depends on the Windowing System
605        ///    configuration which key is interpreted as this modifier, but normally it
606        ///    is the <kbd>Alt</kbd> key).
607        #[doc(alias = "GDK_ALT_MASK")]
608        const ALT_MASK = ffi::GDK_ALT_MASK as _;
609        /// the first mouse button.
610        #[doc(alias = "GDK_BUTTON1_MASK")]
611        const BUTTON1_MASK = ffi::GDK_BUTTON1_MASK as _;
612        /// the second mouse button.
613        #[doc(alias = "GDK_BUTTON2_MASK")]
614        const BUTTON2_MASK = ffi::GDK_BUTTON2_MASK as _;
615        /// the third mouse button.
616        #[doc(alias = "GDK_BUTTON3_MASK")]
617        const BUTTON3_MASK = ffi::GDK_BUTTON3_MASK as _;
618        /// the fourth mouse button.
619        #[doc(alias = "GDK_BUTTON4_MASK")]
620        const BUTTON4_MASK = ffi::GDK_BUTTON4_MASK as _;
621        /// the fifth mouse button.
622        #[doc(alias = "GDK_BUTTON5_MASK")]
623        const BUTTON5_MASK = ffi::GDK_BUTTON5_MASK as _;
624        /// the Super modifier.
625        #[doc(alias = "GDK_SUPER_MASK")]
626        const SUPER_MASK = ffi::GDK_SUPER_MASK as _;
627        /// the Hyper modifier.
628        #[doc(alias = "GDK_HYPER_MASK")]
629        const HYPER_MASK = ffi::GDK_HYPER_MASK as _;
630        /// the Meta modifier. Maps to Command on macOS.
631        #[doc(alias = "GDK_META_MASK")]
632        const META_MASK = ffi::GDK_META_MASK as _;
633    }
634}
635
636#[doc(hidden)]
637impl IntoGlib for ModifierType {
638    type GlibType = ffi::GdkModifierType;
639
640    #[inline]
641    fn into_glib(self) -> ffi::GdkModifierType {
642        self.bits()
643    }
644}
645
646#[doc(hidden)]
647impl FromGlib<ffi::GdkModifierType> for ModifierType {
648    #[inline]
649    unsafe fn from_glib(value: ffi::GdkModifierType) -> Self {
650        skip_assert_initialized!();
651        Self::from_bits_truncate(value)
652    }
653}
654
655impl StaticType for ModifierType {
656    #[inline]
657    #[doc(alias = "gdk_modifier_type_get_type")]
658    fn static_type() -> glib::Type {
659        unsafe { from_glib(ffi::gdk_modifier_type_get_type()) }
660    }
661}
662
663impl glib::HasParamSpec for ModifierType {
664    type ParamSpec = glib::ParamSpecFlags;
665    type SetValue = Self;
666    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
667
668    fn param_spec_builder() -> Self::BuilderFn {
669        Self::ParamSpec::builder
670    }
671}
672
673impl glib::value::ValueType for ModifierType {
674    type Type = Self;
675}
676
677unsafe impl<'a> glib::value::FromValue<'a> for ModifierType {
678    type Checker = glib::value::GenericValueTypeChecker<Self>;
679
680    #[inline]
681    unsafe fn from_value(value: &'a glib::Value) -> Self {
682        skip_assert_initialized!();
683        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
684    }
685}
686
687impl ToValue for ModifierType {
688    #[inline]
689    fn to_value(&self) -> glib::Value {
690        let mut value = glib::Value::for_value_type::<Self>();
691        unsafe {
692            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
693        }
694        value
695    }
696
697    #[inline]
698    fn value_type(&self) -> glib::Type {
699        Self::static_type()
700    }
701}
702
703impl From<ModifierType> for glib::Value {
704    #[inline]
705    fn from(v: ModifierType) -> Self {
706        skip_assert_initialized!();
707        ToValue::to_value(&v)
708    }
709}
710
711bitflags! {
712    /// Flags about a paintable object.
713    ///
714    /// Implementations use these for optimizations such as caching.
715    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
716    #[doc(alias = "GdkPaintableFlags")]
717    pub struct PaintableFlags: u32 {
718        /// The size is immutable.
719        ///   The [`invalidate-size`][struct@crate::Paintable#invalidate-size] signal will never be
720        ///   emitted.
721        #[doc(alias = "GDK_PAINTABLE_STATIC_SIZE")]
722        const SIZE = ffi::GDK_PAINTABLE_STATIC_SIZE as _;
723        /// The content is immutable.
724        ///   The [`invalidate-contents`][struct@crate::Paintable#invalidate-contents] signal will never be
725        ///   emitted.
726        #[doc(alias = "GDK_PAINTABLE_STATIC_CONTENTS")]
727        const CONTENTS = ffi::GDK_PAINTABLE_STATIC_CONTENTS as _;
728    }
729}
730
731#[doc(hidden)]
732impl IntoGlib for PaintableFlags {
733    type GlibType = ffi::GdkPaintableFlags;
734
735    #[inline]
736    fn into_glib(self) -> ffi::GdkPaintableFlags {
737        self.bits()
738    }
739}
740
741#[doc(hidden)]
742impl FromGlib<ffi::GdkPaintableFlags> for PaintableFlags {
743    #[inline]
744    unsafe fn from_glib(value: ffi::GdkPaintableFlags) -> Self {
745        skip_assert_initialized!();
746        Self::from_bits_truncate(value)
747    }
748}
749
750impl StaticType for PaintableFlags {
751    #[inline]
752    #[doc(alias = "gdk_paintable_flags_get_type")]
753    fn static_type() -> glib::Type {
754        unsafe { from_glib(ffi::gdk_paintable_flags_get_type()) }
755    }
756}
757
758impl glib::HasParamSpec for PaintableFlags {
759    type ParamSpec = glib::ParamSpecFlags;
760    type SetValue = Self;
761    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
762
763    fn param_spec_builder() -> Self::BuilderFn {
764        Self::ParamSpec::builder
765    }
766}
767
768impl glib::value::ValueType for PaintableFlags {
769    type Type = Self;
770}
771
772unsafe impl<'a> glib::value::FromValue<'a> for PaintableFlags {
773    type Checker = glib::value::GenericValueTypeChecker<Self>;
774
775    #[inline]
776    unsafe fn from_value(value: &'a glib::Value) -> Self {
777        skip_assert_initialized!();
778        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
779    }
780}
781
782impl ToValue for PaintableFlags {
783    #[inline]
784    fn to_value(&self) -> glib::Value {
785        let mut value = glib::Value::for_value_type::<Self>();
786        unsafe {
787            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
788        }
789        value
790    }
791
792    #[inline]
793    fn value_type(&self) -> glib::Type {
794        Self::static_type()
795    }
796}
797
798impl From<PaintableFlags> for glib::Value {
799    #[inline]
800    fn from(v: PaintableFlags) -> Self {
801        skip_assert_initialized!();
802        ToValue::to_value(&v)
803    }
804}
805
806bitflags! {
807    /// Flags describing the seat capabilities.
808    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
809    #[doc(alias = "GdkSeatCapabilities")]
810    pub struct SeatCapabilities: u32 {
811        /// No input capabilities
812        #[doc(alias = "GDK_SEAT_CAPABILITY_NONE")]
813        const NONE = ffi::GDK_SEAT_CAPABILITY_NONE as _;
814        /// The seat has a pointer (e.g. mouse)
815        #[doc(alias = "GDK_SEAT_CAPABILITY_POINTER")]
816        const POINTER = ffi::GDK_SEAT_CAPABILITY_POINTER as _;
817        /// The seat has touchscreen(s) attached
818        #[doc(alias = "GDK_SEAT_CAPABILITY_TOUCH")]
819        const TOUCH = ffi::GDK_SEAT_CAPABILITY_TOUCH as _;
820        /// The seat has drawing tablet(s) attached
821        #[doc(alias = "GDK_SEAT_CAPABILITY_TABLET_STYLUS")]
822        const TABLET_STYLUS = ffi::GDK_SEAT_CAPABILITY_TABLET_STYLUS as _;
823        /// The seat has keyboard(s) attached
824        #[doc(alias = "GDK_SEAT_CAPABILITY_KEYBOARD")]
825        const KEYBOARD = ffi::GDK_SEAT_CAPABILITY_KEYBOARD as _;
826        /// The seat has drawing tablet pad(s) attached
827        #[doc(alias = "GDK_SEAT_CAPABILITY_TABLET_PAD")]
828        const TABLET_PAD = ffi::GDK_SEAT_CAPABILITY_TABLET_PAD as _;
829        /// The union of all pointing capabilities
830        #[doc(alias = "GDK_SEAT_CAPABILITY_ALL_POINTING")]
831        const ALL_POINTING = ffi::GDK_SEAT_CAPABILITY_ALL_POINTING as _;
832        /// The union of all capabilities
833        #[doc(alias = "GDK_SEAT_CAPABILITY_ALL")]
834        const ALL = ffi::GDK_SEAT_CAPABILITY_ALL as _;
835    }
836}
837
838#[doc(hidden)]
839impl IntoGlib for SeatCapabilities {
840    type GlibType = ffi::GdkSeatCapabilities;
841
842    #[inline]
843    fn into_glib(self) -> ffi::GdkSeatCapabilities {
844        self.bits()
845    }
846}
847
848#[doc(hidden)]
849impl FromGlib<ffi::GdkSeatCapabilities> for SeatCapabilities {
850    #[inline]
851    unsafe fn from_glib(value: ffi::GdkSeatCapabilities) -> Self {
852        skip_assert_initialized!();
853        Self::from_bits_truncate(value)
854    }
855}
856
857impl StaticType for SeatCapabilities {
858    #[inline]
859    #[doc(alias = "gdk_seat_capabilities_get_type")]
860    fn static_type() -> glib::Type {
861        unsafe { from_glib(ffi::gdk_seat_capabilities_get_type()) }
862    }
863}
864
865impl glib::HasParamSpec for SeatCapabilities {
866    type ParamSpec = glib::ParamSpecFlags;
867    type SetValue = Self;
868    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
869
870    fn param_spec_builder() -> Self::BuilderFn {
871        Self::ParamSpec::builder
872    }
873}
874
875impl glib::value::ValueType for SeatCapabilities {
876    type Type = Self;
877}
878
879unsafe impl<'a> glib::value::FromValue<'a> for SeatCapabilities {
880    type Checker = glib::value::GenericValueTypeChecker<Self>;
881
882    #[inline]
883    unsafe fn from_value(value: &'a glib::Value) -> Self {
884        skip_assert_initialized!();
885        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
886    }
887}
888
889impl ToValue for SeatCapabilities {
890    #[inline]
891    fn to_value(&self) -> glib::Value {
892        let mut value = glib::Value::for_value_type::<Self>();
893        unsafe {
894            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
895        }
896        value
897    }
898
899    #[inline]
900    fn value_type(&self) -> glib::Type {
901        Self::static_type()
902    }
903}
904
905impl From<SeatCapabilities> for glib::Value {
906    #[inline]
907    fn from(v: SeatCapabilities) -> Self {
908        skip_assert_initialized!();
909        ToValue::to_value(&v)
910    }
911}
912
913#[cfg(feature = "v4_20")]
914bitflags! {
915    /// Reflects what features a [`Toplevel`][crate::Toplevel] supports.
916    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
917    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
918    #[doc(alias = "GdkToplevelCapabilities")]
919    pub struct ToplevelCapabilities: u32 {
920        /// Whether tiled window states are supported.
921        #[cfg(feature = "v4_20")]
922        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
923        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_EDGE_CONSTRAINTS")]
924        const EDGE_CONSTRAINTS = ffi::GDK_TOPLEVEL_CAPABILITIES_EDGE_CONSTRAINTS as _;
925        /// Whether inhibiting system shortcuts is supported.
926        /// See [`ToplevelExt::inhibit_system_shortcuts()`][crate::prelude::ToplevelExt::inhibit_system_shortcuts()].
927        #[cfg(feature = "v4_20")]
928        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
929        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_INHIBIT_SHORTCUTS")]
930        const INHIBIT_SHORTCUTS = ffi::GDK_TOPLEVEL_CAPABILITIES_INHIBIT_SHORTCUTS as _;
931        /// Whether titlebar gestures are supported.
932        /// See [`ToplevelExt::titlebar_gesture()`][crate::prelude::ToplevelExt::titlebar_gesture()].
933        #[cfg(feature = "v4_20")]
934        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
935        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_TITLEBAR_GESTURES")]
936        const TITLEBAR_GESTURES = ffi::GDK_TOPLEVEL_CAPABILITIES_TITLEBAR_GESTURES as _;
937        /// Whether showing the window menu is supported.
938        /// See [`ToplevelExt::show_window_menu()`][crate::prelude::ToplevelExt::show_window_menu()].
939        #[cfg(feature = "v4_20")]
940        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
941        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_WINDOW_MENU")]
942        const WINDOW_MENU = ffi::GDK_TOPLEVEL_CAPABILITIES_WINDOW_MENU as _;
943        /// Whether the toplevel can be maximized.
944        #[cfg(feature = "v4_20")]
945        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
946        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_MAXIMIZE")]
947        const MAXIMIZE = ffi::GDK_TOPLEVEL_CAPABILITIES_MAXIMIZE as _;
948        /// Whether the toplevel can be made fullscreen.
949        #[cfg(feature = "v4_20")]
950        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
951        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_FULLSCREEN")]
952        const FULLSCREEN = ffi::GDK_TOPLEVEL_CAPABILITIES_FULLSCREEN as _;
953        /// Whether the toplevel can be minimized.
954        /// See [`ToplevelExt::minimize()`][crate::prelude::ToplevelExt::minimize()].
955        #[cfg(feature = "v4_20")]
956        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
957        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_MINIMIZE")]
958        const MINIMIZE = ffi::GDK_TOPLEVEL_CAPABILITIES_MINIMIZE as _;
959        /// Whether the toplevel can be lowered.
960        /// See [`ToplevelExt::lower()`][crate::prelude::ToplevelExt::lower()].
961        #[cfg(feature = "v4_20")]
962        #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
963        #[doc(alias = "GDK_TOPLEVEL_CAPABILITIES_LOWER")]
964        const LOWER = ffi::GDK_TOPLEVEL_CAPABILITIES_LOWER as _;
965    }
966}
967
968#[cfg(feature = "v4_20")]
969#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
970#[doc(hidden)]
971impl IntoGlib for ToplevelCapabilities {
972    type GlibType = ffi::GdkToplevelCapabilities;
973
974    #[inline]
975    fn into_glib(self) -> ffi::GdkToplevelCapabilities {
976        self.bits()
977    }
978}
979
980#[cfg(feature = "v4_20")]
981#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
982#[doc(hidden)]
983impl FromGlib<ffi::GdkToplevelCapabilities> for ToplevelCapabilities {
984    #[inline]
985    unsafe fn from_glib(value: ffi::GdkToplevelCapabilities) -> Self {
986        skip_assert_initialized!();
987        Self::from_bits_truncate(value)
988    }
989}
990
991#[cfg(feature = "v4_20")]
992#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
993impl StaticType for ToplevelCapabilities {
994    #[inline]
995    #[doc(alias = "gdk_toplevel_capabilities_get_type")]
996    fn static_type() -> glib::Type {
997        unsafe { from_glib(ffi::gdk_toplevel_capabilities_get_type()) }
998    }
999}
1000
1001#[cfg(feature = "v4_20")]
1002#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1003impl glib::HasParamSpec for ToplevelCapabilities {
1004    type ParamSpec = glib::ParamSpecFlags;
1005    type SetValue = Self;
1006    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
1007
1008    fn param_spec_builder() -> Self::BuilderFn {
1009        Self::ParamSpec::builder
1010    }
1011}
1012
1013#[cfg(feature = "v4_20")]
1014#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1015impl glib::value::ValueType for ToplevelCapabilities {
1016    type Type = Self;
1017}
1018
1019#[cfg(feature = "v4_20")]
1020#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1021unsafe impl<'a> glib::value::FromValue<'a> for ToplevelCapabilities {
1022    type Checker = glib::value::GenericValueTypeChecker<Self>;
1023
1024    #[inline]
1025    unsafe fn from_value(value: &'a glib::Value) -> Self {
1026        skip_assert_initialized!();
1027        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
1028    }
1029}
1030
1031#[cfg(feature = "v4_20")]
1032#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1033impl ToValue for ToplevelCapabilities {
1034    #[inline]
1035    fn to_value(&self) -> glib::Value {
1036        let mut value = glib::Value::for_value_type::<Self>();
1037        unsafe {
1038            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
1039        }
1040        value
1041    }
1042
1043    #[inline]
1044    fn value_type(&self) -> glib::Type {
1045        Self::static_type()
1046    }
1047}
1048
1049#[cfg(feature = "v4_20")]
1050#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
1051impl From<ToplevelCapabilities> for glib::Value {
1052    #[inline]
1053    fn from(v: ToplevelCapabilities) -> Self {
1054        skip_assert_initialized!();
1055        ToValue::to_value(&v)
1056    }
1057}
1058
1059bitflags! {
1060    /// Specifies the state of a toplevel surface.
1061    ///
1062    /// On platforms that support information about individual edges, the
1063    /// [`TILED`][Self::TILED] state will be set whenever any of the individual
1064    /// tiled states is set. On platforms that lack that support, the tiled state
1065    /// will give an indication of tiledness without any of the per-edge states
1066    /// being set.
1067    #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
1068    #[doc(alias = "GdkToplevelState")]
1069    pub struct ToplevelState: u32 {
1070        /// the surface is minimized
1071        #[doc(alias = "GDK_TOPLEVEL_STATE_MINIMIZED")]
1072        const MINIMIZED = ffi::GDK_TOPLEVEL_STATE_MINIMIZED as _;
1073        /// the surface is maximized
1074        #[doc(alias = "GDK_TOPLEVEL_STATE_MAXIMIZED")]
1075        const MAXIMIZED = ffi::GDK_TOPLEVEL_STATE_MAXIMIZED as _;
1076        /// the surface is sticky
1077        #[doc(alias = "GDK_TOPLEVEL_STATE_STICKY")]
1078        const STICKY = ffi::GDK_TOPLEVEL_STATE_STICKY as _;
1079        /// the surface is maximized without decorations
1080        #[doc(alias = "GDK_TOPLEVEL_STATE_FULLSCREEN")]
1081        const FULLSCREEN = ffi::GDK_TOPLEVEL_STATE_FULLSCREEN as _;
1082        /// the surface is kept above other surfaces
1083        #[doc(alias = "GDK_TOPLEVEL_STATE_ABOVE")]
1084        const ABOVE = ffi::GDK_TOPLEVEL_STATE_ABOVE as _;
1085        /// the surface is kept below other surfaces
1086        #[doc(alias = "GDK_TOPLEVEL_STATE_BELOW")]
1087        const BELOW = ffi::GDK_TOPLEVEL_STATE_BELOW as _;
1088        /// the surface is presented as focused (with active decorations)
1089        #[doc(alias = "GDK_TOPLEVEL_STATE_FOCUSED")]
1090        const FOCUSED = ffi::GDK_TOPLEVEL_STATE_FOCUSED as _;
1091        /// the surface is in a tiled state
1092        #[doc(alias = "GDK_TOPLEVEL_STATE_TILED")]
1093        const TILED = ffi::GDK_TOPLEVEL_STATE_TILED as _;
1094        /// whether the top edge is tiled
1095        #[doc(alias = "GDK_TOPLEVEL_STATE_TOP_TILED")]
1096        const TOP_TILED = ffi::GDK_TOPLEVEL_STATE_TOP_TILED as _;
1097        /// whether the top edge is resizable
1098        #[doc(alias = "GDK_TOPLEVEL_STATE_TOP_RESIZABLE")]
1099        const TOP_RESIZABLE = ffi::GDK_TOPLEVEL_STATE_TOP_RESIZABLE as _;
1100        /// whether the right edge is tiled
1101        #[doc(alias = "GDK_TOPLEVEL_STATE_RIGHT_TILED")]
1102        const RIGHT_TILED = ffi::GDK_TOPLEVEL_STATE_RIGHT_TILED as _;
1103        /// whether the right edge is resizable
1104        #[doc(alias = "GDK_TOPLEVEL_STATE_RIGHT_RESIZABLE")]
1105        const RIGHT_RESIZABLE = ffi::GDK_TOPLEVEL_STATE_RIGHT_RESIZABLE as _;
1106        /// whether the bottom edge is tiled
1107        #[doc(alias = "GDK_TOPLEVEL_STATE_BOTTOM_TILED")]
1108        const BOTTOM_TILED = ffi::GDK_TOPLEVEL_STATE_BOTTOM_TILED as _;
1109        /// whether the bottom edge is resizable
1110        #[doc(alias = "GDK_TOPLEVEL_STATE_BOTTOM_RESIZABLE")]
1111        const BOTTOM_RESIZABLE = ffi::GDK_TOPLEVEL_STATE_BOTTOM_RESIZABLE as _;
1112        /// whether the left edge is tiled
1113        #[doc(alias = "GDK_TOPLEVEL_STATE_LEFT_TILED")]
1114        const LEFT_TILED = ffi::GDK_TOPLEVEL_STATE_LEFT_TILED as _;
1115        /// whether the left edge is resizable
1116        #[doc(alias = "GDK_TOPLEVEL_STATE_LEFT_RESIZABLE")]
1117        const LEFT_RESIZABLE = ffi::GDK_TOPLEVEL_STATE_LEFT_RESIZABLE as _;
1118        /// The surface is not visible to the user.
1119        #[cfg(feature = "v4_12")]
1120        #[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
1121        #[doc(alias = "GDK_TOPLEVEL_STATE_SUSPENDED")]
1122        const SUSPENDED = ffi::GDK_TOPLEVEL_STATE_SUSPENDED as _;
1123    }
1124}
1125
1126#[doc(hidden)]
1127impl IntoGlib for ToplevelState {
1128    type GlibType = ffi::GdkToplevelState;
1129
1130    #[inline]
1131    fn into_glib(self) -> ffi::GdkToplevelState {
1132        self.bits()
1133    }
1134}
1135
1136#[doc(hidden)]
1137impl FromGlib<ffi::GdkToplevelState> for ToplevelState {
1138    #[inline]
1139    unsafe fn from_glib(value: ffi::GdkToplevelState) -> Self {
1140        skip_assert_initialized!();
1141        Self::from_bits_truncate(value)
1142    }
1143}
1144
1145impl StaticType for ToplevelState {
1146    #[inline]
1147    #[doc(alias = "gdk_toplevel_state_get_type")]
1148    fn static_type() -> glib::Type {
1149        unsafe { from_glib(ffi::gdk_toplevel_state_get_type()) }
1150    }
1151}
1152
1153impl glib::HasParamSpec for ToplevelState {
1154    type ParamSpec = glib::ParamSpecFlags;
1155    type SetValue = Self;
1156    type BuilderFn = fn(&str) -> glib::ParamSpecFlagsBuilder<Self>;
1157
1158    fn param_spec_builder() -> Self::BuilderFn {
1159        Self::ParamSpec::builder
1160    }
1161}
1162
1163impl glib::value::ValueType for ToplevelState {
1164    type Type = Self;
1165}
1166
1167unsafe impl<'a> glib::value::FromValue<'a> for ToplevelState {
1168    type Checker = glib::value::GenericValueTypeChecker<Self>;
1169
1170    #[inline]
1171    unsafe fn from_value(value: &'a glib::Value) -> Self {
1172        skip_assert_initialized!();
1173        from_glib(glib::gobject_ffi::g_value_get_flags(value.to_glib_none().0))
1174    }
1175}
1176
1177impl ToValue for ToplevelState {
1178    #[inline]
1179    fn to_value(&self) -> glib::Value {
1180        let mut value = glib::Value::for_value_type::<Self>();
1181        unsafe {
1182            glib::gobject_ffi::g_value_set_flags(value.to_glib_none_mut().0, self.into_glib());
1183        }
1184        value
1185    }
1186
1187    #[inline]
1188    fn value_type(&self) -> glib::Type {
1189        Self::static_type()
1190    }
1191}
1192
1193impl From<ToplevelState> for glib::Value {
1194    #[inline]
1195    fn from(v: ToplevelState) -> Self {
1196        skip_assert_initialized!();
1197        ToValue::to_value(&v)
1198    }
1199}