Skip to main content

gtk4/auto/
enums.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::ffi;
6use glib::{prelude::*, translate::*};
7
8/// The priority of an accessibility announcement.
9#[cfg(feature = "v4_14")]
10#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
11#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12#[non_exhaustive]
13#[doc(alias = "GtkAccessibleAnnouncementPriority")]
14pub enum AccessibleAnnouncementPriority {
15    /// The announcement is low priority,
16    ///   and might be read only on the user's request.
17    #[doc(alias = "GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_LOW")]
18    Low,
19    /// The announcement is of medium
20    ///   priority, and is usually spoken at the next opportunity, such as at the
21    ///   end of speaking the current sentence or when the user pauses typing.
22    #[doc(alias = "GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_MEDIUM")]
23    Medium,
24    /// The announcement is of high
25    ///   priority, and is usually spoken immediately. Because an interruption
26    ///   might disorient users or cause them to not complete their current task,
27    ///   authors SHOULD NOT use high priority announcements unless the
28    ///   interruption is imperative. An example would be a notification about a
29    ///   critical battery power level.
30    #[doc(alias = "GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_HIGH")]
31    High,
32    #[doc(hidden)]
33    __Unknown(i32),
34}
35
36#[cfg(feature = "v4_14")]
37#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
38#[doc(hidden)]
39impl IntoGlib for AccessibleAnnouncementPriority {
40    type GlibType = ffi::GtkAccessibleAnnouncementPriority;
41
42    #[inline]
43    fn into_glib(self) -> ffi::GtkAccessibleAnnouncementPriority {
44        match self {
45            Self::Low => ffi::GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_LOW,
46            Self::Medium => ffi::GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_MEDIUM,
47            Self::High => ffi::GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_HIGH,
48            Self::__Unknown(value) => value,
49        }
50    }
51}
52
53#[cfg(feature = "v4_14")]
54#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
55#[doc(hidden)]
56impl FromGlib<ffi::GtkAccessibleAnnouncementPriority> for AccessibleAnnouncementPriority {
57    #[inline]
58    unsafe fn from_glib(value: ffi::GtkAccessibleAnnouncementPriority) -> Self {
59        skip_assert_initialized!();
60
61        match value {
62            ffi::GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_LOW => Self::Low,
63            ffi::GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_MEDIUM => Self::Medium,
64            ffi::GTK_ACCESSIBLE_ANNOUNCEMENT_PRIORITY_HIGH => Self::High,
65            value => Self::__Unknown(value),
66        }
67    }
68}
69
70#[cfg(feature = "v4_14")]
71#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
72impl StaticType for AccessibleAnnouncementPriority {
73    #[inline]
74    #[doc(alias = "gtk_accessible_announcement_priority_get_type")]
75    fn static_type() -> glib::Type {
76        unsafe { from_glib(ffi::gtk_accessible_announcement_priority_get_type()) }
77    }
78}
79
80#[cfg(feature = "v4_14")]
81#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
82impl glib::HasParamSpec for AccessibleAnnouncementPriority {
83    type ParamSpec = glib::ParamSpecEnum;
84    type SetValue = Self;
85    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
86
87    fn param_spec_builder() -> Self::BuilderFn {
88        Self::ParamSpec::builder_with_default
89    }
90}
91
92#[cfg(feature = "v4_14")]
93#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
94impl glib::value::ValueType for AccessibleAnnouncementPriority {
95    type Type = Self;
96}
97
98#[cfg(feature = "v4_14")]
99#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
100unsafe impl<'a> glib::value::FromValue<'a> for AccessibleAnnouncementPriority {
101    type Checker = glib::value::GenericValueTypeChecker<Self>;
102
103    #[inline]
104    unsafe fn from_value(value: &'a glib::Value) -> Self {
105        skip_assert_initialized!();
106        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
107    }
108}
109
110#[cfg(feature = "v4_14")]
111#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
112impl ToValue for AccessibleAnnouncementPriority {
113    #[inline]
114    fn to_value(&self) -> glib::Value {
115        let mut value = glib::Value::for_value_type::<Self>();
116        unsafe {
117            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
118        }
119        value
120    }
121
122    #[inline]
123    fn value_type(&self) -> glib::Type {
124        Self::static_type()
125    }
126}
127
128#[cfg(feature = "v4_14")]
129#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
130impl From<AccessibleAnnouncementPriority> for glib::Value {
131    #[inline]
132    fn from(v: AccessibleAnnouncementPriority) -> Self {
133        skip_assert_initialized!();
134        ToValue::to_value(&v)
135    }
136}
137
138/// The possible values for the [`AccessibleProperty::Autocomplete`][crate::AccessibleProperty::Autocomplete]
139/// accessible property.
140#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
141#[non_exhaustive]
142#[doc(alias = "GtkAccessibleAutocomplete")]
143pub enum AccessibleAutocomplete {
144    /// Automatic suggestions are not displayed.
145    #[doc(alias = "GTK_ACCESSIBLE_AUTOCOMPLETE_NONE")]
146    None,
147    /// When a user is providing input, text
148    ///    suggesting one way to complete the provided input may be dynamically
149    ///    inserted after the caret.
150    #[doc(alias = "GTK_ACCESSIBLE_AUTOCOMPLETE_INLINE")]
151    Inline,
152    /// When a user is providing input, an element
153    ///    containing a collection of values that could complete the provided input
154    ///    may be displayed.
155    #[doc(alias = "GTK_ACCESSIBLE_AUTOCOMPLETE_LIST")]
156    List,
157    /// When a user is providing input, an element
158    ///    containing a collection of values that could complete the provided input
159    ///    may be displayed. If displayed, one value in the collection is automatically
160    ///    selected, and the text needed to complete the automatically selected value
161    ///    appears after the caret in the input.
162    #[doc(alias = "GTK_ACCESSIBLE_AUTOCOMPLETE_BOTH")]
163    Both,
164    #[doc(hidden)]
165    __Unknown(i32),
166}
167
168#[doc(hidden)]
169impl IntoGlib for AccessibleAutocomplete {
170    type GlibType = ffi::GtkAccessibleAutocomplete;
171
172    #[inline]
173    fn into_glib(self) -> ffi::GtkAccessibleAutocomplete {
174        match self {
175            Self::None => ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_NONE,
176            Self::Inline => ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_INLINE,
177            Self::List => ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_LIST,
178            Self::Both => ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_BOTH,
179            Self::__Unknown(value) => value,
180        }
181    }
182}
183
184#[doc(hidden)]
185impl FromGlib<ffi::GtkAccessibleAutocomplete> for AccessibleAutocomplete {
186    #[inline]
187    unsafe fn from_glib(value: ffi::GtkAccessibleAutocomplete) -> Self {
188        skip_assert_initialized!();
189
190        match value {
191            ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_NONE => Self::None,
192            ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_INLINE => Self::Inline,
193            ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_LIST => Self::List,
194            ffi::GTK_ACCESSIBLE_AUTOCOMPLETE_BOTH => Self::Both,
195            value => Self::__Unknown(value),
196        }
197    }
198}
199
200impl StaticType for AccessibleAutocomplete {
201    #[inline]
202    #[doc(alias = "gtk_accessible_autocomplete_get_type")]
203    fn static_type() -> glib::Type {
204        unsafe { from_glib(ffi::gtk_accessible_autocomplete_get_type()) }
205    }
206}
207
208impl glib::HasParamSpec for AccessibleAutocomplete {
209    type ParamSpec = glib::ParamSpecEnum;
210    type SetValue = Self;
211    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
212
213    fn param_spec_builder() -> Self::BuilderFn {
214        Self::ParamSpec::builder_with_default
215    }
216}
217
218impl glib::value::ValueType for AccessibleAutocomplete {
219    type Type = Self;
220}
221
222unsafe impl<'a> glib::value::FromValue<'a> for AccessibleAutocomplete {
223    type Checker = glib::value::GenericValueTypeChecker<Self>;
224
225    #[inline]
226    unsafe fn from_value(value: &'a glib::Value) -> Self {
227        skip_assert_initialized!();
228        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
229    }
230}
231
232impl ToValue for AccessibleAutocomplete {
233    #[inline]
234    fn to_value(&self) -> glib::Value {
235        let mut value = glib::Value::for_value_type::<Self>();
236        unsafe {
237            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
238        }
239        value
240    }
241
242    #[inline]
243    fn value_type(&self) -> glib::Type {
244        Self::static_type()
245    }
246}
247
248impl From<AccessibleAutocomplete> for glib::Value {
249    #[inline]
250    fn from(v: AccessibleAutocomplete) -> Self {
251        skip_assert_initialized!();
252        ToValue::to_value(&v)
253    }
254}
255
256/// The possible values for the [`AccessibleState::Invalid`][crate::AccessibleState::Invalid]
257/// accessible state.
258///
259/// Note that the [`False`][Self::False] and
260/// [`True`][Self::True] have the same values
261/// as [`false`] and [`true`].
262#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
263#[non_exhaustive]
264#[doc(alias = "GtkAccessibleInvalidState")]
265pub enum AccessibleInvalidState {
266    /// There are no detected errors in the value
267    #[doc(alias = "GTK_ACCESSIBLE_INVALID_FALSE")]
268    False,
269    /// The value entered by the user has failed validation
270    #[doc(alias = "GTK_ACCESSIBLE_INVALID_TRUE")]
271    True,
272    /// A grammatical error was detected
273    #[doc(alias = "GTK_ACCESSIBLE_INVALID_GRAMMAR")]
274    Grammar,
275    /// A spelling error was detected
276    #[doc(alias = "GTK_ACCESSIBLE_INVALID_SPELLING")]
277    Spelling,
278    #[doc(hidden)]
279    __Unknown(i32),
280}
281
282#[doc(hidden)]
283impl IntoGlib for AccessibleInvalidState {
284    type GlibType = ffi::GtkAccessibleInvalidState;
285
286    #[inline]
287    fn into_glib(self) -> ffi::GtkAccessibleInvalidState {
288        match self {
289            Self::False => ffi::GTK_ACCESSIBLE_INVALID_FALSE,
290            Self::True => ffi::GTK_ACCESSIBLE_INVALID_TRUE,
291            Self::Grammar => ffi::GTK_ACCESSIBLE_INVALID_GRAMMAR,
292            Self::Spelling => ffi::GTK_ACCESSIBLE_INVALID_SPELLING,
293            Self::__Unknown(value) => value,
294        }
295    }
296}
297
298#[doc(hidden)]
299impl FromGlib<ffi::GtkAccessibleInvalidState> for AccessibleInvalidState {
300    #[inline]
301    unsafe fn from_glib(value: ffi::GtkAccessibleInvalidState) -> Self {
302        skip_assert_initialized!();
303
304        match value {
305            ffi::GTK_ACCESSIBLE_INVALID_FALSE => Self::False,
306            ffi::GTK_ACCESSIBLE_INVALID_TRUE => Self::True,
307            ffi::GTK_ACCESSIBLE_INVALID_GRAMMAR => Self::Grammar,
308            ffi::GTK_ACCESSIBLE_INVALID_SPELLING => Self::Spelling,
309            value => Self::__Unknown(value),
310        }
311    }
312}
313
314impl StaticType for AccessibleInvalidState {
315    #[inline]
316    #[doc(alias = "gtk_accessible_invalid_state_get_type")]
317    fn static_type() -> glib::Type {
318        unsafe { from_glib(ffi::gtk_accessible_invalid_state_get_type()) }
319    }
320}
321
322impl glib::HasParamSpec for AccessibleInvalidState {
323    type ParamSpec = glib::ParamSpecEnum;
324    type SetValue = Self;
325    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
326
327    fn param_spec_builder() -> Self::BuilderFn {
328        Self::ParamSpec::builder_with_default
329    }
330}
331
332impl glib::value::ValueType for AccessibleInvalidState {
333    type Type = Self;
334}
335
336unsafe impl<'a> glib::value::FromValue<'a> for AccessibleInvalidState {
337    type Checker = glib::value::GenericValueTypeChecker<Self>;
338
339    #[inline]
340    unsafe fn from_value(value: &'a glib::Value) -> Self {
341        skip_assert_initialized!();
342        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
343    }
344}
345
346impl ToValue for AccessibleInvalidState {
347    #[inline]
348    fn to_value(&self) -> glib::Value {
349        let mut value = glib::Value::for_value_type::<Self>();
350        unsafe {
351            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
352        }
353        value
354    }
355
356    #[inline]
357    fn value_type(&self) -> glib::Type {
358        Self::static_type()
359    }
360}
361
362impl From<AccessibleInvalidState> for glib::Value {
363    #[inline]
364    fn from(v: AccessibleInvalidState) -> Self {
365        skip_assert_initialized!();
366        ToValue::to_value(&v)
367    }
368}
369
370/// The various platform states which can be queried
371/// using [`AccessibleExt::platform_state()`][crate::prelude::AccessibleExt::platform_state()].
372#[cfg(feature = "v4_10")]
373#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
374#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
375#[non_exhaustive]
376#[doc(alias = "GtkAccessiblePlatformState")]
377pub enum AccessiblePlatformState {
378    /// whether the accessible can be focused
379    #[doc(alias = "GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE")]
380    Focusable,
381    /// whether the accessible has focus
382    #[doc(alias = "GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED")]
383    Focused,
384    /// whether the accessible is active
385    #[doc(alias = "GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE")]
386    Active,
387    #[doc(hidden)]
388    __Unknown(i32),
389}
390
391#[cfg(feature = "v4_10")]
392#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
393#[doc(hidden)]
394impl IntoGlib for AccessiblePlatformState {
395    type GlibType = ffi::GtkAccessiblePlatformState;
396
397    #[inline]
398    fn into_glib(self) -> ffi::GtkAccessiblePlatformState {
399        match self {
400            Self::Focusable => ffi::GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE,
401            Self::Focused => ffi::GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED,
402            Self::Active => ffi::GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE,
403            Self::__Unknown(value) => value,
404        }
405    }
406}
407
408#[cfg(feature = "v4_10")]
409#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
410#[doc(hidden)]
411impl FromGlib<ffi::GtkAccessiblePlatformState> for AccessiblePlatformState {
412    #[inline]
413    unsafe fn from_glib(value: ffi::GtkAccessiblePlatformState) -> Self {
414        skip_assert_initialized!();
415
416        match value {
417            ffi::GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE => Self::Focusable,
418            ffi::GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED => Self::Focused,
419            ffi::GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE => Self::Active,
420            value => Self::__Unknown(value),
421        }
422    }
423}
424
425#[cfg(feature = "v4_10")]
426#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
427impl StaticType for AccessiblePlatformState {
428    #[inline]
429    #[doc(alias = "gtk_accessible_platform_state_get_type")]
430    fn static_type() -> glib::Type {
431        unsafe { from_glib(ffi::gtk_accessible_platform_state_get_type()) }
432    }
433}
434
435#[cfg(feature = "v4_10")]
436#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
437impl glib::HasParamSpec for AccessiblePlatformState {
438    type ParamSpec = glib::ParamSpecEnum;
439    type SetValue = Self;
440    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
441
442    fn param_spec_builder() -> Self::BuilderFn {
443        Self::ParamSpec::builder_with_default
444    }
445}
446
447#[cfg(feature = "v4_10")]
448#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
449impl glib::value::ValueType for AccessiblePlatformState {
450    type Type = Self;
451}
452
453#[cfg(feature = "v4_10")]
454#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
455unsafe impl<'a> glib::value::FromValue<'a> for AccessiblePlatformState {
456    type Checker = glib::value::GenericValueTypeChecker<Self>;
457
458    #[inline]
459    unsafe fn from_value(value: &'a glib::Value) -> Self {
460        skip_assert_initialized!();
461        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
462    }
463}
464
465#[cfg(feature = "v4_10")]
466#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
467impl ToValue for AccessiblePlatformState {
468    #[inline]
469    fn to_value(&self) -> glib::Value {
470        let mut value = glib::Value::for_value_type::<Self>();
471        unsafe {
472            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
473        }
474        value
475    }
476
477    #[inline]
478    fn value_type(&self) -> glib::Type {
479        Self::static_type()
480    }
481}
482
483#[cfg(feature = "v4_10")]
484#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
485impl From<AccessiblePlatformState> for glib::Value {
486    #[inline]
487    fn from(v: AccessiblePlatformState) -> Self {
488        skip_assert_initialized!();
489        ToValue::to_value(&v)
490    }
491}
492
493/// The possible accessible properties of a [`Accessible`][crate::Accessible].
494#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
495#[non_exhaustive]
496#[doc(alias = "GtkAccessibleProperty")]
497pub enum AccessibleProperty {
498    /// Indicates whether inputting text
499    ///    could trigger display of one or more predictions of the user's intended
500    ///    value for a combobox, searchbox, or textbox and specifies how predictions
501    ///    would be presented if they were made. Value type: [`AccessibleAutocomplete`][crate::AccessibleAutocomplete]
502    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE")]
503    Autocomplete,
504    /// Defines a string value that describes
505    ///    or annotates the current element. Value type: string
506    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_DESCRIPTION")]
507    Description,
508    /// Indicates the availability of interactive
509    ///    popup element, such as menu or popover, that can be triggered by an
510    ///    element. Contrary to “aria-haspopup”, it doesn't indicate the type of the
511    ///    element, as such it cannot be used to indicate the availability of more
512    ///    complex elements such as dialog. Value type: boolean
513    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_HAS_POPUP")]
514    HasPopup,
515    /// Indicates keyboard shortcuts that an
516    ///    author has implemented to activate or give focus to an element. Value type:
517    ///    string. The format of the value is a space-separated list of shortcuts, with
518    ///    each shortcut consisting of one or more modifiers (`Control`, `Alt` or `Shift`),
519    ///    followed by a non-modifier key, all separated by `+`. The
520    ///    [WAI-ARIA](https://www.w3.org/TR/wai-aria/#aria-keyshortcuts) reference
521    ///    specifies how to build keyboard shortcuts strings, with specific values
522    ///    for each key which are the same regardless of the language, so these
523    ///    strings can't be built from localized key names. You can convert an
524    ///    accelerator into the matching key shortcuts label with
525    ///    [`accelerator_get_accessible_label()`][crate::accelerator_get_accessible_label()].
526    ///    Examples: `F2`, `Alt+F`, `Control+Shift+N`
527    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS")]
528    KeyShortcuts,
529    /// Defines a string value that labels the current
530    ///    element. Value type: string
531    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_LABEL")]
532    Label,
533    /// Defines the hierarchical level of an element
534    ///    within a structure. Value type: integer
535    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_LEVEL")]
536    Level,
537    /// Indicates whether an element is modal when
538    ///    displayed. Value type: boolean
539    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_MODAL")]
540    Modal,
541    /// Indicates whether a text box accepts
542    ///    multiple lines of input or only a single line. Value type: boolean
543    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_MULTI_LINE")]
544    MultiLine,
545    /// Indicates that the user may select
546    ///    more than one item from the current selectable descendants. Value type:
547    ///    boolean
548    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE")]
549    MultiSelectable,
550    /// Indicates whether the element's
551    ///    orientation is horizontal, vertical, or unknown/ambiguous. Value type:
552    ///    [`Orientation`][crate::Orientation]
553    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_ORIENTATION")]
554    Orientation,
555    /// Defines a short hint (a word or short
556    ///    phrase) intended to aid the user with data entry when the control has no
557    ///    value. A hint could be a sample value or a brief description of the expected
558    ///    format. Value type: string
559    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER")]
560    Placeholder,
561    /// Indicates that the element is not editable,
562    ///    but is otherwise operable. Value type: boolean
563    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_READ_ONLY")]
564    ReadOnly,
565    /// Indicates that user input is required on
566    ///    the element before a form may be submitted. Value type: boolean
567    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_REQUIRED")]
568    Required,
569    /// Defines a human-readable,
570    ///    author-localized description for the role of an element. Value type: string
571    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION")]
572    RoleDescription,
573    /// Indicates if items in a table or grid are
574    ///    sorted in ascending or descending order. Value type: [`AccessibleSort`][crate::AccessibleSort]
575    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_SORT")]
576    Sort,
577    /// Defines the maximum allowed value for a
578    ///    range widget. Value type: double
579    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_VALUE_MAX")]
580    ValueMax,
581    /// Defines the minimum allowed value for a
582    ///    range widget. Value type: double
583    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_VALUE_MIN")]
584    ValueMin,
585    /// Defines the current value for a range widget.
586    ///    Value type: double
587    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_VALUE_NOW")]
588    ValueNow,
589    /// Defines the human readable text alternative
590    ///    of [enum@Gtk.AccessibleProperty.VALUE_NOW] for a range widget. Value type: string
591    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT")]
592    ValueText,
593    /// Defines a string value that provides a description of non-standard keyboard
594    /// interactions of the current element. Value type: string
595    #[cfg(feature = "v4_16")]
596    #[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
597    #[doc(alias = "GTK_ACCESSIBLE_PROPERTY_HELP_TEXT")]
598    HelpText,
599    #[doc(hidden)]
600    __Unknown(i32),
601}
602
603impl AccessibleProperty {
604    #[doc(alias = "gtk_accessible_property_init_value")]
605    pub fn init_value(self, value: &mut glib::Value) {
606        assert_initialized_main_thread!();
607        unsafe {
608            ffi::gtk_accessible_property_init_value(self.into_glib(), value.to_glib_none_mut().0);
609        }
610    }
611}
612
613#[doc(hidden)]
614impl IntoGlib for AccessibleProperty {
615    type GlibType = ffi::GtkAccessibleProperty;
616
617    fn into_glib(self) -> ffi::GtkAccessibleProperty {
618        match self {
619            Self::Autocomplete => ffi::GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE,
620            Self::Description => ffi::GTK_ACCESSIBLE_PROPERTY_DESCRIPTION,
621            Self::HasPopup => ffi::GTK_ACCESSIBLE_PROPERTY_HAS_POPUP,
622            Self::KeyShortcuts => ffi::GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS,
623            Self::Label => ffi::GTK_ACCESSIBLE_PROPERTY_LABEL,
624            Self::Level => ffi::GTK_ACCESSIBLE_PROPERTY_LEVEL,
625            Self::Modal => ffi::GTK_ACCESSIBLE_PROPERTY_MODAL,
626            Self::MultiLine => ffi::GTK_ACCESSIBLE_PROPERTY_MULTI_LINE,
627            Self::MultiSelectable => ffi::GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE,
628            Self::Orientation => ffi::GTK_ACCESSIBLE_PROPERTY_ORIENTATION,
629            Self::Placeholder => ffi::GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER,
630            Self::ReadOnly => ffi::GTK_ACCESSIBLE_PROPERTY_READ_ONLY,
631            Self::Required => ffi::GTK_ACCESSIBLE_PROPERTY_REQUIRED,
632            Self::RoleDescription => ffi::GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION,
633            Self::Sort => ffi::GTK_ACCESSIBLE_PROPERTY_SORT,
634            Self::ValueMax => ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_MAX,
635            Self::ValueMin => ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_MIN,
636            Self::ValueNow => ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_NOW,
637            Self::ValueText => ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT,
638            #[cfg(feature = "v4_16")]
639            Self::HelpText => ffi::GTK_ACCESSIBLE_PROPERTY_HELP_TEXT,
640            Self::__Unknown(value) => value,
641        }
642    }
643}
644
645#[doc(hidden)]
646impl FromGlib<ffi::GtkAccessibleProperty> for AccessibleProperty {
647    unsafe fn from_glib(value: ffi::GtkAccessibleProperty) -> Self {
648        skip_assert_initialized!();
649
650        match value {
651            ffi::GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE => Self::Autocomplete,
652            ffi::GTK_ACCESSIBLE_PROPERTY_DESCRIPTION => Self::Description,
653            ffi::GTK_ACCESSIBLE_PROPERTY_HAS_POPUP => Self::HasPopup,
654            ffi::GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS => Self::KeyShortcuts,
655            ffi::GTK_ACCESSIBLE_PROPERTY_LABEL => Self::Label,
656            ffi::GTK_ACCESSIBLE_PROPERTY_LEVEL => Self::Level,
657            ffi::GTK_ACCESSIBLE_PROPERTY_MODAL => Self::Modal,
658            ffi::GTK_ACCESSIBLE_PROPERTY_MULTI_LINE => Self::MultiLine,
659            ffi::GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE => Self::MultiSelectable,
660            ffi::GTK_ACCESSIBLE_PROPERTY_ORIENTATION => Self::Orientation,
661            ffi::GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER => Self::Placeholder,
662            ffi::GTK_ACCESSIBLE_PROPERTY_READ_ONLY => Self::ReadOnly,
663            ffi::GTK_ACCESSIBLE_PROPERTY_REQUIRED => Self::Required,
664            ffi::GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION => Self::RoleDescription,
665            ffi::GTK_ACCESSIBLE_PROPERTY_SORT => Self::Sort,
666            ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_MAX => Self::ValueMax,
667            ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_MIN => Self::ValueMin,
668            ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_NOW => Self::ValueNow,
669            ffi::GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT => Self::ValueText,
670            #[cfg(feature = "v4_16")]
671            ffi::GTK_ACCESSIBLE_PROPERTY_HELP_TEXT => Self::HelpText,
672            value => Self::__Unknown(value),
673        }
674    }
675}
676
677impl StaticType for AccessibleProperty {
678    #[inline]
679    #[doc(alias = "gtk_accessible_property_get_type")]
680    fn static_type() -> glib::Type {
681        unsafe { from_glib(ffi::gtk_accessible_property_get_type()) }
682    }
683}
684
685impl glib::HasParamSpec for AccessibleProperty {
686    type ParamSpec = glib::ParamSpecEnum;
687    type SetValue = Self;
688    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
689
690    fn param_spec_builder() -> Self::BuilderFn {
691        Self::ParamSpec::builder_with_default
692    }
693}
694
695impl glib::value::ValueType for AccessibleProperty {
696    type Type = Self;
697}
698
699unsafe impl<'a> glib::value::FromValue<'a> for AccessibleProperty {
700    type Checker = glib::value::GenericValueTypeChecker<Self>;
701
702    #[inline]
703    unsafe fn from_value(value: &'a glib::Value) -> Self {
704        skip_assert_initialized!();
705        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
706    }
707}
708
709impl ToValue for AccessibleProperty {
710    #[inline]
711    fn to_value(&self) -> glib::Value {
712        let mut value = glib::Value::for_value_type::<Self>();
713        unsafe {
714            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
715        }
716        value
717    }
718
719    #[inline]
720    fn value_type(&self) -> glib::Type {
721        Self::static_type()
722    }
723}
724
725impl From<AccessibleProperty> for glib::Value {
726    #[inline]
727    fn from(v: AccessibleProperty) -> Self {
728        skip_assert_initialized!();
729        ToValue::to_value(&v)
730    }
731}
732
733/// The possible accessible relations of a [`Accessible`][crate::Accessible].
734///
735/// Accessible relations can be references to other widgets,
736/// integers or strings.
737#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
738#[non_exhaustive]
739#[doc(alias = "GtkAccessibleRelation")]
740pub enum AccessibleRelation {
741    /// Identifies the currently active
742    ///    element when focus is on a composite widget, combobox, textbox, group,
743    ///    or application. Value type: reference
744    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT")]
745    ActiveDescendant,
746    /// Defines the total number of columns
747    ///    in a table, grid, or treegrid. Value type: integer
748    #[doc(alias = "GTK_ACCESSIBLE_RELATION_COL_COUNT")]
749    ColCount,
750    /// Defines an element's column index or
751    ///    position with respect to the total number of columns within a table,
752    ///    grid, or treegrid. Value type: integer
753    #[doc(alias = "GTK_ACCESSIBLE_RELATION_COL_INDEX")]
754    ColIndex,
755    /// Defines a human readable text
756    ///   alternative of [`ColIndex`][Self::ColIndex]. Value type: string
757    #[doc(alias = "GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT")]
758    ColIndexText,
759    /// Defines the number of columns spanned
760    ///   by a cell or gridcell within a table, grid, or treegrid. Value type: integer
761    #[doc(alias = "GTK_ACCESSIBLE_RELATION_COL_SPAN")]
762    ColSpan,
763    /// Identifies the element (or elements) whose
764    ///    contents or presence are controlled by the current element. Value type: reference
765    #[doc(alias = "GTK_ACCESSIBLE_RELATION_CONTROLS")]
766    Controls,
767    /// Identifies the element (or elements)
768    ///    that describes the object. Value type: reference
769    #[doc(alias = "GTK_ACCESSIBLE_RELATION_DESCRIBED_BY")]
770    DescribedBy,
771    /// Identifies the element (or elements) that
772    ///    provide additional information related to the object. Value type: reference
773    #[doc(alias = "GTK_ACCESSIBLE_RELATION_DETAILS")]
774    Details,
775    /// Identifies the element (or elements) that
776    ///    provide an error message for an object. Value type: reference
777    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE")]
778    ErrorMessage,
779    /// Identifies the next element (or elements)
780    ///    in an alternate reading order of content which, at the user's discretion,
781    ///    allows assistive technology to override the general default of reading in
782    ///    document source order. Value type: reference
783    #[doc(alias = "GTK_ACCESSIBLE_RELATION_FLOW_TO")]
784    FlowTo,
785    /// Identifies the element (or elements)
786    ///    that labels the current element. Value type: reference
787    #[doc(alias = "GTK_ACCESSIBLE_RELATION_LABELLED_BY")]
788    LabelledBy,
789    /// Identifies an element (or elements) in order
790    ///    to define a visual, functional, or contextual parent/child relationship
791    ///    between elements where the widget hierarchy cannot be used to represent
792    ///    the relationship. Value type: reference
793    #[doc(alias = "GTK_ACCESSIBLE_RELATION_OWNS")]
794    Owns,
795    /// Defines an element's number or position
796    ///    in the current set of listitems or treeitems. Value type: integer
797    #[doc(alias = "GTK_ACCESSIBLE_RELATION_POS_IN_SET")]
798    PosInSet,
799    /// Defines the total number of rows in a table,
800    ///    grid, or treegrid. Value type: integer
801    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ROW_COUNT")]
802    RowCount,
803    /// Defines an element's row index or position
804    ///    with respect to the total number of rows within a table, grid, or treegrid.
805    ///    Value type: integer
806    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ROW_INDEX")]
807    RowIndex,
808    /// Defines a human readable text
809    ///    alternative of [enum@Gtk.AccessibleRelation.ROW_INDEX]. Value type: string
810    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT")]
811    RowIndexText,
812    /// Defines the number of rows spanned by a
813    ///    cell or gridcell within a table, grid, or treegrid. Value type: integer
814    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ROW_SPAN")]
815    RowSpan,
816    /// Defines the number of items in the current
817    ///    set of listitems or treeitems. Value type: integer
818    #[doc(alias = "GTK_ACCESSIBLE_RELATION_SET_SIZE")]
819    SetSize,
820    /// Identifies the element (or elements) that are labeled by the
821    /// current element. Value type: reference
822    ///
823    /// This relation is managed by GTK and should not be set from application code.
824    #[cfg(feature = "v4_18")]
825    #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
826    #[doc(alias = "GTK_ACCESSIBLE_RELATION_LABEL_FOR")]
827    LabelFor,
828    /// Identifies the element (or elements) that are described by
829    /// the current element. Value type: reference
830    ///
831    /// This relation is managed by GTK and should not be set from application code.
832    #[cfg(feature = "v4_18")]
833    #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
834    #[doc(alias = "GTK_ACCESSIBLE_RELATION_DESCRIPTION_FOR")]
835    DescriptionFor,
836    /// Identifies the element (or elements) that the current
837    /// element is controlled by. Value type: reference
838    ///
839    /// This relation is managed by GTK and should not be set from application code.
840    #[cfg(feature = "v4_18")]
841    #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
842    #[doc(alias = "GTK_ACCESSIBLE_RELATION_CONTROLLED_BY")]
843    ControlledBy,
844    /// Identifies the element (or elements) for which the current
845    /// element provides additional information. Value type: reference
846    ///
847    /// This relation is managed by GTK and should not be set from application code.
848    #[cfg(feature = "v4_18")]
849    #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
850    #[doc(alias = "GTK_ACCESSIBLE_RELATION_DETAILS_FOR")]
851    DetailsFor,
852    /// Identifies the element (or elements) for which the current
853    /// element provides an error message. Value type: reference
854    ///
855    /// This relation is managed by GTK and should not be set from application code.
856    #[cfg(feature = "v4_18")]
857    #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
858    #[doc(alias = "GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE_FOR")]
859    ErrorMessageFor,
860    /// Identifies the previous element (or elements) in an alternate
861    /// reading order of content which, at the user's discretion, allows
862    /// assistive technology to override the general default of reading in
863    /// document source order. Value type: reference
864    ///
865    /// This relation is managed by GTK and should not be set from application code.
866    #[cfg(feature = "v4_18")]
867    #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
868    #[doc(alias = "GTK_ACCESSIBLE_RELATION_FLOW_FROM")]
869    FlowFrom,
870    #[doc(hidden)]
871    __Unknown(i32),
872}
873
874impl AccessibleRelation {
875    #[doc(alias = "gtk_accessible_relation_init_value")]
876    pub fn init_value(self, value: &mut glib::Value) {
877        assert_initialized_main_thread!();
878        unsafe {
879            ffi::gtk_accessible_relation_init_value(self.into_glib(), value.to_glib_none_mut().0);
880        }
881    }
882}
883
884#[doc(hidden)]
885impl IntoGlib for AccessibleRelation {
886    type GlibType = ffi::GtkAccessibleRelation;
887
888    fn into_glib(self) -> ffi::GtkAccessibleRelation {
889        match self {
890            Self::ActiveDescendant => ffi::GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT,
891            Self::ColCount => ffi::GTK_ACCESSIBLE_RELATION_COL_COUNT,
892            Self::ColIndex => ffi::GTK_ACCESSIBLE_RELATION_COL_INDEX,
893            Self::ColIndexText => ffi::GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT,
894            Self::ColSpan => ffi::GTK_ACCESSIBLE_RELATION_COL_SPAN,
895            Self::Controls => ffi::GTK_ACCESSIBLE_RELATION_CONTROLS,
896            Self::DescribedBy => ffi::GTK_ACCESSIBLE_RELATION_DESCRIBED_BY,
897            Self::Details => ffi::GTK_ACCESSIBLE_RELATION_DETAILS,
898            Self::ErrorMessage => ffi::GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE,
899            Self::FlowTo => ffi::GTK_ACCESSIBLE_RELATION_FLOW_TO,
900            Self::LabelledBy => ffi::GTK_ACCESSIBLE_RELATION_LABELLED_BY,
901            Self::Owns => ffi::GTK_ACCESSIBLE_RELATION_OWNS,
902            Self::PosInSet => ffi::GTK_ACCESSIBLE_RELATION_POS_IN_SET,
903            Self::RowCount => ffi::GTK_ACCESSIBLE_RELATION_ROW_COUNT,
904            Self::RowIndex => ffi::GTK_ACCESSIBLE_RELATION_ROW_INDEX,
905            Self::RowIndexText => ffi::GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT,
906            Self::RowSpan => ffi::GTK_ACCESSIBLE_RELATION_ROW_SPAN,
907            Self::SetSize => ffi::GTK_ACCESSIBLE_RELATION_SET_SIZE,
908            #[cfg(feature = "v4_18")]
909            Self::LabelFor => ffi::GTK_ACCESSIBLE_RELATION_LABEL_FOR,
910            #[cfg(feature = "v4_18")]
911            Self::DescriptionFor => ffi::GTK_ACCESSIBLE_RELATION_DESCRIPTION_FOR,
912            #[cfg(feature = "v4_18")]
913            Self::ControlledBy => ffi::GTK_ACCESSIBLE_RELATION_CONTROLLED_BY,
914            #[cfg(feature = "v4_18")]
915            Self::DetailsFor => ffi::GTK_ACCESSIBLE_RELATION_DETAILS_FOR,
916            #[cfg(feature = "v4_18")]
917            Self::ErrorMessageFor => ffi::GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE_FOR,
918            #[cfg(feature = "v4_18")]
919            Self::FlowFrom => ffi::GTK_ACCESSIBLE_RELATION_FLOW_FROM,
920            Self::__Unknown(value) => value,
921        }
922    }
923}
924
925#[doc(hidden)]
926impl FromGlib<ffi::GtkAccessibleRelation> for AccessibleRelation {
927    unsafe fn from_glib(value: ffi::GtkAccessibleRelation) -> Self {
928        skip_assert_initialized!();
929
930        match value {
931            ffi::GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT => Self::ActiveDescendant,
932            ffi::GTK_ACCESSIBLE_RELATION_COL_COUNT => Self::ColCount,
933            ffi::GTK_ACCESSIBLE_RELATION_COL_INDEX => Self::ColIndex,
934            ffi::GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT => Self::ColIndexText,
935            ffi::GTK_ACCESSIBLE_RELATION_COL_SPAN => Self::ColSpan,
936            ffi::GTK_ACCESSIBLE_RELATION_CONTROLS => Self::Controls,
937            ffi::GTK_ACCESSIBLE_RELATION_DESCRIBED_BY => Self::DescribedBy,
938            ffi::GTK_ACCESSIBLE_RELATION_DETAILS => Self::Details,
939            ffi::GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE => Self::ErrorMessage,
940            ffi::GTK_ACCESSIBLE_RELATION_FLOW_TO => Self::FlowTo,
941            ffi::GTK_ACCESSIBLE_RELATION_LABELLED_BY => Self::LabelledBy,
942            ffi::GTK_ACCESSIBLE_RELATION_OWNS => Self::Owns,
943            ffi::GTK_ACCESSIBLE_RELATION_POS_IN_SET => Self::PosInSet,
944            ffi::GTK_ACCESSIBLE_RELATION_ROW_COUNT => Self::RowCount,
945            ffi::GTK_ACCESSIBLE_RELATION_ROW_INDEX => Self::RowIndex,
946            ffi::GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT => Self::RowIndexText,
947            ffi::GTK_ACCESSIBLE_RELATION_ROW_SPAN => Self::RowSpan,
948            ffi::GTK_ACCESSIBLE_RELATION_SET_SIZE => Self::SetSize,
949            #[cfg(feature = "v4_18")]
950            ffi::GTK_ACCESSIBLE_RELATION_LABEL_FOR => Self::LabelFor,
951            #[cfg(feature = "v4_18")]
952            ffi::GTK_ACCESSIBLE_RELATION_DESCRIPTION_FOR => Self::DescriptionFor,
953            #[cfg(feature = "v4_18")]
954            ffi::GTK_ACCESSIBLE_RELATION_CONTROLLED_BY => Self::ControlledBy,
955            #[cfg(feature = "v4_18")]
956            ffi::GTK_ACCESSIBLE_RELATION_DETAILS_FOR => Self::DetailsFor,
957            #[cfg(feature = "v4_18")]
958            ffi::GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE_FOR => Self::ErrorMessageFor,
959            #[cfg(feature = "v4_18")]
960            ffi::GTK_ACCESSIBLE_RELATION_FLOW_FROM => Self::FlowFrom,
961            value => Self::__Unknown(value),
962        }
963    }
964}
965
966impl StaticType for AccessibleRelation {
967    #[inline]
968    #[doc(alias = "gtk_accessible_relation_get_type")]
969    fn static_type() -> glib::Type {
970        unsafe { from_glib(ffi::gtk_accessible_relation_get_type()) }
971    }
972}
973
974impl glib::HasParamSpec for AccessibleRelation {
975    type ParamSpec = glib::ParamSpecEnum;
976    type SetValue = Self;
977    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
978
979    fn param_spec_builder() -> Self::BuilderFn {
980        Self::ParamSpec::builder_with_default
981    }
982}
983
984impl glib::value::ValueType for AccessibleRelation {
985    type Type = Self;
986}
987
988unsafe impl<'a> glib::value::FromValue<'a> for AccessibleRelation {
989    type Checker = glib::value::GenericValueTypeChecker<Self>;
990
991    #[inline]
992    unsafe fn from_value(value: &'a glib::Value) -> Self {
993        skip_assert_initialized!();
994        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
995    }
996}
997
998impl ToValue for AccessibleRelation {
999    #[inline]
1000    fn to_value(&self) -> glib::Value {
1001        let mut value = glib::Value::for_value_type::<Self>();
1002        unsafe {
1003            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1004        }
1005        value
1006    }
1007
1008    #[inline]
1009    fn value_type(&self) -> glib::Type {
1010        Self::static_type()
1011    }
1012}
1013
1014impl From<AccessibleRelation> for glib::Value {
1015    #[inline]
1016    fn from(v: AccessibleRelation) -> Self {
1017        skip_assert_initialized!();
1018        ToValue::to_value(&v)
1019    }
1020}
1021
1022/// The accessible role for a [`Accessible`][crate::Accessible] implementation.
1023///
1024/// Abstract roles are only used as part of the ontology; application
1025/// developers must not use abstract roles in their code.
1026#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1027#[non_exhaustive]
1028#[doc(alias = "GtkAccessibleRole")]
1029pub enum AccessibleRole {
1030    /// An element with important, and usually
1031    ///   time-sensitive, information
1032    #[doc(alias = "GTK_ACCESSIBLE_ROLE_ALERT")]
1033    Alert,
1034    /// A type of dialog that contains an
1035    ///   alert message
1036    #[doc(alias = "GTK_ACCESSIBLE_ROLE_ALERT_DIALOG")]
1037    AlertDialog,
1038    /// Unused
1039    #[doc(alias = "GTK_ACCESSIBLE_ROLE_BANNER")]
1040    Banner,
1041    /// An input element that allows for
1042    ///   user-triggered actions when clicked or pressed
1043    #[doc(alias = "GTK_ACCESSIBLE_ROLE_BUTTON")]
1044    Button,
1045    /// Unused
1046    #[doc(alias = "GTK_ACCESSIBLE_ROLE_CAPTION")]
1047    Caption,
1048    /// Unused
1049    #[doc(alias = "GTK_ACCESSIBLE_ROLE_CELL")]
1050    Cell,
1051    /// A checkable input element that has
1052    ///   three possible values: `true`, `false`, or `mixed`
1053    #[doc(alias = "GTK_ACCESSIBLE_ROLE_CHECKBOX")]
1054    Checkbox,
1055    /// A header in a columned list.
1056    #[doc(alias = "GTK_ACCESSIBLE_ROLE_COLUMN_HEADER")]
1057    ColumnHeader,
1058    /// An input that controls another element,
1059    ///   such as a list or a grid, that can dynamically pop up to help the user
1060    ///   set the value of the input
1061    #[doc(alias = "GTK_ACCESSIBLE_ROLE_COMBO_BOX")]
1062    ComboBox,
1063    /// Abstract role.
1064    #[doc(alias = "GTK_ACCESSIBLE_ROLE_COMMAND")]
1065    Command,
1066    /// Abstract role.
1067    #[doc(alias = "GTK_ACCESSIBLE_ROLE_COMPOSITE")]
1068    Composite,
1069    /// A dialog is a window that is designed to interrupt
1070    ///   the current processing of an application in order to prompt the user to enter
1071    ///   information or require a response.
1072    #[doc(alias = "GTK_ACCESSIBLE_ROLE_DIALOG")]
1073    Dialog,
1074    /// Content that assistive technology users may want to
1075    ///   browse in a reading mode.
1076    #[doc(alias = "GTK_ACCESSIBLE_ROLE_DOCUMENT")]
1077    Document,
1078    /// Unused
1079    #[doc(alias = "GTK_ACCESSIBLE_ROLE_FEED")]
1080    Feed,
1081    /// Unused
1082    #[doc(alias = "GTK_ACCESSIBLE_ROLE_FORM")]
1083    Form,
1084    /// A nameless container that has no semantic meaning
1085    ///   of its own. This is the role that GTK uses by default for widgets.
1086    #[doc(alias = "GTK_ACCESSIBLE_ROLE_GENERIC")]
1087    Generic,
1088    /// A grid of items.
1089    #[doc(alias = "GTK_ACCESSIBLE_ROLE_GRID")]
1090    Grid,
1091    /// An item in a grid or tree grid.
1092    #[doc(alias = "GTK_ACCESSIBLE_ROLE_GRID_CELL")]
1093    GridCell,
1094    /// An element that groups multiple related widgets. GTK uses
1095    ///   this role for various containers, like [`HeaderBar`][crate::HeaderBar] or [`Notebook`][crate::Notebook].
1096    #[doc(alias = "GTK_ACCESSIBLE_ROLE_GROUP")]
1097    Group,
1098    /// Unused
1099    #[doc(alias = "GTK_ACCESSIBLE_ROLE_HEADING")]
1100    Heading,
1101    /// An image.
1102    #[doc(alias = "GTK_ACCESSIBLE_ROLE_IMG")]
1103    Img,
1104    /// Abstract role.
1105    #[doc(alias = "GTK_ACCESSIBLE_ROLE_INPUT")]
1106    Input,
1107    /// A visible name or caption for a user interface component.
1108    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LABEL")]
1109    Label,
1110    /// Abstract role.
1111    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LANDMARK")]
1112    Landmark,
1113    /// Unused
1114    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LEGEND")]
1115    Legend,
1116    /// A clickable link.
1117    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LINK")]
1118    Link,
1119    /// A list of items.
1120    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LIST")]
1121    List,
1122    /// Unused.
1123    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LIST_BOX")]
1124    ListBox,
1125    /// An item in a list.
1126    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LIST_ITEM")]
1127    ListItem,
1128    /// Unused
1129    #[doc(alias = "GTK_ACCESSIBLE_ROLE_LOG")]
1130    Log,
1131    /// Unused
1132    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MAIN")]
1133    Main,
1134    /// Unused
1135    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MARQUEE")]
1136    Marquee,
1137    /// Unused
1138    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MATH")]
1139    Math,
1140    /// An element that represents a value within a known range.
1141    #[doc(alias = "GTK_ACCESSIBLE_ROLE_METER")]
1142    Meter,
1143    /// A menu.
1144    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MENU")]
1145    Menu,
1146    /// A menubar.
1147    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MENU_BAR")]
1148    MenuBar,
1149    /// An item in a menu.
1150    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MENU_ITEM")]
1151    MenuItem,
1152    /// A check item in a menu.
1153    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MENU_ITEM_CHECKBOX")]
1154    MenuItemCheckbox,
1155    /// A radio item in a menu.
1156    #[doc(alias = "GTK_ACCESSIBLE_ROLE_MENU_ITEM_RADIO")]
1157    MenuItemRadio,
1158    /// Unused
1159    #[doc(alias = "GTK_ACCESSIBLE_ROLE_NAVIGATION")]
1160    Navigation,
1161    /// An element that is not represented to accessibility technologies.
1162    ///   This role is synonymous to @GTK_ACCESSIBLE_ROLE_PRESENTATION.
1163    #[doc(alias = "GTK_ACCESSIBLE_ROLE_NONE")]
1164    None,
1165    /// Unused
1166    #[doc(alias = "GTK_ACCESSIBLE_ROLE_NOTE")]
1167    Note,
1168    /// Unused
1169    #[doc(alias = "GTK_ACCESSIBLE_ROLE_OPTION")]
1170    Option,
1171    /// An element that is not represented to accessibility technologies.
1172    ///   This role is synonymous to @GTK_ACCESSIBLE_ROLE_NONE.
1173    #[doc(alias = "GTK_ACCESSIBLE_ROLE_PRESENTATION")]
1174    Presentation,
1175    /// An element that displays the progress
1176    ///   status for tasks that take a long time.
1177    #[doc(alias = "GTK_ACCESSIBLE_ROLE_PROGRESS_BAR")]
1178    ProgressBar,
1179    /// A checkable input in a group of radio roles,
1180    ///   only one of which can be checked at a time.
1181    #[doc(alias = "GTK_ACCESSIBLE_ROLE_RADIO")]
1182    Radio,
1183    /// Unused
1184    #[doc(alias = "GTK_ACCESSIBLE_ROLE_RADIO_GROUP")]
1185    RadioGroup,
1186    /// Abstract role.
1187    #[doc(alias = "GTK_ACCESSIBLE_ROLE_RANGE")]
1188    Range,
1189    /// Unused
1190    #[doc(alias = "GTK_ACCESSIBLE_ROLE_REGION")]
1191    Region,
1192    /// A row in a columned list.
1193    #[doc(alias = "GTK_ACCESSIBLE_ROLE_ROW")]
1194    Row,
1195    /// Unused
1196    #[doc(alias = "GTK_ACCESSIBLE_ROLE_ROW_GROUP")]
1197    RowGroup,
1198    /// Unused
1199    #[doc(alias = "GTK_ACCESSIBLE_ROLE_ROW_HEADER")]
1200    RowHeader,
1201    /// A graphical object that controls the scrolling
1202    ///   of content within a viewing area, regardless of whether the content is fully
1203    ///   displayed within the viewing area.
1204    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SCROLLBAR")]
1205    Scrollbar,
1206    /// Unused
1207    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SEARCH")]
1208    Search,
1209    /// A type of textbox intended for specifying
1210    ///   search criteria.
1211    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SEARCH_BOX")]
1212    SearchBox,
1213    /// Abstract role.
1214    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SECTION")]
1215    Section,
1216    /// Abstract role.
1217    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SECTION_HEAD")]
1218    SectionHead,
1219    /// Abstract role.
1220    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SELECT")]
1221    Select,
1222    /// A divider that separates and distinguishes
1223    ///   sections of content or groups of menuitems.
1224    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SEPARATOR")]
1225    Separator,
1226    /// A user input where the user selects a value
1227    ///   from within a given range.
1228    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SLIDER")]
1229    Slider,
1230    /// A form of range that expects the user to
1231    ///   select from among discrete choices.
1232    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SPIN_BUTTON")]
1233    SpinButton,
1234    /// Unused
1235    #[doc(alias = "GTK_ACCESSIBLE_ROLE_STATUS")]
1236    Status,
1237    /// Abstract role.
1238    #[doc(alias = "GTK_ACCESSIBLE_ROLE_STRUCTURE")]
1239    Structure,
1240    /// A type of checkbox that represents on/off values,
1241    ///   as opposed to checked/unchecked values.
1242    #[doc(alias = "GTK_ACCESSIBLE_ROLE_SWITCH")]
1243    Switch,
1244    /// An item in a list of tab used for switching pages.
1245    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TAB")]
1246    Tab,
1247    /// Unused
1248    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TABLE")]
1249    Table,
1250    /// A list of tabs for switching pages.
1251    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TAB_LIST")]
1252    TabList,
1253    /// A page in a notebook or stack.
1254    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TAB_PANEL")]
1255    TabPanel,
1256    /// A type of input that allows free-form text
1257    ///   as its value.
1258    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TEXT_BOX")]
1259    TextBox,
1260    /// Unused
1261    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TIME")]
1262    Time,
1263    /// Unused
1264    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TIMER")]
1265    Timer,
1266    /// Unused
1267    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TOOLBAR")]
1268    Toolbar,
1269    /// Unused
1270    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TOOLTIP")]
1271    Tooltip,
1272    /// Unused
1273    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TREE")]
1274    Tree,
1275    /// A treeview-like, columned list.
1276    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TREE_GRID")]
1277    TreeGrid,
1278    /// Unused
1279    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TREE_ITEM")]
1280    TreeItem,
1281    /// Abstract role for interactive components of a
1282    ///   graphical user interface
1283    #[doc(alias = "GTK_ACCESSIBLE_ROLE_WIDGET")]
1284    Widget,
1285    /// Abstract role for windows.
1286    #[doc(alias = "GTK_ACCESSIBLE_ROLE_WINDOW")]
1287    Window,
1288    /// A type of push button which stays pressed until depressed by a second
1289    /// activation.
1290    #[cfg(feature = "v4_10")]
1291    #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
1292    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON")]
1293    ToggleButton,
1294    /// A toplevel element of a graphical user interface.
1295    ///
1296    /// This is the role that GTK uses by default for windows.
1297    #[cfg(feature = "v4_12")]
1298    #[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
1299    #[doc(alias = "GTK_ACCESSIBLE_ROLE_APPLICATION")]
1300    Application,
1301    /// A paragraph of content.
1302    #[cfg(feature = "v4_14")]
1303    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1304    #[doc(alias = "GTK_ACCESSIBLE_ROLE_PARAGRAPH")]
1305    Paragraph,
1306    /// A section of content that is quoted from another source.
1307    #[cfg(feature = "v4_14")]
1308    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1309    #[doc(alias = "GTK_ACCESSIBLE_ROLE_BLOCK_QUOTE")]
1310    BlockQuote,
1311    /// A section of a page that consists of a composition that forms an independent
1312    /// part of a document, page, or site.
1313    #[cfg(feature = "v4_14")]
1314    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1315    #[doc(alias = "GTK_ACCESSIBLE_ROLE_ARTICLE")]
1316    Article,
1317    /// A comment contains content expressing reaction to other content.
1318    #[cfg(feature = "v4_14")]
1319    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1320    #[doc(alias = "GTK_ACCESSIBLE_ROLE_COMMENT")]
1321    Comment,
1322    /// A virtual terminal.
1323    #[cfg(feature = "v4_14")]
1324    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1325    #[doc(alias = "GTK_ACCESSIBLE_ROLE_TERMINAL")]
1326    Terminal,
1327    #[doc(hidden)]
1328    __Unknown(i32),
1329}
1330
1331#[doc(hidden)]
1332impl IntoGlib for AccessibleRole {
1333    type GlibType = ffi::GtkAccessibleRole;
1334
1335    fn into_glib(self) -> ffi::GtkAccessibleRole {
1336        match self {
1337            Self::Alert => ffi::GTK_ACCESSIBLE_ROLE_ALERT,
1338            Self::AlertDialog => ffi::GTK_ACCESSIBLE_ROLE_ALERT_DIALOG,
1339            Self::Banner => ffi::GTK_ACCESSIBLE_ROLE_BANNER,
1340            Self::Button => ffi::GTK_ACCESSIBLE_ROLE_BUTTON,
1341            Self::Caption => ffi::GTK_ACCESSIBLE_ROLE_CAPTION,
1342            Self::Cell => ffi::GTK_ACCESSIBLE_ROLE_CELL,
1343            Self::Checkbox => ffi::GTK_ACCESSIBLE_ROLE_CHECKBOX,
1344            Self::ColumnHeader => ffi::GTK_ACCESSIBLE_ROLE_COLUMN_HEADER,
1345            Self::ComboBox => ffi::GTK_ACCESSIBLE_ROLE_COMBO_BOX,
1346            Self::Command => ffi::GTK_ACCESSIBLE_ROLE_COMMAND,
1347            Self::Composite => ffi::GTK_ACCESSIBLE_ROLE_COMPOSITE,
1348            Self::Dialog => ffi::GTK_ACCESSIBLE_ROLE_DIALOG,
1349            Self::Document => ffi::GTK_ACCESSIBLE_ROLE_DOCUMENT,
1350            Self::Feed => ffi::GTK_ACCESSIBLE_ROLE_FEED,
1351            Self::Form => ffi::GTK_ACCESSIBLE_ROLE_FORM,
1352            Self::Generic => ffi::GTK_ACCESSIBLE_ROLE_GENERIC,
1353            Self::Grid => ffi::GTK_ACCESSIBLE_ROLE_GRID,
1354            Self::GridCell => ffi::GTK_ACCESSIBLE_ROLE_GRID_CELL,
1355            Self::Group => ffi::GTK_ACCESSIBLE_ROLE_GROUP,
1356            Self::Heading => ffi::GTK_ACCESSIBLE_ROLE_HEADING,
1357            Self::Img => ffi::GTK_ACCESSIBLE_ROLE_IMG,
1358            Self::Input => ffi::GTK_ACCESSIBLE_ROLE_INPUT,
1359            Self::Label => ffi::GTK_ACCESSIBLE_ROLE_LABEL,
1360            Self::Landmark => ffi::GTK_ACCESSIBLE_ROLE_LANDMARK,
1361            Self::Legend => ffi::GTK_ACCESSIBLE_ROLE_LEGEND,
1362            Self::Link => ffi::GTK_ACCESSIBLE_ROLE_LINK,
1363            Self::List => ffi::GTK_ACCESSIBLE_ROLE_LIST,
1364            Self::ListBox => ffi::GTK_ACCESSIBLE_ROLE_LIST_BOX,
1365            Self::ListItem => ffi::GTK_ACCESSIBLE_ROLE_LIST_ITEM,
1366            Self::Log => ffi::GTK_ACCESSIBLE_ROLE_LOG,
1367            Self::Main => ffi::GTK_ACCESSIBLE_ROLE_MAIN,
1368            Self::Marquee => ffi::GTK_ACCESSIBLE_ROLE_MARQUEE,
1369            Self::Math => ffi::GTK_ACCESSIBLE_ROLE_MATH,
1370            Self::Meter => ffi::GTK_ACCESSIBLE_ROLE_METER,
1371            Self::Menu => ffi::GTK_ACCESSIBLE_ROLE_MENU,
1372            Self::MenuBar => ffi::GTK_ACCESSIBLE_ROLE_MENU_BAR,
1373            Self::MenuItem => ffi::GTK_ACCESSIBLE_ROLE_MENU_ITEM,
1374            Self::MenuItemCheckbox => ffi::GTK_ACCESSIBLE_ROLE_MENU_ITEM_CHECKBOX,
1375            Self::MenuItemRadio => ffi::GTK_ACCESSIBLE_ROLE_MENU_ITEM_RADIO,
1376            Self::Navigation => ffi::GTK_ACCESSIBLE_ROLE_NAVIGATION,
1377            Self::None => ffi::GTK_ACCESSIBLE_ROLE_NONE,
1378            Self::Note => ffi::GTK_ACCESSIBLE_ROLE_NOTE,
1379            Self::Option => ffi::GTK_ACCESSIBLE_ROLE_OPTION,
1380            Self::Presentation => ffi::GTK_ACCESSIBLE_ROLE_PRESENTATION,
1381            Self::ProgressBar => ffi::GTK_ACCESSIBLE_ROLE_PROGRESS_BAR,
1382            Self::Radio => ffi::GTK_ACCESSIBLE_ROLE_RADIO,
1383            Self::RadioGroup => ffi::GTK_ACCESSIBLE_ROLE_RADIO_GROUP,
1384            Self::Range => ffi::GTK_ACCESSIBLE_ROLE_RANGE,
1385            Self::Region => ffi::GTK_ACCESSIBLE_ROLE_REGION,
1386            Self::Row => ffi::GTK_ACCESSIBLE_ROLE_ROW,
1387            Self::RowGroup => ffi::GTK_ACCESSIBLE_ROLE_ROW_GROUP,
1388            Self::RowHeader => ffi::GTK_ACCESSIBLE_ROLE_ROW_HEADER,
1389            Self::Scrollbar => ffi::GTK_ACCESSIBLE_ROLE_SCROLLBAR,
1390            Self::Search => ffi::GTK_ACCESSIBLE_ROLE_SEARCH,
1391            Self::SearchBox => ffi::GTK_ACCESSIBLE_ROLE_SEARCH_BOX,
1392            Self::Section => ffi::GTK_ACCESSIBLE_ROLE_SECTION,
1393            Self::SectionHead => ffi::GTK_ACCESSIBLE_ROLE_SECTION_HEAD,
1394            Self::Select => ffi::GTK_ACCESSIBLE_ROLE_SELECT,
1395            Self::Separator => ffi::GTK_ACCESSIBLE_ROLE_SEPARATOR,
1396            Self::Slider => ffi::GTK_ACCESSIBLE_ROLE_SLIDER,
1397            Self::SpinButton => ffi::GTK_ACCESSIBLE_ROLE_SPIN_BUTTON,
1398            Self::Status => ffi::GTK_ACCESSIBLE_ROLE_STATUS,
1399            Self::Structure => ffi::GTK_ACCESSIBLE_ROLE_STRUCTURE,
1400            Self::Switch => ffi::GTK_ACCESSIBLE_ROLE_SWITCH,
1401            Self::Tab => ffi::GTK_ACCESSIBLE_ROLE_TAB,
1402            Self::Table => ffi::GTK_ACCESSIBLE_ROLE_TABLE,
1403            Self::TabList => ffi::GTK_ACCESSIBLE_ROLE_TAB_LIST,
1404            Self::TabPanel => ffi::GTK_ACCESSIBLE_ROLE_TAB_PANEL,
1405            Self::TextBox => ffi::GTK_ACCESSIBLE_ROLE_TEXT_BOX,
1406            Self::Time => ffi::GTK_ACCESSIBLE_ROLE_TIME,
1407            Self::Timer => ffi::GTK_ACCESSIBLE_ROLE_TIMER,
1408            Self::Toolbar => ffi::GTK_ACCESSIBLE_ROLE_TOOLBAR,
1409            Self::Tooltip => ffi::GTK_ACCESSIBLE_ROLE_TOOLTIP,
1410            Self::Tree => ffi::GTK_ACCESSIBLE_ROLE_TREE,
1411            Self::TreeGrid => ffi::GTK_ACCESSIBLE_ROLE_TREE_GRID,
1412            Self::TreeItem => ffi::GTK_ACCESSIBLE_ROLE_TREE_ITEM,
1413            Self::Widget => ffi::GTK_ACCESSIBLE_ROLE_WIDGET,
1414            Self::Window => ffi::GTK_ACCESSIBLE_ROLE_WINDOW,
1415            #[cfg(feature = "v4_10")]
1416            Self::ToggleButton => ffi::GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON,
1417            #[cfg(feature = "v4_12")]
1418            Self::Application => ffi::GTK_ACCESSIBLE_ROLE_APPLICATION,
1419            #[cfg(feature = "v4_14")]
1420            Self::Paragraph => ffi::GTK_ACCESSIBLE_ROLE_PARAGRAPH,
1421            #[cfg(feature = "v4_14")]
1422            Self::BlockQuote => ffi::GTK_ACCESSIBLE_ROLE_BLOCK_QUOTE,
1423            #[cfg(feature = "v4_14")]
1424            Self::Article => ffi::GTK_ACCESSIBLE_ROLE_ARTICLE,
1425            #[cfg(feature = "v4_14")]
1426            Self::Comment => ffi::GTK_ACCESSIBLE_ROLE_COMMENT,
1427            #[cfg(feature = "v4_14")]
1428            Self::Terminal => ffi::GTK_ACCESSIBLE_ROLE_TERMINAL,
1429            Self::__Unknown(value) => value,
1430        }
1431    }
1432}
1433
1434#[doc(hidden)]
1435impl FromGlib<ffi::GtkAccessibleRole> for AccessibleRole {
1436    unsafe fn from_glib(value: ffi::GtkAccessibleRole) -> Self {
1437        skip_assert_initialized!();
1438
1439        match value {
1440            ffi::GTK_ACCESSIBLE_ROLE_ALERT => Self::Alert,
1441            ffi::GTK_ACCESSIBLE_ROLE_ALERT_DIALOG => Self::AlertDialog,
1442            ffi::GTK_ACCESSIBLE_ROLE_BANNER => Self::Banner,
1443            ffi::GTK_ACCESSIBLE_ROLE_BUTTON => Self::Button,
1444            ffi::GTK_ACCESSIBLE_ROLE_CAPTION => Self::Caption,
1445            ffi::GTK_ACCESSIBLE_ROLE_CELL => Self::Cell,
1446            ffi::GTK_ACCESSIBLE_ROLE_CHECKBOX => Self::Checkbox,
1447            ffi::GTK_ACCESSIBLE_ROLE_COLUMN_HEADER => Self::ColumnHeader,
1448            ffi::GTK_ACCESSIBLE_ROLE_COMBO_BOX => Self::ComboBox,
1449            ffi::GTK_ACCESSIBLE_ROLE_COMMAND => Self::Command,
1450            ffi::GTK_ACCESSIBLE_ROLE_COMPOSITE => Self::Composite,
1451            ffi::GTK_ACCESSIBLE_ROLE_DIALOG => Self::Dialog,
1452            ffi::GTK_ACCESSIBLE_ROLE_DOCUMENT => Self::Document,
1453            ffi::GTK_ACCESSIBLE_ROLE_FEED => Self::Feed,
1454            ffi::GTK_ACCESSIBLE_ROLE_FORM => Self::Form,
1455            ffi::GTK_ACCESSIBLE_ROLE_GENERIC => Self::Generic,
1456            ffi::GTK_ACCESSIBLE_ROLE_GRID => Self::Grid,
1457            ffi::GTK_ACCESSIBLE_ROLE_GRID_CELL => Self::GridCell,
1458            ffi::GTK_ACCESSIBLE_ROLE_GROUP => Self::Group,
1459            ffi::GTK_ACCESSIBLE_ROLE_HEADING => Self::Heading,
1460            ffi::GTK_ACCESSIBLE_ROLE_IMG => Self::Img,
1461            ffi::GTK_ACCESSIBLE_ROLE_INPUT => Self::Input,
1462            ffi::GTK_ACCESSIBLE_ROLE_LABEL => Self::Label,
1463            ffi::GTK_ACCESSIBLE_ROLE_LANDMARK => Self::Landmark,
1464            ffi::GTK_ACCESSIBLE_ROLE_LEGEND => Self::Legend,
1465            ffi::GTK_ACCESSIBLE_ROLE_LINK => Self::Link,
1466            ffi::GTK_ACCESSIBLE_ROLE_LIST => Self::List,
1467            ffi::GTK_ACCESSIBLE_ROLE_LIST_BOX => Self::ListBox,
1468            ffi::GTK_ACCESSIBLE_ROLE_LIST_ITEM => Self::ListItem,
1469            ffi::GTK_ACCESSIBLE_ROLE_LOG => Self::Log,
1470            ffi::GTK_ACCESSIBLE_ROLE_MAIN => Self::Main,
1471            ffi::GTK_ACCESSIBLE_ROLE_MARQUEE => Self::Marquee,
1472            ffi::GTK_ACCESSIBLE_ROLE_MATH => Self::Math,
1473            ffi::GTK_ACCESSIBLE_ROLE_METER => Self::Meter,
1474            ffi::GTK_ACCESSIBLE_ROLE_MENU => Self::Menu,
1475            ffi::GTK_ACCESSIBLE_ROLE_MENU_BAR => Self::MenuBar,
1476            ffi::GTK_ACCESSIBLE_ROLE_MENU_ITEM => Self::MenuItem,
1477            ffi::GTK_ACCESSIBLE_ROLE_MENU_ITEM_CHECKBOX => Self::MenuItemCheckbox,
1478            ffi::GTK_ACCESSIBLE_ROLE_MENU_ITEM_RADIO => Self::MenuItemRadio,
1479            ffi::GTK_ACCESSIBLE_ROLE_NAVIGATION => Self::Navigation,
1480            ffi::GTK_ACCESSIBLE_ROLE_NONE => Self::None,
1481            ffi::GTK_ACCESSIBLE_ROLE_NOTE => Self::Note,
1482            ffi::GTK_ACCESSIBLE_ROLE_OPTION => Self::Option,
1483            ffi::GTK_ACCESSIBLE_ROLE_PRESENTATION => Self::Presentation,
1484            ffi::GTK_ACCESSIBLE_ROLE_PROGRESS_BAR => Self::ProgressBar,
1485            ffi::GTK_ACCESSIBLE_ROLE_RADIO => Self::Radio,
1486            ffi::GTK_ACCESSIBLE_ROLE_RADIO_GROUP => Self::RadioGroup,
1487            ffi::GTK_ACCESSIBLE_ROLE_RANGE => Self::Range,
1488            ffi::GTK_ACCESSIBLE_ROLE_REGION => Self::Region,
1489            ffi::GTK_ACCESSIBLE_ROLE_ROW => Self::Row,
1490            ffi::GTK_ACCESSIBLE_ROLE_ROW_GROUP => Self::RowGroup,
1491            ffi::GTK_ACCESSIBLE_ROLE_ROW_HEADER => Self::RowHeader,
1492            ffi::GTK_ACCESSIBLE_ROLE_SCROLLBAR => Self::Scrollbar,
1493            ffi::GTK_ACCESSIBLE_ROLE_SEARCH => Self::Search,
1494            ffi::GTK_ACCESSIBLE_ROLE_SEARCH_BOX => Self::SearchBox,
1495            ffi::GTK_ACCESSIBLE_ROLE_SECTION => Self::Section,
1496            ffi::GTK_ACCESSIBLE_ROLE_SECTION_HEAD => Self::SectionHead,
1497            ffi::GTK_ACCESSIBLE_ROLE_SELECT => Self::Select,
1498            ffi::GTK_ACCESSIBLE_ROLE_SEPARATOR => Self::Separator,
1499            ffi::GTK_ACCESSIBLE_ROLE_SLIDER => Self::Slider,
1500            ffi::GTK_ACCESSIBLE_ROLE_SPIN_BUTTON => Self::SpinButton,
1501            ffi::GTK_ACCESSIBLE_ROLE_STATUS => Self::Status,
1502            ffi::GTK_ACCESSIBLE_ROLE_STRUCTURE => Self::Structure,
1503            ffi::GTK_ACCESSIBLE_ROLE_SWITCH => Self::Switch,
1504            ffi::GTK_ACCESSIBLE_ROLE_TAB => Self::Tab,
1505            ffi::GTK_ACCESSIBLE_ROLE_TABLE => Self::Table,
1506            ffi::GTK_ACCESSIBLE_ROLE_TAB_LIST => Self::TabList,
1507            ffi::GTK_ACCESSIBLE_ROLE_TAB_PANEL => Self::TabPanel,
1508            ffi::GTK_ACCESSIBLE_ROLE_TEXT_BOX => Self::TextBox,
1509            ffi::GTK_ACCESSIBLE_ROLE_TIME => Self::Time,
1510            ffi::GTK_ACCESSIBLE_ROLE_TIMER => Self::Timer,
1511            ffi::GTK_ACCESSIBLE_ROLE_TOOLBAR => Self::Toolbar,
1512            ffi::GTK_ACCESSIBLE_ROLE_TOOLTIP => Self::Tooltip,
1513            ffi::GTK_ACCESSIBLE_ROLE_TREE => Self::Tree,
1514            ffi::GTK_ACCESSIBLE_ROLE_TREE_GRID => Self::TreeGrid,
1515            ffi::GTK_ACCESSIBLE_ROLE_TREE_ITEM => Self::TreeItem,
1516            ffi::GTK_ACCESSIBLE_ROLE_WIDGET => Self::Widget,
1517            ffi::GTK_ACCESSIBLE_ROLE_WINDOW => Self::Window,
1518            #[cfg(feature = "v4_10")]
1519            ffi::GTK_ACCESSIBLE_ROLE_TOGGLE_BUTTON => Self::ToggleButton,
1520            #[cfg(feature = "v4_12")]
1521            ffi::GTK_ACCESSIBLE_ROLE_APPLICATION => Self::Application,
1522            #[cfg(feature = "v4_14")]
1523            ffi::GTK_ACCESSIBLE_ROLE_PARAGRAPH => Self::Paragraph,
1524            #[cfg(feature = "v4_14")]
1525            ffi::GTK_ACCESSIBLE_ROLE_BLOCK_QUOTE => Self::BlockQuote,
1526            #[cfg(feature = "v4_14")]
1527            ffi::GTK_ACCESSIBLE_ROLE_ARTICLE => Self::Article,
1528            #[cfg(feature = "v4_14")]
1529            ffi::GTK_ACCESSIBLE_ROLE_COMMENT => Self::Comment,
1530            #[cfg(feature = "v4_14")]
1531            ffi::GTK_ACCESSIBLE_ROLE_TERMINAL => Self::Terminal,
1532            value => Self::__Unknown(value),
1533        }
1534    }
1535}
1536
1537impl StaticType for AccessibleRole {
1538    #[inline]
1539    #[doc(alias = "gtk_accessible_role_get_type")]
1540    fn static_type() -> glib::Type {
1541        unsafe { from_glib(ffi::gtk_accessible_role_get_type()) }
1542    }
1543}
1544
1545impl glib::HasParamSpec for AccessibleRole {
1546    type ParamSpec = glib::ParamSpecEnum;
1547    type SetValue = Self;
1548    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1549
1550    fn param_spec_builder() -> Self::BuilderFn {
1551        Self::ParamSpec::builder_with_default
1552    }
1553}
1554
1555impl glib::value::ValueType for AccessibleRole {
1556    type Type = Self;
1557}
1558
1559unsafe impl<'a> glib::value::FromValue<'a> for AccessibleRole {
1560    type Checker = glib::value::GenericValueTypeChecker<Self>;
1561
1562    #[inline]
1563    unsafe fn from_value(value: &'a glib::Value) -> Self {
1564        skip_assert_initialized!();
1565        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1566    }
1567}
1568
1569impl ToValue for AccessibleRole {
1570    #[inline]
1571    fn to_value(&self) -> glib::Value {
1572        let mut value = glib::Value::for_value_type::<Self>();
1573        unsafe {
1574            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1575        }
1576        value
1577    }
1578
1579    #[inline]
1580    fn value_type(&self) -> glib::Type {
1581        Self::static_type()
1582    }
1583}
1584
1585impl From<AccessibleRole> for glib::Value {
1586    #[inline]
1587    fn from(v: AccessibleRole) -> Self {
1588        skip_assert_initialized!();
1589        ToValue::to_value(&v)
1590    }
1591}
1592
1593/// The possible values for the [`AccessibleProperty::Sort`][crate::AccessibleProperty::Sort]
1594/// accessible property.
1595#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1596#[non_exhaustive]
1597#[doc(alias = "GtkAccessibleSort")]
1598pub enum AccessibleSort {
1599    /// There is no defined sort applied to the column.
1600    #[doc(alias = "GTK_ACCESSIBLE_SORT_NONE")]
1601    None,
1602    /// Items are sorted in ascending order by this column.
1603    #[doc(alias = "GTK_ACCESSIBLE_SORT_ASCENDING")]
1604    Ascending,
1605    /// Items are sorted in descending order by this column.
1606    #[doc(alias = "GTK_ACCESSIBLE_SORT_DESCENDING")]
1607    Descending,
1608    /// A sort algorithm other than ascending or
1609    ///    descending has been applied.
1610    #[doc(alias = "GTK_ACCESSIBLE_SORT_OTHER")]
1611    Other,
1612    #[doc(hidden)]
1613    __Unknown(i32),
1614}
1615
1616#[doc(hidden)]
1617impl IntoGlib for AccessibleSort {
1618    type GlibType = ffi::GtkAccessibleSort;
1619
1620    #[inline]
1621    fn into_glib(self) -> ffi::GtkAccessibleSort {
1622        match self {
1623            Self::None => ffi::GTK_ACCESSIBLE_SORT_NONE,
1624            Self::Ascending => ffi::GTK_ACCESSIBLE_SORT_ASCENDING,
1625            Self::Descending => ffi::GTK_ACCESSIBLE_SORT_DESCENDING,
1626            Self::Other => ffi::GTK_ACCESSIBLE_SORT_OTHER,
1627            Self::__Unknown(value) => value,
1628        }
1629    }
1630}
1631
1632#[doc(hidden)]
1633impl FromGlib<ffi::GtkAccessibleSort> for AccessibleSort {
1634    #[inline]
1635    unsafe fn from_glib(value: ffi::GtkAccessibleSort) -> Self {
1636        skip_assert_initialized!();
1637
1638        match value {
1639            ffi::GTK_ACCESSIBLE_SORT_NONE => Self::None,
1640            ffi::GTK_ACCESSIBLE_SORT_ASCENDING => Self::Ascending,
1641            ffi::GTK_ACCESSIBLE_SORT_DESCENDING => Self::Descending,
1642            ffi::GTK_ACCESSIBLE_SORT_OTHER => Self::Other,
1643            value => Self::__Unknown(value),
1644        }
1645    }
1646}
1647
1648impl StaticType for AccessibleSort {
1649    #[inline]
1650    #[doc(alias = "gtk_accessible_sort_get_type")]
1651    fn static_type() -> glib::Type {
1652        unsafe { from_glib(ffi::gtk_accessible_sort_get_type()) }
1653    }
1654}
1655
1656impl glib::HasParamSpec for AccessibleSort {
1657    type ParamSpec = glib::ParamSpecEnum;
1658    type SetValue = Self;
1659    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1660
1661    fn param_spec_builder() -> Self::BuilderFn {
1662        Self::ParamSpec::builder_with_default
1663    }
1664}
1665
1666impl glib::value::ValueType for AccessibleSort {
1667    type Type = Self;
1668}
1669
1670unsafe impl<'a> glib::value::FromValue<'a> for AccessibleSort {
1671    type Checker = glib::value::GenericValueTypeChecker<Self>;
1672
1673    #[inline]
1674    unsafe fn from_value(value: &'a glib::Value) -> Self {
1675        skip_assert_initialized!();
1676        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1677    }
1678}
1679
1680impl ToValue for AccessibleSort {
1681    #[inline]
1682    fn to_value(&self) -> glib::Value {
1683        let mut value = glib::Value::for_value_type::<Self>();
1684        unsafe {
1685            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1686        }
1687        value
1688    }
1689
1690    #[inline]
1691    fn value_type(&self) -> glib::Type {
1692        Self::static_type()
1693    }
1694}
1695
1696impl From<AccessibleSort> for glib::Value {
1697    #[inline]
1698    fn from(v: AccessibleSort) -> Self {
1699        skip_assert_initialized!();
1700        ToValue::to_value(&v)
1701    }
1702}
1703
1704/// The possible accessible states of a [`Accessible`][crate::Accessible].
1705#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1706#[non_exhaustive]
1707#[doc(alias = "GtkAccessibleState")]
1708pub enum AccessibleState {
1709    /// A “busy” state. This state has boolean values
1710    #[doc(alias = "GTK_ACCESSIBLE_STATE_BUSY")]
1711    Busy,
1712    /// A “checked” state; indicates the current
1713    ///   state of a [`CheckButton`][crate::CheckButton]. Value type: [`AccessibleTristate`][crate::AccessibleTristate]
1714    #[doc(alias = "GTK_ACCESSIBLE_STATE_CHECKED")]
1715    Checked,
1716    /// A “disabled” state; corresponds to the
1717    ///   [`sensitive`][struct@crate::Widget#sensitive] property. It indicates a UI element
1718    ///   that is perceivable, but not editable or operable. Value type: boolean
1719    #[doc(alias = "GTK_ACCESSIBLE_STATE_DISABLED")]
1720    Disabled,
1721    /// An “expanded” state; corresponds to the
1722    ///   [`expanded`][struct@crate::Expander#expanded] property. Value type: boolean
1723    ///   or undefined
1724    #[doc(alias = "GTK_ACCESSIBLE_STATE_EXPANDED")]
1725    Expanded,
1726    /// A “hidden” state; corresponds to the
1727    ///   [`visible`][struct@crate::Widget#visible] property. You can use this state
1728    ///   explicitly on UI elements that should not be exposed to an assistive
1729    ///   technology. Value type: boolean
1730    ///   See also: [`Disabled`][Self::Disabled]
1731    #[doc(alias = "GTK_ACCESSIBLE_STATE_HIDDEN")]
1732    Hidden,
1733    /// An “invalid” state; set when a widget
1734    ///   is showing an error. Value type: [`AccessibleInvalidState`][crate::AccessibleInvalidState]
1735    #[doc(alias = "GTK_ACCESSIBLE_STATE_INVALID")]
1736    Invalid,
1737    /// A “pressed” state; indicates the current
1738    ///   state of a [`ToggleButton`][crate::ToggleButton]. Value type: [`AccessibleTristate`][crate::AccessibleTristate]
1739    ///   enumeration
1740    #[doc(alias = "GTK_ACCESSIBLE_STATE_PRESSED")]
1741    Pressed,
1742    /// A “selected” state; set when a widget
1743    ///   is selected. Value type: boolean or undefined
1744    #[doc(alias = "GTK_ACCESSIBLE_STATE_SELECTED")]
1745    Selected,
1746    /// Indicates that a widget with the GTK_ACCESSIBLE_ROLE_LINK has been visited.
1747    /// Value type: boolean.
1748    #[cfg(feature = "v4_12")]
1749    #[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
1750    #[doc(alias = "GTK_ACCESSIBLE_STATE_VISITED")]
1751    Visited,
1752    #[doc(hidden)]
1753    __Unknown(i32),
1754}
1755
1756impl AccessibleState {
1757    #[doc(alias = "gtk_accessible_state_init_value")]
1758    pub fn init_value(self, value: &mut glib::Value) {
1759        assert_initialized_main_thread!();
1760        unsafe {
1761            ffi::gtk_accessible_state_init_value(self.into_glib(), value.to_glib_none_mut().0);
1762        }
1763    }
1764}
1765
1766#[doc(hidden)]
1767impl IntoGlib for AccessibleState {
1768    type GlibType = ffi::GtkAccessibleState;
1769
1770    #[inline]
1771    fn into_glib(self) -> ffi::GtkAccessibleState {
1772        match self {
1773            Self::Busy => ffi::GTK_ACCESSIBLE_STATE_BUSY,
1774            Self::Checked => ffi::GTK_ACCESSIBLE_STATE_CHECKED,
1775            Self::Disabled => ffi::GTK_ACCESSIBLE_STATE_DISABLED,
1776            Self::Expanded => ffi::GTK_ACCESSIBLE_STATE_EXPANDED,
1777            Self::Hidden => ffi::GTK_ACCESSIBLE_STATE_HIDDEN,
1778            Self::Invalid => ffi::GTK_ACCESSIBLE_STATE_INVALID,
1779            Self::Pressed => ffi::GTK_ACCESSIBLE_STATE_PRESSED,
1780            Self::Selected => ffi::GTK_ACCESSIBLE_STATE_SELECTED,
1781            #[cfg(feature = "v4_12")]
1782            Self::Visited => ffi::GTK_ACCESSIBLE_STATE_VISITED,
1783            Self::__Unknown(value) => value,
1784        }
1785    }
1786}
1787
1788#[doc(hidden)]
1789impl FromGlib<ffi::GtkAccessibleState> for AccessibleState {
1790    #[inline]
1791    unsafe fn from_glib(value: ffi::GtkAccessibleState) -> Self {
1792        skip_assert_initialized!();
1793
1794        match value {
1795            ffi::GTK_ACCESSIBLE_STATE_BUSY => Self::Busy,
1796            ffi::GTK_ACCESSIBLE_STATE_CHECKED => Self::Checked,
1797            ffi::GTK_ACCESSIBLE_STATE_DISABLED => Self::Disabled,
1798            ffi::GTK_ACCESSIBLE_STATE_EXPANDED => Self::Expanded,
1799            ffi::GTK_ACCESSIBLE_STATE_HIDDEN => Self::Hidden,
1800            ffi::GTK_ACCESSIBLE_STATE_INVALID => Self::Invalid,
1801            ffi::GTK_ACCESSIBLE_STATE_PRESSED => Self::Pressed,
1802            ffi::GTK_ACCESSIBLE_STATE_SELECTED => Self::Selected,
1803            #[cfg(feature = "v4_12")]
1804            ffi::GTK_ACCESSIBLE_STATE_VISITED => Self::Visited,
1805            value => Self::__Unknown(value),
1806        }
1807    }
1808}
1809
1810impl StaticType for AccessibleState {
1811    #[inline]
1812    #[doc(alias = "gtk_accessible_state_get_type")]
1813    fn static_type() -> glib::Type {
1814        unsafe { from_glib(ffi::gtk_accessible_state_get_type()) }
1815    }
1816}
1817
1818impl glib::HasParamSpec for AccessibleState {
1819    type ParamSpec = glib::ParamSpecEnum;
1820    type SetValue = Self;
1821    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1822
1823    fn param_spec_builder() -> Self::BuilderFn {
1824        Self::ParamSpec::builder_with_default
1825    }
1826}
1827
1828impl glib::value::ValueType for AccessibleState {
1829    type Type = Self;
1830}
1831
1832unsafe impl<'a> glib::value::FromValue<'a> for AccessibleState {
1833    type Checker = glib::value::GenericValueTypeChecker<Self>;
1834
1835    #[inline]
1836    unsafe fn from_value(value: &'a glib::Value) -> Self {
1837        skip_assert_initialized!();
1838        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1839    }
1840}
1841
1842impl ToValue for AccessibleState {
1843    #[inline]
1844    fn to_value(&self) -> glib::Value {
1845        let mut value = glib::Value::for_value_type::<Self>();
1846        unsafe {
1847            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1848        }
1849        value
1850    }
1851
1852    #[inline]
1853    fn value_type(&self) -> glib::Type {
1854        Self::static_type()
1855    }
1856}
1857
1858impl From<AccessibleState> for glib::Value {
1859    #[inline]
1860    fn from(v: AccessibleState) -> Self {
1861        skip_assert_initialized!();
1862        ToValue::to_value(&v)
1863    }
1864}
1865
1866/// The type of contents change operation.
1867#[cfg(feature = "v4_14")]
1868#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1869#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1870#[non_exhaustive]
1871#[doc(alias = "GtkAccessibleTextContentChange")]
1872pub enum AccessibleTextContentChange {
1873    /// contents change as the result of
1874    ///   an insert operation
1875    #[doc(alias = "GTK_ACCESSIBLE_TEXT_CONTENT_CHANGE_INSERT")]
1876    Insert,
1877    /// contents change as the result of
1878    ///   a remove operation
1879    #[doc(alias = "GTK_ACCESSIBLE_TEXT_CONTENT_CHANGE_REMOVE")]
1880    Remove,
1881    #[doc(hidden)]
1882    __Unknown(i32),
1883}
1884
1885#[cfg(feature = "v4_14")]
1886#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1887#[doc(hidden)]
1888impl IntoGlib for AccessibleTextContentChange {
1889    type GlibType = ffi::GtkAccessibleTextContentChange;
1890
1891    #[inline]
1892    fn into_glib(self) -> ffi::GtkAccessibleTextContentChange {
1893        match self {
1894            Self::Insert => ffi::GTK_ACCESSIBLE_TEXT_CONTENT_CHANGE_INSERT,
1895            Self::Remove => ffi::GTK_ACCESSIBLE_TEXT_CONTENT_CHANGE_REMOVE,
1896            Self::__Unknown(value) => value,
1897        }
1898    }
1899}
1900
1901#[cfg(feature = "v4_14")]
1902#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1903#[doc(hidden)]
1904impl FromGlib<ffi::GtkAccessibleTextContentChange> for AccessibleTextContentChange {
1905    #[inline]
1906    unsafe fn from_glib(value: ffi::GtkAccessibleTextContentChange) -> Self {
1907        skip_assert_initialized!();
1908
1909        match value {
1910            ffi::GTK_ACCESSIBLE_TEXT_CONTENT_CHANGE_INSERT => Self::Insert,
1911            ffi::GTK_ACCESSIBLE_TEXT_CONTENT_CHANGE_REMOVE => Self::Remove,
1912            value => Self::__Unknown(value),
1913        }
1914    }
1915}
1916
1917#[cfg(feature = "v4_14")]
1918#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1919impl StaticType for AccessibleTextContentChange {
1920    #[inline]
1921    #[doc(alias = "gtk_accessible_text_content_change_get_type")]
1922    fn static_type() -> glib::Type {
1923        unsafe { from_glib(ffi::gtk_accessible_text_content_change_get_type()) }
1924    }
1925}
1926
1927#[cfg(feature = "v4_14")]
1928#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1929impl glib::HasParamSpec for AccessibleTextContentChange {
1930    type ParamSpec = glib::ParamSpecEnum;
1931    type SetValue = Self;
1932    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
1933
1934    fn param_spec_builder() -> Self::BuilderFn {
1935        Self::ParamSpec::builder_with_default
1936    }
1937}
1938
1939#[cfg(feature = "v4_14")]
1940#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1941impl glib::value::ValueType for AccessibleTextContentChange {
1942    type Type = Self;
1943}
1944
1945#[cfg(feature = "v4_14")]
1946#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1947unsafe impl<'a> glib::value::FromValue<'a> for AccessibleTextContentChange {
1948    type Checker = glib::value::GenericValueTypeChecker<Self>;
1949
1950    #[inline]
1951    unsafe fn from_value(value: &'a glib::Value) -> Self {
1952        skip_assert_initialized!();
1953        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
1954    }
1955}
1956
1957#[cfg(feature = "v4_14")]
1958#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1959impl ToValue for AccessibleTextContentChange {
1960    #[inline]
1961    fn to_value(&self) -> glib::Value {
1962        let mut value = glib::Value::for_value_type::<Self>();
1963        unsafe {
1964            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
1965        }
1966        value
1967    }
1968
1969    #[inline]
1970    fn value_type(&self) -> glib::Type {
1971        Self::static_type()
1972    }
1973}
1974
1975#[cfg(feature = "v4_14")]
1976#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1977impl From<AccessibleTextContentChange> for glib::Value {
1978    #[inline]
1979    fn from(v: AccessibleTextContentChange) -> Self {
1980        skip_assert_initialized!();
1981        ToValue::to_value(&v)
1982    }
1983}
1984
1985/// The granularity for queries about the text contents of a [`AccessibleText`][crate::AccessibleText]
1986/// implementation.
1987#[cfg(feature = "v4_14")]
1988#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
1989#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
1990#[non_exhaustive]
1991#[doc(alias = "GtkAccessibleTextGranularity")]
1992pub enum AccessibleTextGranularity {
1993    /// Use the boundary between
1994    ///   characters (including non-printing characters)
1995    #[doc(alias = "GTK_ACCESSIBLE_TEXT_GRANULARITY_CHARACTER")]
1996    Character,
1997    /// Use the boundary between words,
1998    ///   starting from the beginning of the current word and ending at the
1999    ///   beginning of the next word
2000    #[doc(alias = "GTK_ACCESSIBLE_TEXT_GRANULARITY_WORD")]
2001    Word,
2002    /// Use the boundary between
2003    ///   sentences, starting from the beginning of the current sentence and
2004    ///   ending at the beginning of the next sentence
2005    #[doc(alias = "GTK_ACCESSIBLE_TEXT_GRANULARITY_SENTENCE")]
2006    Sentence,
2007    /// Use the boundary between lines,
2008    ///   starting from the beginning of the current line and ending at the
2009    ///   beginning of the next line
2010    #[doc(alias = "GTK_ACCESSIBLE_TEXT_GRANULARITY_LINE")]
2011    Line,
2012    /// Use the boundary between
2013    ///   paragraphs, starting from the beginning of the current paragraph and
2014    ///   ending at the beginning of the next paragraph
2015    #[doc(alias = "GTK_ACCESSIBLE_TEXT_GRANULARITY_PARAGRAPH")]
2016    Paragraph,
2017    #[doc(hidden)]
2018    __Unknown(i32),
2019}
2020
2021#[cfg(feature = "v4_14")]
2022#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2023#[doc(hidden)]
2024impl IntoGlib for AccessibleTextGranularity {
2025    type GlibType = ffi::GtkAccessibleTextGranularity;
2026
2027    #[inline]
2028    fn into_glib(self) -> ffi::GtkAccessibleTextGranularity {
2029        match self {
2030            Self::Character => ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_CHARACTER,
2031            Self::Word => ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_WORD,
2032            Self::Sentence => ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_SENTENCE,
2033            Self::Line => ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_LINE,
2034            Self::Paragraph => ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_PARAGRAPH,
2035            Self::__Unknown(value) => value,
2036        }
2037    }
2038}
2039
2040#[cfg(feature = "v4_14")]
2041#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2042#[doc(hidden)]
2043impl FromGlib<ffi::GtkAccessibleTextGranularity> for AccessibleTextGranularity {
2044    #[inline]
2045    unsafe fn from_glib(value: ffi::GtkAccessibleTextGranularity) -> Self {
2046        skip_assert_initialized!();
2047
2048        match value {
2049            ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_CHARACTER => Self::Character,
2050            ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_WORD => Self::Word,
2051            ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_SENTENCE => Self::Sentence,
2052            ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_LINE => Self::Line,
2053            ffi::GTK_ACCESSIBLE_TEXT_GRANULARITY_PARAGRAPH => Self::Paragraph,
2054            value => Self::__Unknown(value),
2055        }
2056    }
2057}
2058
2059#[cfg(feature = "v4_14")]
2060#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2061impl StaticType for AccessibleTextGranularity {
2062    #[inline]
2063    #[doc(alias = "gtk_accessible_text_granularity_get_type")]
2064    fn static_type() -> glib::Type {
2065        unsafe { from_glib(ffi::gtk_accessible_text_granularity_get_type()) }
2066    }
2067}
2068
2069#[cfg(feature = "v4_14")]
2070#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2071impl glib::HasParamSpec for AccessibleTextGranularity {
2072    type ParamSpec = glib::ParamSpecEnum;
2073    type SetValue = Self;
2074    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2075
2076    fn param_spec_builder() -> Self::BuilderFn {
2077        Self::ParamSpec::builder_with_default
2078    }
2079}
2080
2081#[cfg(feature = "v4_14")]
2082#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2083impl glib::value::ValueType for AccessibleTextGranularity {
2084    type Type = Self;
2085}
2086
2087#[cfg(feature = "v4_14")]
2088#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2089unsafe impl<'a> glib::value::FromValue<'a> for AccessibleTextGranularity {
2090    type Checker = glib::value::GenericValueTypeChecker<Self>;
2091
2092    #[inline]
2093    unsafe fn from_value(value: &'a glib::Value) -> Self {
2094        skip_assert_initialized!();
2095        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2096    }
2097}
2098
2099#[cfg(feature = "v4_14")]
2100#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2101impl ToValue for AccessibleTextGranularity {
2102    #[inline]
2103    fn to_value(&self) -> glib::Value {
2104        let mut value = glib::Value::for_value_type::<Self>();
2105        unsafe {
2106            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2107        }
2108        value
2109    }
2110
2111    #[inline]
2112    fn value_type(&self) -> glib::Type {
2113        Self::static_type()
2114    }
2115}
2116
2117#[cfg(feature = "v4_14")]
2118#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
2119impl From<AccessibleTextGranularity> for glib::Value {
2120    #[inline]
2121    fn from(v: AccessibleTextGranularity) -> Self {
2122        skip_assert_initialized!();
2123        ToValue::to_value(&v)
2124    }
2125}
2126
2127/// The possible values for the [`AccessibleState::Pressed`][crate::AccessibleState::Pressed]
2128/// accessible state.
2129///
2130/// Note that the [`False`][Self::False] and
2131/// [`True`][Self::True] have the same values
2132/// as [`false`] and [`true`].
2133#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2134#[non_exhaustive]
2135#[doc(alias = "GtkAccessibleTristate")]
2136pub enum AccessibleTristate {
2137    /// The state is `false`
2138    #[doc(alias = "GTK_ACCESSIBLE_TRISTATE_FALSE")]
2139    False,
2140    /// The state is `true`
2141    #[doc(alias = "GTK_ACCESSIBLE_TRISTATE_TRUE")]
2142    True,
2143    /// The state is `mixed`
2144    #[doc(alias = "GTK_ACCESSIBLE_TRISTATE_MIXED")]
2145    Mixed,
2146    #[doc(hidden)]
2147    __Unknown(i32),
2148}
2149
2150#[doc(hidden)]
2151impl IntoGlib for AccessibleTristate {
2152    type GlibType = ffi::GtkAccessibleTristate;
2153
2154    #[inline]
2155    fn into_glib(self) -> ffi::GtkAccessibleTristate {
2156        match self {
2157            Self::False => ffi::GTK_ACCESSIBLE_TRISTATE_FALSE,
2158            Self::True => ffi::GTK_ACCESSIBLE_TRISTATE_TRUE,
2159            Self::Mixed => ffi::GTK_ACCESSIBLE_TRISTATE_MIXED,
2160            Self::__Unknown(value) => value,
2161        }
2162    }
2163}
2164
2165#[doc(hidden)]
2166impl FromGlib<ffi::GtkAccessibleTristate> for AccessibleTristate {
2167    #[inline]
2168    unsafe fn from_glib(value: ffi::GtkAccessibleTristate) -> Self {
2169        skip_assert_initialized!();
2170
2171        match value {
2172            ffi::GTK_ACCESSIBLE_TRISTATE_FALSE => Self::False,
2173            ffi::GTK_ACCESSIBLE_TRISTATE_TRUE => Self::True,
2174            ffi::GTK_ACCESSIBLE_TRISTATE_MIXED => Self::Mixed,
2175            value => Self::__Unknown(value),
2176        }
2177    }
2178}
2179
2180impl StaticType for AccessibleTristate {
2181    #[inline]
2182    #[doc(alias = "gtk_accessible_tristate_get_type")]
2183    fn static_type() -> glib::Type {
2184        unsafe { from_glib(ffi::gtk_accessible_tristate_get_type()) }
2185    }
2186}
2187
2188impl glib::HasParamSpec for AccessibleTristate {
2189    type ParamSpec = glib::ParamSpecEnum;
2190    type SetValue = Self;
2191    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2192
2193    fn param_spec_builder() -> Self::BuilderFn {
2194        Self::ParamSpec::builder_with_default
2195    }
2196}
2197
2198impl glib::value::ValueType for AccessibleTristate {
2199    type Type = Self;
2200}
2201
2202unsafe impl<'a> glib::value::FromValue<'a> for AccessibleTristate {
2203    type Checker = glib::value::GenericValueTypeChecker<Self>;
2204
2205    #[inline]
2206    unsafe fn from_value(value: &'a glib::Value) -> Self {
2207        skip_assert_initialized!();
2208        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2209    }
2210}
2211
2212impl ToValue for AccessibleTristate {
2213    #[inline]
2214    fn to_value(&self) -> glib::Value {
2215        let mut value = glib::Value::for_value_type::<Self>();
2216        unsafe {
2217            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2218        }
2219        value
2220    }
2221
2222    #[inline]
2223    fn value_type(&self) -> glib::Type {
2224        Self::static_type()
2225    }
2226}
2227
2228impl From<AccessibleTristate> for glib::Value {
2229    #[inline]
2230    fn from(v: AccessibleTristate) -> Self {
2231        skip_assert_initialized!();
2232        ToValue::to_value(&v)
2233    }
2234}
2235
2236/// Indicates the direction in which an arrow should point.
2237#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2238#[non_exhaustive]
2239#[doc(alias = "GtkArrowType")]
2240pub enum ArrowType {
2241    /// Represents an upward pointing arrow.
2242    #[doc(alias = "GTK_ARROW_UP")]
2243    Up,
2244    /// Represents a downward pointing arrow.
2245    #[doc(alias = "GTK_ARROW_DOWN")]
2246    Down,
2247    /// Represents a left pointing arrow.
2248    #[doc(alias = "GTK_ARROW_LEFT")]
2249    Left,
2250    /// Represents a right pointing arrow.
2251    #[doc(alias = "GTK_ARROW_RIGHT")]
2252    Right,
2253    /// No arrow.
2254    #[doc(alias = "GTK_ARROW_NONE")]
2255    None,
2256    #[doc(hidden)]
2257    __Unknown(i32),
2258}
2259
2260#[doc(hidden)]
2261impl IntoGlib for ArrowType {
2262    type GlibType = ffi::GtkArrowType;
2263
2264    #[inline]
2265    fn into_glib(self) -> ffi::GtkArrowType {
2266        match self {
2267            Self::Up => ffi::GTK_ARROW_UP,
2268            Self::Down => ffi::GTK_ARROW_DOWN,
2269            Self::Left => ffi::GTK_ARROW_LEFT,
2270            Self::Right => ffi::GTK_ARROW_RIGHT,
2271            Self::None => ffi::GTK_ARROW_NONE,
2272            Self::__Unknown(value) => value,
2273        }
2274    }
2275}
2276
2277#[doc(hidden)]
2278impl FromGlib<ffi::GtkArrowType> for ArrowType {
2279    #[inline]
2280    unsafe fn from_glib(value: ffi::GtkArrowType) -> Self {
2281        skip_assert_initialized!();
2282
2283        match value {
2284            ffi::GTK_ARROW_UP => Self::Up,
2285            ffi::GTK_ARROW_DOWN => Self::Down,
2286            ffi::GTK_ARROW_LEFT => Self::Left,
2287            ffi::GTK_ARROW_RIGHT => Self::Right,
2288            ffi::GTK_ARROW_NONE => Self::None,
2289            value => Self::__Unknown(value),
2290        }
2291    }
2292}
2293
2294impl StaticType for ArrowType {
2295    #[inline]
2296    #[doc(alias = "gtk_arrow_type_get_type")]
2297    fn static_type() -> glib::Type {
2298        unsafe { from_glib(ffi::gtk_arrow_type_get_type()) }
2299    }
2300}
2301
2302impl glib::HasParamSpec for ArrowType {
2303    type ParamSpec = glib::ParamSpecEnum;
2304    type SetValue = Self;
2305    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2306
2307    fn param_spec_builder() -> Self::BuilderFn {
2308        Self::ParamSpec::builder_with_default
2309    }
2310}
2311
2312impl glib::value::ValueType for ArrowType {
2313    type Type = Self;
2314}
2315
2316unsafe impl<'a> glib::value::FromValue<'a> for ArrowType {
2317    type Checker = glib::value::GenericValueTypeChecker<Self>;
2318
2319    #[inline]
2320    unsafe fn from_value(value: &'a glib::Value) -> Self {
2321        skip_assert_initialized!();
2322        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2323    }
2324}
2325
2326impl ToValue for ArrowType {
2327    #[inline]
2328    fn to_value(&self) -> glib::Value {
2329        let mut value = glib::Value::for_value_type::<Self>();
2330        unsafe {
2331            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2332        }
2333        value
2334    }
2335
2336    #[inline]
2337    fn value_type(&self) -> glib::Type {
2338        Self::static_type()
2339    }
2340}
2341
2342impl From<ArrowType> for glib::Value {
2343    #[inline]
2344    fn from(v: ArrowType) -> Self {
2345        skip_assert_initialized!();
2346        ToValue::to_value(&v)
2347    }
2348}
2349
2350/// Determines the role of a page inside a [`Assistant`][crate::Assistant].
2351///
2352/// The role is used to handle buttons sensitivity and visibility.
2353///
2354/// Note that an assistant needs to end its page flow with a page of type
2355/// [`Confirm`][Self::Confirm], [`Summary`][Self::Summary] or
2356/// [`Progress`][Self::Progress] to be correct.
2357///
2358/// The Cancel button will only be shown if the page isn’t “committed”.
2359/// See gtk_assistant_commit() for details.
2360///
2361/// # Deprecated since 4.10
2362///
2363/// [`Assistant`][crate::Assistant] will be removed in GTK 5
2364#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
2365#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2366#[non_exhaustive]
2367#[doc(alias = "GtkAssistantPageType")]
2368pub enum AssistantPageType {
2369    /// The page has regular contents. Both the
2370    ///  Back and forward buttons will be shown.
2371    #[doc(alias = "GTK_ASSISTANT_PAGE_CONTENT")]
2372    Content,
2373    /// The page contains an introduction to the
2374    ///  assistant task. Only the Forward button will be shown if there is a
2375    ///   next page.
2376    #[doc(alias = "GTK_ASSISTANT_PAGE_INTRO")]
2377    Intro,
2378    /// The page lets the user confirm or deny the
2379    ///  changes. The Back and Apply buttons will be shown.
2380    #[doc(alias = "GTK_ASSISTANT_PAGE_CONFIRM")]
2381    Confirm,
2382    /// The page informs the user of the changes
2383    ///  done. Only the Close button will be shown.
2384    #[doc(alias = "GTK_ASSISTANT_PAGE_SUMMARY")]
2385    Summary,
2386    /// Used for tasks that take a long time to
2387    ///  complete, blocks the assistant until the page is marked as complete.
2388    ///   Only the back button will be shown.
2389    #[doc(alias = "GTK_ASSISTANT_PAGE_PROGRESS")]
2390    Progress,
2391    /// Used for when other page types are not
2392    ///  appropriate. No buttons will be shown, and the application must
2393    ///  add its own buttons through gtk_assistant_add_action_widget().
2394    #[doc(alias = "GTK_ASSISTANT_PAGE_CUSTOM")]
2395    Custom,
2396    #[doc(hidden)]
2397    __Unknown(i32),
2398}
2399
2400#[allow(deprecated)]
2401#[doc(hidden)]
2402impl IntoGlib for AssistantPageType {
2403    type GlibType = ffi::GtkAssistantPageType;
2404
2405    #[inline]
2406    fn into_glib(self) -> ffi::GtkAssistantPageType {
2407        match self {
2408            Self::Content => ffi::GTK_ASSISTANT_PAGE_CONTENT,
2409            Self::Intro => ffi::GTK_ASSISTANT_PAGE_INTRO,
2410            Self::Confirm => ffi::GTK_ASSISTANT_PAGE_CONFIRM,
2411            Self::Summary => ffi::GTK_ASSISTANT_PAGE_SUMMARY,
2412            Self::Progress => ffi::GTK_ASSISTANT_PAGE_PROGRESS,
2413            Self::Custom => ffi::GTK_ASSISTANT_PAGE_CUSTOM,
2414            Self::__Unknown(value) => value,
2415        }
2416    }
2417}
2418
2419#[allow(deprecated)]
2420#[doc(hidden)]
2421impl FromGlib<ffi::GtkAssistantPageType> for AssistantPageType {
2422    #[inline]
2423    unsafe fn from_glib(value: ffi::GtkAssistantPageType) -> Self {
2424        skip_assert_initialized!();
2425
2426        match value {
2427            ffi::GTK_ASSISTANT_PAGE_CONTENT => Self::Content,
2428            ffi::GTK_ASSISTANT_PAGE_INTRO => Self::Intro,
2429            ffi::GTK_ASSISTANT_PAGE_CONFIRM => Self::Confirm,
2430            ffi::GTK_ASSISTANT_PAGE_SUMMARY => Self::Summary,
2431            ffi::GTK_ASSISTANT_PAGE_PROGRESS => Self::Progress,
2432            ffi::GTK_ASSISTANT_PAGE_CUSTOM => Self::Custom,
2433            value => Self::__Unknown(value),
2434        }
2435    }
2436}
2437
2438#[allow(deprecated)]
2439impl StaticType for AssistantPageType {
2440    #[inline]
2441    #[doc(alias = "gtk_assistant_page_type_get_type")]
2442    fn static_type() -> glib::Type {
2443        unsafe { from_glib(ffi::gtk_assistant_page_type_get_type()) }
2444    }
2445}
2446
2447#[allow(deprecated)]
2448impl glib::HasParamSpec for AssistantPageType {
2449    type ParamSpec = glib::ParamSpecEnum;
2450    type SetValue = Self;
2451    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2452
2453    fn param_spec_builder() -> Self::BuilderFn {
2454        Self::ParamSpec::builder_with_default
2455    }
2456}
2457
2458#[allow(deprecated)]
2459impl glib::value::ValueType for AssistantPageType {
2460    type Type = Self;
2461}
2462
2463#[allow(deprecated)]
2464unsafe impl<'a> glib::value::FromValue<'a> for AssistantPageType {
2465    type Checker = glib::value::GenericValueTypeChecker<Self>;
2466
2467    #[inline]
2468    unsafe fn from_value(value: &'a glib::Value) -> Self {
2469        skip_assert_initialized!();
2470        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2471    }
2472}
2473
2474#[allow(deprecated)]
2475impl ToValue for AssistantPageType {
2476    #[inline]
2477    fn to_value(&self) -> glib::Value {
2478        let mut value = glib::Value::for_value_type::<Self>();
2479        unsafe {
2480            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2481        }
2482        value
2483    }
2484
2485    #[inline]
2486    fn value_type(&self) -> glib::Type {
2487        Self::static_type()
2488    }
2489}
2490
2491#[allow(deprecated)]
2492impl From<AssistantPageType> for glib::Value {
2493    #[inline]
2494    fn from(v: AssistantPageType) -> Self {
2495        skip_assert_initialized!();
2496        ToValue::to_value(&v)
2497    }
2498}
2499
2500/// Baseline position in a row of widgets.
2501///
2502/// Whenever a container has some form of natural row it may align
2503/// children in that row along a common typographical baseline. If
2504/// the amount of vertical space in the row is taller than the total
2505/// requested height of the baseline-aligned children then it can use a
2506/// [`BaselinePosition`][crate::BaselinePosition] to select where to put the baseline inside the
2507/// extra available space.
2508#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2509#[non_exhaustive]
2510#[doc(alias = "GtkBaselinePosition")]
2511pub enum BaselinePosition {
2512    /// Align the baseline at the top
2513    #[doc(alias = "GTK_BASELINE_POSITION_TOP")]
2514    Top,
2515    /// Center the baseline
2516    #[doc(alias = "GTK_BASELINE_POSITION_CENTER")]
2517    Center,
2518    /// Align the baseline at the bottom
2519    #[doc(alias = "GTK_BASELINE_POSITION_BOTTOM")]
2520    Bottom,
2521    #[doc(hidden)]
2522    __Unknown(i32),
2523}
2524
2525#[doc(hidden)]
2526impl IntoGlib for BaselinePosition {
2527    type GlibType = ffi::GtkBaselinePosition;
2528
2529    #[inline]
2530    fn into_glib(self) -> ffi::GtkBaselinePosition {
2531        match self {
2532            Self::Top => ffi::GTK_BASELINE_POSITION_TOP,
2533            Self::Center => ffi::GTK_BASELINE_POSITION_CENTER,
2534            Self::Bottom => ffi::GTK_BASELINE_POSITION_BOTTOM,
2535            Self::__Unknown(value) => value,
2536        }
2537    }
2538}
2539
2540#[doc(hidden)]
2541impl FromGlib<ffi::GtkBaselinePosition> for BaselinePosition {
2542    #[inline]
2543    unsafe fn from_glib(value: ffi::GtkBaselinePosition) -> Self {
2544        skip_assert_initialized!();
2545
2546        match value {
2547            ffi::GTK_BASELINE_POSITION_TOP => Self::Top,
2548            ffi::GTK_BASELINE_POSITION_CENTER => Self::Center,
2549            ffi::GTK_BASELINE_POSITION_BOTTOM => Self::Bottom,
2550            value => Self::__Unknown(value),
2551        }
2552    }
2553}
2554
2555impl StaticType for BaselinePosition {
2556    #[inline]
2557    #[doc(alias = "gtk_baseline_position_get_type")]
2558    fn static_type() -> glib::Type {
2559        unsafe { from_glib(ffi::gtk_baseline_position_get_type()) }
2560    }
2561}
2562
2563impl glib::HasParamSpec for BaselinePosition {
2564    type ParamSpec = glib::ParamSpecEnum;
2565    type SetValue = Self;
2566    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2567
2568    fn param_spec_builder() -> Self::BuilderFn {
2569        Self::ParamSpec::builder_with_default
2570    }
2571}
2572
2573impl glib::value::ValueType for BaselinePosition {
2574    type Type = Self;
2575}
2576
2577unsafe impl<'a> glib::value::FromValue<'a> for BaselinePosition {
2578    type Checker = glib::value::GenericValueTypeChecker<Self>;
2579
2580    #[inline]
2581    unsafe fn from_value(value: &'a glib::Value) -> Self {
2582        skip_assert_initialized!();
2583        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2584    }
2585}
2586
2587impl ToValue for BaselinePosition {
2588    #[inline]
2589    fn to_value(&self) -> glib::Value {
2590        let mut value = glib::Value::for_value_type::<Self>();
2591        unsafe {
2592            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2593        }
2594        value
2595    }
2596
2597    #[inline]
2598    fn value_type(&self) -> glib::Type {
2599        Self::static_type()
2600    }
2601}
2602
2603impl From<BaselinePosition> for glib::Value {
2604    #[inline]
2605    fn from(v: BaselinePosition) -> Self {
2606        skip_assert_initialized!();
2607        ToValue::to_value(&v)
2608    }
2609}
2610
2611/// Describes how the border of a UI element should be rendered.
2612#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2613#[non_exhaustive]
2614#[doc(alias = "GtkBorderStyle")]
2615pub enum BorderStyle {
2616    /// No visible border
2617    #[doc(alias = "GTK_BORDER_STYLE_NONE")]
2618    None,
2619    /// Same as [`None`][Self::None]
2620    #[doc(alias = "GTK_BORDER_STYLE_HIDDEN")]
2621    Hidden,
2622    /// A single line segment
2623    #[doc(alias = "GTK_BORDER_STYLE_SOLID")]
2624    Solid,
2625    /// Looks as if the content is sunken into the canvas
2626    #[doc(alias = "GTK_BORDER_STYLE_INSET")]
2627    Inset,
2628    /// Looks as if the content is coming out of the canvas
2629    #[doc(alias = "GTK_BORDER_STYLE_OUTSET")]
2630    Outset,
2631    /// A series of round dots
2632    #[doc(alias = "GTK_BORDER_STYLE_DOTTED")]
2633    Dotted,
2634    /// A series of square-ended dashes
2635    #[doc(alias = "GTK_BORDER_STYLE_DASHED")]
2636    Dashed,
2637    /// Two parallel lines with some space between them
2638    #[doc(alias = "GTK_BORDER_STYLE_DOUBLE")]
2639    Double,
2640    /// Looks as if it were carved in the canvas
2641    #[doc(alias = "GTK_BORDER_STYLE_GROOVE")]
2642    Groove,
2643    /// Looks as if it were coming out of the canvas
2644    #[doc(alias = "GTK_BORDER_STYLE_RIDGE")]
2645    Ridge,
2646    #[doc(hidden)]
2647    __Unknown(i32),
2648}
2649
2650#[doc(hidden)]
2651impl IntoGlib for BorderStyle {
2652    type GlibType = ffi::GtkBorderStyle;
2653
2654    #[inline]
2655    fn into_glib(self) -> ffi::GtkBorderStyle {
2656        match self {
2657            Self::None => ffi::GTK_BORDER_STYLE_NONE,
2658            Self::Hidden => ffi::GTK_BORDER_STYLE_HIDDEN,
2659            Self::Solid => ffi::GTK_BORDER_STYLE_SOLID,
2660            Self::Inset => ffi::GTK_BORDER_STYLE_INSET,
2661            Self::Outset => ffi::GTK_BORDER_STYLE_OUTSET,
2662            Self::Dotted => ffi::GTK_BORDER_STYLE_DOTTED,
2663            Self::Dashed => ffi::GTK_BORDER_STYLE_DASHED,
2664            Self::Double => ffi::GTK_BORDER_STYLE_DOUBLE,
2665            Self::Groove => ffi::GTK_BORDER_STYLE_GROOVE,
2666            Self::Ridge => ffi::GTK_BORDER_STYLE_RIDGE,
2667            Self::__Unknown(value) => value,
2668        }
2669    }
2670}
2671
2672#[doc(hidden)]
2673impl FromGlib<ffi::GtkBorderStyle> for BorderStyle {
2674    #[inline]
2675    unsafe fn from_glib(value: ffi::GtkBorderStyle) -> Self {
2676        skip_assert_initialized!();
2677
2678        match value {
2679            ffi::GTK_BORDER_STYLE_NONE => Self::None,
2680            ffi::GTK_BORDER_STYLE_HIDDEN => Self::Hidden,
2681            ffi::GTK_BORDER_STYLE_SOLID => Self::Solid,
2682            ffi::GTK_BORDER_STYLE_INSET => Self::Inset,
2683            ffi::GTK_BORDER_STYLE_OUTSET => Self::Outset,
2684            ffi::GTK_BORDER_STYLE_DOTTED => Self::Dotted,
2685            ffi::GTK_BORDER_STYLE_DASHED => Self::Dashed,
2686            ffi::GTK_BORDER_STYLE_DOUBLE => Self::Double,
2687            ffi::GTK_BORDER_STYLE_GROOVE => Self::Groove,
2688            ffi::GTK_BORDER_STYLE_RIDGE => Self::Ridge,
2689            value => Self::__Unknown(value),
2690        }
2691    }
2692}
2693
2694impl StaticType for BorderStyle {
2695    #[inline]
2696    #[doc(alias = "gtk_border_style_get_type")]
2697    fn static_type() -> glib::Type {
2698        unsafe { from_glib(ffi::gtk_border_style_get_type()) }
2699    }
2700}
2701
2702impl glib::HasParamSpec for BorderStyle {
2703    type ParamSpec = glib::ParamSpecEnum;
2704    type SetValue = Self;
2705    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2706
2707    fn param_spec_builder() -> Self::BuilderFn {
2708        Self::ParamSpec::builder_with_default
2709    }
2710}
2711
2712impl glib::value::ValueType for BorderStyle {
2713    type Type = Self;
2714}
2715
2716unsafe impl<'a> glib::value::FromValue<'a> for BorderStyle {
2717    type Checker = glib::value::GenericValueTypeChecker<Self>;
2718
2719    #[inline]
2720    unsafe fn from_value(value: &'a glib::Value) -> Self {
2721        skip_assert_initialized!();
2722        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2723    }
2724}
2725
2726impl ToValue for BorderStyle {
2727    #[inline]
2728    fn to_value(&self) -> glib::Value {
2729        let mut value = glib::Value::for_value_type::<Self>();
2730        unsafe {
2731            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2732        }
2733        value
2734    }
2735
2736    #[inline]
2737    fn value_type(&self) -> glib::Type {
2738        Self::static_type()
2739    }
2740}
2741
2742impl From<BorderStyle> for glib::Value {
2743    #[inline]
2744    fn from(v: BorderStyle) -> Self {
2745        skip_assert_initialized!();
2746        ToValue::to_value(&v)
2747    }
2748}
2749
2750/// Error codes that identify various errors that can occur while using
2751/// [`Builder`][crate::Builder].
2752#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2753#[non_exhaustive]
2754#[doc(alias = "GtkBuilderError")]
2755pub enum BuilderError {
2756    /// A type-func attribute didn’t name
2757    ///  a function that returns a `GType`.
2758    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION")]
2759    InvalidTypeFunction,
2760    /// The input contained a tag that [`Builder`][crate::Builder]
2761    ///  can’t handle.
2762    #[doc(alias = "GTK_BUILDER_ERROR_UNHANDLED_TAG")]
2763    UnhandledTag,
2764    /// An attribute that is required by
2765    ///  [`Builder`][crate::Builder] was missing.
2766    #[doc(alias = "GTK_BUILDER_ERROR_MISSING_ATTRIBUTE")]
2767    MissingAttribute,
2768    /// [`Builder`][crate::Builder] found an attribute that
2769    ///  it doesn’t understand.
2770    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_ATTRIBUTE")]
2771    InvalidAttribute,
2772    /// [`Builder`][crate::Builder] found a tag that
2773    ///  it doesn’t understand.
2774    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_TAG")]
2775    InvalidTag,
2776    /// A required property value was
2777    ///  missing.
2778    #[doc(alias = "GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE")]
2779    MissingPropertyValue,
2780    /// [`Builder`][crate::Builder] couldn’t parse
2781    ///  some attribute value.
2782    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_VALUE")]
2783    InvalidValue,
2784    /// The input file requires a newer version
2785    ///  of GTK.
2786    #[doc(alias = "GTK_BUILDER_ERROR_VERSION_MISMATCH")]
2787    VersionMismatch,
2788    /// An object id occurred twice.
2789    #[doc(alias = "GTK_BUILDER_ERROR_DUPLICATE_ID")]
2790    DuplicateId,
2791    /// A specified object type is of the same type or
2792    ///  derived from the type of the composite class being extended with builder XML.
2793    #[doc(alias = "GTK_BUILDER_ERROR_OBJECT_TYPE_REFUSED")]
2794    ObjectTypeRefused,
2795    /// The wrong type was specified in a composite class’s template XML
2796    #[doc(alias = "GTK_BUILDER_ERROR_TEMPLATE_MISMATCH")]
2797    TemplateMismatch,
2798    /// The specified property is unknown for the object class.
2799    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_PROPERTY")]
2800    InvalidProperty,
2801    /// The specified signal is unknown for the object class.
2802    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_SIGNAL")]
2803    InvalidSignal,
2804    /// An object id is unknown.
2805    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_ID")]
2806    InvalidId,
2807    /// A function could not be found. This often happens
2808    ///   when symbols are set to be kept private. Compiling code with -rdynamic or using the
2809    ///   `gmodule-export-2.0` pkgconfig module can fix this problem.
2810    #[doc(alias = "GTK_BUILDER_ERROR_INVALID_FUNCTION")]
2811    InvalidFunction,
2812    #[doc(hidden)]
2813    __Unknown(i32),
2814}
2815
2816#[doc(hidden)]
2817impl IntoGlib for BuilderError {
2818    type GlibType = ffi::GtkBuilderError;
2819
2820    fn into_glib(self) -> ffi::GtkBuilderError {
2821        match self {
2822            Self::InvalidTypeFunction => ffi::GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION,
2823            Self::UnhandledTag => ffi::GTK_BUILDER_ERROR_UNHANDLED_TAG,
2824            Self::MissingAttribute => ffi::GTK_BUILDER_ERROR_MISSING_ATTRIBUTE,
2825            Self::InvalidAttribute => ffi::GTK_BUILDER_ERROR_INVALID_ATTRIBUTE,
2826            Self::InvalidTag => ffi::GTK_BUILDER_ERROR_INVALID_TAG,
2827            Self::MissingPropertyValue => ffi::GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE,
2828            Self::InvalidValue => ffi::GTK_BUILDER_ERROR_INVALID_VALUE,
2829            Self::VersionMismatch => ffi::GTK_BUILDER_ERROR_VERSION_MISMATCH,
2830            Self::DuplicateId => ffi::GTK_BUILDER_ERROR_DUPLICATE_ID,
2831            Self::ObjectTypeRefused => ffi::GTK_BUILDER_ERROR_OBJECT_TYPE_REFUSED,
2832            Self::TemplateMismatch => ffi::GTK_BUILDER_ERROR_TEMPLATE_MISMATCH,
2833            Self::InvalidProperty => ffi::GTK_BUILDER_ERROR_INVALID_PROPERTY,
2834            Self::InvalidSignal => ffi::GTK_BUILDER_ERROR_INVALID_SIGNAL,
2835            Self::InvalidId => ffi::GTK_BUILDER_ERROR_INVALID_ID,
2836            Self::InvalidFunction => ffi::GTK_BUILDER_ERROR_INVALID_FUNCTION,
2837            Self::__Unknown(value) => value,
2838        }
2839    }
2840}
2841
2842#[doc(hidden)]
2843impl FromGlib<ffi::GtkBuilderError> for BuilderError {
2844    unsafe fn from_glib(value: ffi::GtkBuilderError) -> Self {
2845        skip_assert_initialized!();
2846
2847        match value {
2848            ffi::GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION => Self::InvalidTypeFunction,
2849            ffi::GTK_BUILDER_ERROR_UNHANDLED_TAG => Self::UnhandledTag,
2850            ffi::GTK_BUILDER_ERROR_MISSING_ATTRIBUTE => Self::MissingAttribute,
2851            ffi::GTK_BUILDER_ERROR_INVALID_ATTRIBUTE => Self::InvalidAttribute,
2852            ffi::GTK_BUILDER_ERROR_INVALID_TAG => Self::InvalidTag,
2853            ffi::GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE => Self::MissingPropertyValue,
2854            ffi::GTK_BUILDER_ERROR_INVALID_VALUE => Self::InvalidValue,
2855            ffi::GTK_BUILDER_ERROR_VERSION_MISMATCH => Self::VersionMismatch,
2856            ffi::GTK_BUILDER_ERROR_DUPLICATE_ID => Self::DuplicateId,
2857            ffi::GTK_BUILDER_ERROR_OBJECT_TYPE_REFUSED => Self::ObjectTypeRefused,
2858            ffi::GTK_BUILDER_ERROR_TEMPLATE_MISMATCH => Self::TemplateMismatch,
2859            ffi::GTK_BUILDER_ERROR_INVALID_PROPERTY => Self::InvalidProperty,
2860            ffi::GTK_BUILDER_ERROR_INVALID_SIGNAL => Self::InvalidSignal,
2861            ffi::GTK_BUILDER_ERROR_INVALID_ID => Self::InvalidId,
2862            ffi::GTK_BUILDER_ERROR_INVALID_FUNCTION => Self::InvalidFunction,
2863            value => Self::__Unknown(value),
2864        }
2865    }
2866}
2867
2868impl glib::error::ErrorDomain for BuilderError {
2869    #[inline]
2870    fn domain() -> glib::Quark {
2871        skip_assert_initialized!();
2872
2873        unsafe { from_glib(ffi::gtk_builder_error_quark()) }
2874    }
2875
2876    #[inline]
2877    fn code(self) -> i32 {
2878        self.into_glib()
2879    }
2880
2881    #[inline]
2882    #[allow(clippy::match_single_binding)]
2883    fn from(code: i32) -> Option<Self> {
2884        skip_assert_initialized!();
2885        match unsafe { from_glib(code) } {
2886            value => Some(value),
2887        }
2888    }
2889}
2890
2891impl StaticType for BuilderError {
2892    #[inline]
2893    #[doc(alias = "gtk_builder_error_get_type")]
2894    fn static_type() -> glib::Type {
2895        unsafe { from_glib(ffi::gtk_builder_error_get_type()) }
2896    }
2897}
2898
2899impl glib::HasParamSpec for BuilderError {
2900    type ParamSpec = glib::ParamSpecEnum;
2901    type SetValue = Self;
2902    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
2903
2904    fn param_spec_builder() -> Self::BuilderFn {
2905        Self::ParamSpec::builder_with_default
2906    }
2907}
2908
2909impl glib::value::ValueType for BuilderError {
2910    type Type = Self;
2911}
2912
2913unsafe impl<'a> glib::value::FromValue<'a> for BuilderError {
2914    type Checker = glib::value::GenericValueTypeChecker<Self>;
2915
2916    #[inline]
2917    unsafe fn from_value(value: &'a glib::Value) -> Self {
2918        skip_assert_initialized!();
2919        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
2920    }
2921}
2922
2923impl ToValue for BuilderError {
2924    #[inline]
2925    fn to_value(&self) -> glib::Value {
2926        let mut value = glib::Value::for_value_type::<Self>();
2927        unsafe {
2928            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
2929        }
2930        value
2931    }
2932
2933    #[inline]
2934    fn value_type(&self) -> glib::Type {
2935        Self::static_type()
2936    }
2937}
2938
2939impl From<BuilderError> for glib::Value {
2940    #[inline]
2941    fn from(v: BuilderError) -> Self {
2942        skip_assert_initialized!();
2943        ToValue::to_value(&v)
2944    }
2945}
2946
2947/// Prebuilt sets of buttons for [`Dialog`][crate::Dialog].
2948///
2949/// If none of these choices are appropriate, simply use
2950/// [`None`][Self::None] and call [`DialogExtManual::add_buttons()`][crate::prelude::DialogExtManual::add_buttons()].
2951///
2952/// > Please note that [`Ok`][Self::Ok], [`YesNo`][Self::YesNo]
2953/// > and [`OkCancel`][Self::OkCancel] are discouraged by the
2954/// > [GNOME Human Interface Guidelines](https://developer.gnome.org/hig/).
2955#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
2956#[non_exhaustive]
2957#[doc(alias = "GtkButtonsType")]
2958pub enum ButtonsType {
2959    /// no buttons at all
2960    #[doc(alias = "GTK_BUTTONS_NONE")]
2961    None,
2962    /// an OK button
2963    #[doc(alias = "GTK_BUTTONS_OK")]
2964    Ok,
2965    /// a Close button
2966    #[doc(alias = "GTK_BUTTONS_CLOSE")]
2967    Close,
2968    /// a Cancel button
2969    #[doc(alias = "GTK_BUTTONS_CANCEL")]
2970    Cancel,
2971    /// Yes and No buttons
2972    #[doc(alias = "GTK_BUTTONS_YES_NO")]
2973    YesNo,
2974    /// OK and Cancel buttons
2975    #[doc(alias = "GTK_BUTTONS_OK_CANCEL")]
2976    OkCancel,
2977    #[doc(hidden)]
2978    __Unknown(i32),
2979}
2980
2981#[doc(hidden)]
2982impl IntoGlib for ButtonsType {
2983    type GlibType = ffi::GtkButtonsType;
2984
2985    #[inline]
2986    fn into_glib(self) -> ffi::GtkButtonsType {
2987        match self {
2988            Self::None => ffi::GTK_BUTTONS_NONE,
2989            Self::Ok => ffi::GTK_BUTTONS_OK,
2990            Self::Close => ffi::GTK_BUTTONS_CLOSE,
2991            Self::Cancel => ffi::GTK_BUTTONS_CANCEL,
2992            Self::YesNo => ffi::GTK_BUTTONS_YES_NO,
2993            Self::OkCancel => ffi::GTK_BUTTONS_OK_CANCEL,
2994            Self::__Unknown(value) => value,
2995        }
2996    }
2997}
2998
2999#[doc(hidden)]
3000impl FromGlib<ffi::GtkButtonsType> for ButtonsType {
3001    #[inline]
3002    unsafe fn from_glib(value: ffi::GtkButtonsType) -> Self {
3003        skip_assert_initialized!();
3004
3005        match value {
3006            ffi::GTK_BUTTONS_NONE => Self::None,
3007            ffi::GTK_BUTTONS_OK => Self::Ok,
3008            ffi::GTK_BUTTONS_CLOSE => Self::Close,
3009            ffi::GTK_BUTTONS_CANCEL => Self::Cancel,
3010            ffi::GTK_BUTTONS_YES_NO => Self::YesNo,
3011            ffi::GTK_BUTTONS_OK_CANCEL => Self::OkCancel,
3012            value => Self::__Unknown(value),
3013        }
3014    }
3015}
3016
3017impl StaticType for ButtonsType {
3018    #[inline]
3019    #[doc(alias = "gtk_buttons_type_get_type")]
3020    fn static_type() -> glib::Type {
3021        unsafe { from_glib(ffi::gtk_buttons_type_get_type()) }
3022    }
3023}
3024
3025impl glib::HasParamSpec for ButtonsType {
3026    type ParamSpec = glib::ParamSpecEnum;
3027    type SetValue = Self;
3028    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3029
3030    fn param_spec_builder() -> Self::BuilderFn {
3031        Self::ParamSpec::builder_with_default
3032    }
3033}
3034
3035impl glib::value::ValueType for ButtonsType {
3036    type Type = Self;
3037}
3038
3039unsafe impl<'a> glib::value::FromValue<'a> for ButtonsType {
3040    type Checker = glib::value::GenericValueTypeChecker<Self>;
3041
3042    #[inline]
3043    unsafe fn from_value(value: &'a glib::Value) -> Self {
3044        skip_assert_initialized!();
3045        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3046    }
3047}
3048
3049impl ToValue for ButtonsType {
3050    #[inline]
3051    fn to_value(&self) -> glib::Value {
3052        let mut value = glib::Value::for_value_type::<Self>();
3053        unsafe {
3054            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3055        }
3056        value
3057    }
3058
3059    #[inline]
3060    fn value_type(&self) -> glib::Type {
3061        Self::static_type()
3062    }
3063}
3064
3065impl From<ButtonsType> for glib::Value {
3066    #[inline]
3067    fn from(v: ButtonsType) -> Self {
3068        skip_assert_initialized!();
3069        ToValue::to_value(&v)
3070    }
3071}
3072
3073/// The available modes for [`accel-mode`][struct@crate::CellRendererAccel#accel-mode].
3074///
3075/// # Deprecated since 4.20
3076///
3077/// There is no replacement
3078#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
3079#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3080#[non_exhaustive]
3081#[doc(alias = "GtkCellRendererAccelMode")]
3082pub enum CellRendererAccelMode {
3083    /// GTK accelerators mode
3084    #[doc(alias = "GTK_CELL_RENDERER_ACCEL_MODE_GTK")]
3085    Gtk,
3086    /// Other accelerator mode
3087    #[doc(alias = "GTK_CELL_RENDERER_ACCEL_MODE_OTHER")]
3088    Other,
3089    #[doc(hidden)]
3090    __Unknown(i32),
3091}
3092
3093#[allow(deprecated)]
3094#[doc(hidden)]
3095impl IntoGlib for CellRendererAccelMode {
3096    type GlibType = ffi::GtkCellRendererAccelMode;
3097
3098    #[inline]
3099    fn into_glib(self) -> ffi::GtkCellRendererAccelMode {
3100        match self {
3101            Self::Gtk => ffi::GTK_CELL_RENDERER_ACCEL_MODE_GTK,
3102            Self::Other => ffi::GTK_CELL_RENDERER_ACCEL_MODE_OTHER,
3103            Self::__Unknown(value) => value,
3104        }
3105    }
3106}
3107
3108#[allow(deprecated)]
3109#[doc(hidden)]
3110impl FromGlib<ffi::GtkCellRendererAccelMode> for CellRendererAccelMode {
3111    #[inline]
3112    unsafe fn from_glib(value: ffi::GtkCellRendererAccelMode) -> Self {
3113        skip_assert_initialized!();
3114
3115        match value {
3116            ffi::GTK_CELL_RENDERER_ACCEL_MODE_GTK => Self::Gtk,
3117            ffi::GTK_CELL_RENDERER_ACCEL_MODE_OTHER => Self::Other,
3118            value => Self::__Unknown(value),
3119        }
3120    }
3121}
3122
3123#[allow(deprecated)]
3124impl StaticType for CellRendererAccelMode {
3125    #[inline]
3126    #[doc(alias = "gtk_cell_renderer_accel_mode_get_type")]
3127    fn static_type() -> glib::Type {
3128        unsafe { from_glib(ffi::gtk_cell_renderer_accel_mode_get_type()) }
3129    }
3130}
3131
3132#[allow(deprecated)]
3133impl glib::HasParamSpec for CellRendererAccelMode {
3134    type ParamSpec = glib::ParamSpecEnum;
3135    type SetValue = Self;
3136    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3137
3138    fn param_spec_builder() -> Self::BuilderFn {
3139        Self::ParamSpec::builder_with_default
3140    }
3141}
3142
3143#[allow(deprecated)]
3144impl glib::value::ValueType for CellRendererAccelMode {
3145    type Type = Self;
3146}
3147
3148#[allow(deprecated)]
3149unsafe impl<'a> glib::value::FromValue<'a> for CellRendererAccelMode {
3150    type Checker = glib::value::GenericValueTypeChecker<Self>;
3151
3152    #[inline]
3153    unsafe fn from_value(value: &'a glib::Value) -> Self {
3154        skip_assert_initialized!();
3155        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3156    }
3157}
3158
3159#[allow(deprecated)]
3160impl ToValue for CellRendererAccelMode {
3161    #[inline]
3162    fn to_value(&self) -> glib::Value {
3163        let mut value = glib::Value::for_value_type::<Self>();
3164        unsafe {
3165            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3166        }
3167        value
3168    }
3169
3170    #[inline]
3171    fn value_type(&self) -> glib::Type {
3172        Self::static_type()
3173    }
3174}
3175
3176#[allow(deprecated)]
3177impl From<CellRendererAccelMode> for glib::Value {
3178    #[inline]
3179    fn from(v: CellRendererAccelMode) -> Self {
3180        skip_assert_initialized!();
3181        ToValue::to_value(&v)
3182    }
3183}
3184
3185/// Identifies how the user can interact with a particular cell.
3186///
3187/// # Deprecated since 4.20
3188///
3189/// There is no replacement.
3190#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
3191#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3192#[non_exhaustive]
3193#[doc(alias = "GtkCellRendererMode")]
3194pub enum CellRendererMode {
3195    /// The cell is just for display
3196    ///  and cannot be interacted with.  Note that this doesn’t mean that eg. the
3197    ///  row being drawn can’t be selected -- just that a particular element of
3198    ///  it cannot be individually modified.
3199    #[doc(alias = "GTK_CELL_RENDERER_MODE_INERT")]
3200    Inert,
3201    /// The cell can be clicked.
3202    #[doc(alias = "GTK_CELL_RENDERER_MODE_ACTIVATABLE")]
3203    Activatable,
3204    /// The cell can be edited or otherwise modified.
3205    #[doc(alias = "GTK_CELL_RENDERER_MODE_EDITABLE")]
3206    Editable,
3207    #[doc(hidden)]
3208    __Unknown(i32),
3209}
3210
3211#[allow(deprecated)]
3212#[doc(hidden)]
3213impl IntoGlib for CellRendererMode {
3214    type GlibType = ffi::GtkCellRendererMode;
3215
3216    #[inline]
3217    fn into_glib(self) -> ffi::GtkCellRendererMode {
3218        match self {
3219            Self::Inert => ffi::GTK_CELL_RENDERER_MODE_INERT,
3220            Self::Activatable => ffi::GTK_CELL_RENDERER_MODE_ACTIVATABLE,
3221            Self::Editable => ffi::GTK_CELL_RENDERER_MODE_EDITABLE,
3222            Self::__Unknown(value) => value,
3223        }
3224    }
3225}
3226
3227#[allow(deprecated)]
3228#[doc(hidden)]
3229impl FromGlib<ffi::GtkCellRendererMode> for CellRendererMode {
3230    #[inline]
3231    unsafe fn from_glib(value: ffi::GtkCellRendererMode) -> Self {
3232        skip_assert_initialized!();
3233
3234        match value {
3235            ffi::GTK_CELL_RENDERER_MODE_INERT => Self::Inert,
3236            ffi::GTK_CELL_RENDERER_MODE_ACTIVATABLE => Self::Activatable,
3237            ffi::GTK_CELL_RENDERER_MODE_EDITABLE => Self::Editable,
3238            value => Self::__Unknown(value),
3239        }
3240    }
3241}
3242
3243#[allow(deprecated)]
3244impl StaticType for CellRendererMode {
3245    #[inline]
3246    #[doc(alias = "gtk_cell_renderer_mode_get_type")]
3247    fn static_type() -> glib::Type {
3248        unsafe { from_glib(ffi::gtk_cell_renderer_mode_get_type()) }
3249    }
3250}
3251
3252#[allow(deprecated)]
3253impl glib::HasParamSpec for CellRendererMode {
3254    type ParamSpec = glib::ParamSpecEnum;
3255    type SetValue = Self;
3256    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3257
3258    fn param_spec_builder() -> Self::BuilderFn {
3259        Self::ParamSpec::builder_with_default
3260    }
3261}
3262
3263#[allow(deprecated)]
3264impl glib::value::ValueType for CellRendererMode {
3265    type Type = Self;
3266}
3267
3268#[allow(deprecated)]
3269unsafe impl<'a> glib::value::FromValue<'a> for CellRendererMode {
3270    type Checker = glib::value::GenericValueTypeChecker<Self>;
3271
3272    #[inline]
3273    unsafe fn from_value(value: &'a glib::Value) -> Self {
3274        skip_assert_initialized!();
3275        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3276    }
3277}
3278
3279#[allow(deprecated)]
3280impl ToValue for CellRendererMode {
3281    #[inline]
3282    fn to_value(&self) -> glib::Value {
3283        let mut value = glib::Value::for_value_type::<Self>();
3284        unsafe {
3285            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3286        }
3287        value
3288    }
3289
3290    #[inline]
3291    fn value_type(&self) -> glib::Type {
3292        Self::static_type()
3293    }
3294}
3295
3296#[allow(deprecated)]
3297impl From<CellRendererMode> for glib::Value {
3298    #[inline]
3299    fn from(v: CellRendererMode) -> Self {
3300        skip_assert_initialized!();
3301        ToValue::to_value(&v)
3302    }
3303}
3304
3305/// Describes how a [`StringSorter`][crate::StringSorter] turns strings into sort keys to
3306/// compare them.
3307///
3308/// Note that the result of sorting will in general depend on the current locale
3309/// unless the mode is @GTK_COLLATION_NONE.
3310#[cfg(feature = "v4_10")]
3311#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3312#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3313#[non_exhaustive]
3314#[doc(alias = "GtkCollation")]
3315pub enum Collation {
3316    /// Don't do any collation
3317    #[doc(alias = "GTK_COLLATION_NONE")]
3318    None,
3319    /// Use `utf8_collate_key()`
3320    #[doc(alias = "GTK_COLLATION_UNICODE")]
3321    Unicode,
3322    /// Use `utf8_collate_key_for_filename()`
3323    #[doc(alias = "GTK_COLLATION_FILENAME")]
3324    Filename,
3325    #[doc(hidden)]
3326    __Unknown(i32),
3327}
3328
3329#[cfg(feature = "v4_10")]
3330#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3331#[doc(hidden)]
3332impl IntoGlib for Collation {
3333    type GlibType = ffi::GtkCollation;
3334
3335    #[inline]
3336    fn into_glib(self) -> ffi::GtkCollation {
3337        match self {
3338            Self::None => ffi::GTK_COLLATION_NONE,
3339            Self::Unicode => ffi::GTK_COLLATION_UNICODE,
3340            Self::Filename => ffi::GTK_COLLATION_FILENAME,
3341            Self::__Unknown(value) => value,
3342        }
3343    }
3344}
3345
3346#[cfg(feature = "v4_10")]
3347#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3348#[doc(hidden)]
3349impl FromGlib<ffi::GtkCollation> for Collation {
3350    #[inline]
3351    unsafe fn from_glib(value: ffi::GtkCollation) -> Self {
3352        skip_assert_initialized!();
3353
3354        match value {
3355            ffi::GTK_COLLATION_NONE => Self::None,
3356            ffi::GTK_COLLATION_UNICODE => Self::Unicode,
3357            ffi::GTK_COLLATION_FILENAME => Self::Filename,
3358            value => Self::__Unknown(value),
3359        }
3360    }
3361}
3362
3363#[cfg(feature = "v4_10")]
3364#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3365impl StaticType for Collation {
3366    #[inline]
3367    #[doc(alias = "gtk_collation_get_type")]
3368    fn static_type() -> glib::Type {
3369        unsafe { from_glib(ffi::gtk_collation_get_type()) }
3370    }
3371}
3372
3373#[cfg(feature = "v4_10")]
3374#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3375impl glib::HasParamSpec for Collation {
3376    type ParamSpec = glib::ParamSpecEnum;
3377    type SetValue = Self;
3378    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3379
3380    fn param_spec_builder() -> Self::BuilderFn {
3381        Self::ParamSpec::builder_with_default
3382    }
3383}
3384
3385#[cfg(feature = "v4_10")]
3386#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3387impl glib::value::ValueType for Collation {
3388    type Type = Self;
3389}
3390
3391#[cfg(feature = "v4_10")]
3392#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3393unsafe impl<'a> glib::value::FromValue<'a> for Collation {
3394    type Checker = glib::value::GenericValueTypeChecker<Self>;
3395
3396    #[inline]
3397    unsafe fn from_value(value: &'a glib::Value) -> Self {
3398        skip_assert_initialized!();
3399        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3400    }
3401}
3402
3403#[cfg(feature = "v4_10")]
3404#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3405impl ToValue for Collation {
3406    #[inline]
3407    fn to_value(&self) -> glib::Value {
3408        let mut value = glib::Value::for_value_type::<Self>();
3409        unsafe {
3410            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3411        }
3412        value
3413    }
3414
3415    #[inline]
3416    fn value_type(&self) -> glib::Type {
3417        Self::static_type()
3418    }
3419}
3420
3421#[cfg(feature = "v4_10")]
3422#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
3423impl From<Collation> for glib::Value {
3424    #[inline]
3425    fn from(v: Collation) -> Self {
3426        skip_assert_initialized!();
3427        ToValue::to_value(&v)
3428    }
3429}
3430
3431/// The widget attributes that can be used when creating a [`Constraint`][crate::Constraint].
3432#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3433#[non_exhaustive]
3434#[doc(alias = "GtkConstraintAttribute")]
3435pub enum ConstraintAttribute {
3436    /// No attribute, used for constant
3437    ///   relations
3438    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_NONE")]
3439    None,
3440    /// The left edge of a widget, regardless of
3441    ///   text direction
3442    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_LEFT")]
3443    Left,
3444    /// The right edge of a widget, regardless
3445    ///   of text direction
3446    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_RIGHT")]
3447    Right,
3448    /// The top edge of a widget
3449    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_TOP")]
3450    Top,
3451    /// The bottom edge of a widget
3452    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_BOTTOM")]
3453    Bottom,
3454    /// The leading edge of a widget, depending
3455    ///   on text direction; equivalent to [`Left`][Self::Left] for LTR
3456    ///   languages, and [`Right`][Self::Right] for RTL ones
3457    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_START")]
3458    Start,
3459    /// The trailing edge of a widget, depending
3460    ///   on text direction; equivalent to [`Right`][Self::Right] for LTR
3461    ///   languages, and [`Left`][Self::Left] for RTL ones
3462    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_END")]
3463    End,
3464    /// The width of a widget
3465    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_WIDTH")]
3466    Width,
3467    /// The height of a widget
3468    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_HEIGHT")]
3469    Height,
3470    /// The center of a widget, on the
3471    ///   horizontal axis
3472    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_CENTER_X")]
3473    CenterX,
3474    /// The center of a widget, on the
3475    ///   vertical axis
3476    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_CENTER_Y")]
3477    CenterY,
3478    /// The baseline of a widget
3479    #[doc(alias = "GTK_CONSTRAINT_ATTRIBUTE_BASELINE")]
3480    Baseline,
3481    #[doc(hidden)]
3482    __Unknown(i32),
3483}
3484
3485#[doc(hidden)]
3486impl IntoGlib for ConstraintAttribute {
3487    type GlibType = ffi::GtkConstraintAttribute;
3488
3489    #[inline]
3490    fn into_glib(self) -> ffi::GtkConstraintAttribute {
3491        match self {
3492            Self::None => ffi::GTK_CONSTRAINT_ATTRIBUTE_NONE,
3493            Self::Left => ffi::GTK_CONSTRAINT_ATTRIBUTE_LEFT,
3494            Self::Right => ffi::GTK_CONSTRAINT_ATTRIBUTE_RIGHT,
3495            Self::Top => ffi::GTK_CONSTRAINT_ATTRIBUTE_TOP,
3496            Self::Bottom => ffi::GTK_CONSTRAINT_ATTRIBUTE_BOTTOM,
3497            Self::Start => ffi::GTK_CONSTRAINT_ATTRIBUTE_START,
3498            Self::End => ffi::GTK_CONSTRAINT_ATTRIBUTE_END,
3499            Self::Width => ffi::GTK_CONSTRAINT_ATTRIBUTE_WIDTH,
3500            Self::Height => ffi::GTK_CONSTRAINT_ATTRIBUTE_HEIGHT,
3501            Self::CenterX => ffi::GTK_CONSTRAINT_ATTRIBUTE_CENTER_X,
3502            Self::CenterY => ffi::GTK_CONSTRAINT_ATTRIBUTE_CENTER_Y,
3503            Self::Baseline => ffi::GTK_CONSTRAINT_ATTRIBUTE_BASELINE,
3504            Self::__Unknown(value) => value,
3505        }
3506    }
3507}
3508
3509#[doc(hidden)]
3510impl FromGlib<ffi::GtkConstraintAttribute> for ConstraintAttribute {
3511    #[inline]
3512    unsafe fn from_glib(value: ffi::GtkConstraintAttribute) -> Self {
3513        skip_assert_initialized!();
3514
3515        match value {
3516            ffi::GTK_CONSTRAINT_ATTRIBUTE_NONE => Self::None,
3517            ffi::GTK_CONSTRAINT_ATTRIBUTE_LEFT => Self::Left,
3518            ffi::GTK_CONSTRAINT_ATTRIBUTE_RIGHT => Self::Right,
3519            ffi::GTK_CONSTRAINT_ATTRIBUTE_TOP => Self::Top,
3520            ffi::GTK_CONSTRAINT_ATTRIBUTE_BOTTOM => Self::Bottom,
3521            ffi::GTK_CONSTRAINT_ATTRIBUTE_START => Self::Start,
3522            ffi::GTK_CONSTRAINT_ATTRIBUTE_END => Self::End,
3523            ffi::GTK_CONSTRAINT_ATTRIBUTE_WIDTH => Self::Width,
3524            ffi::GTK_CONSTRAINT_ATTRIBUTE_HEIGHT => Self::Height,
3525            ffi::GTK_CONSTRAINT_ATTRIBUTE_CENTER_X => Self::CenterX,
3526            ffi::GTK_CONSTRAINT_ATTRIBUTE_CENTER_Y => Self::CenterY,
3527            ffi::GTK_CONSTRAINT_ATTRIBUTE_BASELINE => Self::Baseline,
3528            value => Self::__Unknown(value),
3529        }
3530    }
3531}
3532
3533impl StaticType for ConstraintAttribute {
3534    #[inline]
3535    #[doc(alias = "gtk_constraint_attribute_get_type")]
3536    fn static_type() -> glib::Type {
3537        unsafe { from_glib(ffi::gtk_constraint_attribute_get_type()) }
3538    }
3539}
3540
3541impl glib::HasParamSpec for ConstraintAttribute {
3542    type ParamSpec = glib::ParamSpecEnum;
3543    type SetValue = Self;
3544    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3545
3546    fn param_spec_builder() -> Self::BuilderFn {
3547        Self::ParamSpec::builder_with_default
3548    }
3549}
3550
3551impl glib::value::ValueType for ConstraintAttribute {
3552    type Type = Self;
3553}
3554
3555unsafe impl<'a> glib::value::FromValue<'a> for ConstraintAttribute {
3556    type Checker = glib::value::GenericValueTypeChecker<Self>;
3557
3558    #[inline]
3559    unsafe fn from_value(value: &'a glib::Value) -> Self {
3560        skip_assert_initialized!();
3561        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3562    }
3563}
3564
3565impl ToValue for ConstraintAttribute {
3566    #[inline]
3567    fn to_value(&self) -> glib::Value {
3568        let mut value = glib::Value::for_value_type::<Self>();
3569        unsafe {
3570            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3571        }
3572        value
3573    }
3574
3575    #[inline]
3576    fn value_type(&self) -> glib::Type {
3577        Self::static_type()
3578    }
3579}
3580
3581impl From<ConstraintAttribute> for glib::Value {
3582    #[inline]
3583    fn from(v: ConstraintAttribute) -> Self {
3584        skip_assert_initialized!();
3585        ToValue::to_value(&v)
3586    }
3587}
3588
3589/// The relation between two terms of a constraint.
3590#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3591#[non_exhaustive]
3592#[doc(alias = "GtkConstraintRelation")]
3593pub enum ConstraintRelation {
3594    /// Less than, or equal
3595    #[doc(alias = "GTK_CONSTRAINT_RELATION_LE")]
3596    Le,
3597    /// Equal
3598    #[doc(alias = "GTK_CONSTRAINT_RELATION_EQ")]
3599    Eq,
3600    /// Greater than, or equal
3601    #[doc(alias = "GTK_CONSTRAINT_RELATION_GE")]
3602    Ge,
3603    #[doc(hidden)]
3604    __Unknown(i32),
3605}
3606
3607#[doc(hidden)]
3608impl IntoGlib for ConstraintRelation {
3609    type GlibType = ffi::GtkConstraintRelation;
3610
3611    #[inline]
3612    fn into_glib(self) -> ffi::GtkConstraintRelation {
3613        match self {
3614            Self::Le => ffi::GTK_CONSTRAINT_RELATION_LE,
3615            Self::Eq => ffi::GTK_CONSTRAINT_RELATION_EQ,
3616            Self::Ge => ffi::GTK_CONSTRAINT_RELATION_GE,
3617            Self::__Unknown(value) => value,
3618        }
3619    }
3620}
3621
3622#[doc(hidden)]
3623impl FromGlib<ffi::GtkConstraintRelation> for ConstraintRelation {
3624    #[inline]
3625    unsafe fn from_glib(value: ffi::GtkConstraintRelation) -> Self {
3626        skip_assert_initialized!();
3627
3628        match value {
3629            ffi::GTK_CONSTRAINT_RELATION_LE => Self::Le,
3630            ffi::GTK_CONSTRAINT_RELATION_EQ => Self::Eq,
3631            ffi::GTK_CONSTRAINT_RELATION_GE => Self::Ge,
3632            value => Self::__Unknown(value),
3633        }
3634    }
3635}
3636
3637impl StaticType for ConstraintRelation {
3638    #[inline]
3639    #[doc(alias = "gtk_constraint_relation_get_type")]
3640    fn static_type() -> glib::Type {
3641        unsafe { from_glib(ffi::gtk_constraint_relation_get_type()) }
3642    }
3643}
3644
3645impl glib::HasParamSpec for ConstraintRelation {
3646    type ParamSpec = glib::ParamSpecEnum;
3647    type SetValue = Self;
3648    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3649
3650    fn param_spec_builder() -> Self::BuilderFn {
3651        Self::ParamSpec::builder_with_default
3652    }
3653}
3654
3655impl glib::value::ValueType for ConstraintRelation {
3656    type Type = Self;
3657}
3658
3659unsafe impl<'a> glib::value::FromValue<'a> for ConstraintRelation {
3660    type Checker = glib::value::GenericValueTypeChecker<Self>;
3661
3662    #[inline]
3663    unsafe fn from_value(value: &'a glib::Value) -> Self {
3664        skip_assert_initialized!();
3665        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3666    }
3667}
3668
3669impl ToValue for ConstraintRelation {
3670    #[inline]
3671    fn to_value(&self) -> glib::Value {
3672        let mut value = glib::Value::for_value_type::<Self>();
3673        unsafe {
3674            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3675        }
3676        value
3677    }
3678
3679    #[inline]
3680    fn value_type(&self) -> glib::Type {
3681        Self::static_type()
3682    }
3683}
3684
3685impl From<ConstraintRelation> for glib::Value {
3686    #[inline]
3687    fn from(v: ConstraintRelation) -> Self {
3688        skip_assert_initialized!();
3689        ToValue::to_value(&v)
3690    }
3691}
3692
3693/// The strength of a constraint, expressed as a symbolic constant.
3694///
3695/// The strength of a [`Constraint`][crate::Constraint] can be expressed with any positive
3696/// integer; the values of this enumeration can be used for readability.
3697#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3698#[non_exhaustive]
3699#[doc(alias = "GtkConstraintStrength")]
3700pub enum ConstraintStrength {
3701    /// The constraint is required towards solving the layout
3702    #[doc(alias = "GTK_CONSTRAINT_STRENGTH_REQUIRED")]
3703    Required,
3704    /// A strong constraint
3705    #[doc(alias = "GTK_CONSTRAINT_STRENGTH_STRONG")]
3706    Strong,
3707    /// A medium constraint
3708    #[doc(alias = "GTK_CONSTRAINT_STRENGTH_MEDIUM")]
3709    Medium,
3710    /// A weak constraint
3711    #[doc(alias = "GTK_CONSTRAINT_STRENGTH_WEAK")]
3712    Weak,
3713    #[doc(hidden)]
3714    __Unknown(i32),
3715}
3716
3717#[doc(hidden)]
3718impl IntoGlib for ConstraintStrength {
3719    type GlibType = ffi::GtkConstraintStrength;
3720
3721    #[inline]
3722    fn into_glib(self) -> ffi::GtkConstraintStrength {
3723        match self {
3724            Self::Required => ffi::GTK_CONSTRAINT_STRENGTH_REQUIRED,
3725            Self::Strong => ffi::GTK_CONSTRAINT_STRENGTH_STRONG,
3726            Self::Medium => ffi::GTK_CONSTRAINT_STRENGTH_MEDIUM,
3727            Self::Weak => ffi::GTK_CONSTRAINT_STRENGTH_WEAK,
3728            Self::__Unknown(value) => value,
3729        }
3730    }
3731}
3732
3733#[doc(hidden)]
3734impl FromGlib<ffi::GtkConstraintStrength> for ConstraintStrength {
3735    #[inline]
3736    unsafe fn from_glib(value: ffi::GtkConstraintStrength) -> Self {
3737        skip_assert_initialized!();
3738
3739        match value {
3740            ffi::GTK_CONSTRAINT_STRENGTH_REQUIRED => Self::Required,
3741            ffi::GTK_CONSTRAINT_STRENGTH_STRONG => Self::Strong,
3742            ffi::GTK_CONSTRAINT_STRENGTH_MEDIUM => Self::Medium,
3743            ffi::GTK_CONSTRAINT_STRENGTH_WEAK => Self::Weak,
3744            value => Self::__Unknown(value),
3745        }
3746    }
3747}
3748
3749impl StaticType for ConstraintStrength {
3750    #[inline]
3751    #[doc(alias = "gtk_constraint_strength_get_type")]
3752    fn static_type() -> glib::Type {
3753        unsafe { from_glib(ffi::gtk_constraint_strength_get_type()) }
3754    }
3755}
3756
3757impl glib::HasParamSpec for ConstraintStrength {
3758    type ParamSpec = glib::ParamSpecEnum;
3759    type SetValue = Self;
3760    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3761
3762    fn param_spec_builder() -> Self::BuilderFn {
3763        Self::ParamSpec::builder_with_default
3764    }
3765}
3766
3767impl glib::value::ValueType for ConstraintStrength {
3768    type Type = Self;
3769}
3770
3771unsafe impl<'a> glib::value::FromValue<'a> for ConstraintStrength {
3772    type Checker = glib::value::GenericValueTypeChecker<Self>;
3773
3774    #[inline]
3775    unsafe fn from_value(value: &'a glib::Value) -> Self {
3776        skip_assert_initialized!();
3777        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3778    }
3779}
3780
3781impl ToValue for ConstraintStrength {
3782    #[inline]
3783    fn to_value(&self) -> glib::Value {
3784        let mut value = glib::Value::for_value_type::<Self>();
3785        unsafe {
3786            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3787        }
3788        value
3789    }
3790
3791    #[inline]
3792    fn value_type(&self) -> glib::Type {
3793        Self::static_type()
3794    }
3795}
3796
3797impl From<ConstraintStrength> for glib::Value {
3798    #[inline]
3799    fn from(v: ConstraintStrength) -> Self {
3800        skip_assert_initialized!();
3801        ToValue::to_value(&v)
3802    }
3803}
3804
3805/// Domain for VFL parsing errors.
3806#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3807#[non_exhaustive]
3808#[doc(alias = "GtkConstraintVflParserError")]
3809pub enum ConstraintVflParserError {
3810    /// Invalid or unknown symbol
3811    #[doc(alias = "GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_SYMBOL")]
3812    InvalidSymbol,
3813    /// Invalid or unknown attribute
3814    #[doc(alias = "GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_ATTRIBUTE")]
3815    InvalidAttribute,
3816    /// Invalid or unknown view
3817    #[doc(alias = "GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_VIEW")]
3818    InvalidView,
3819    /// Invalid or unknown metric
3820    #[doc(alias = "GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_METRIC")]
3821    InvalidMetric,
3822    /// Invalid or unknown priority
3823    #[doc(alias = "GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_PRIORITY")]
3824    InvalidPriority,
3825    /// Invalid or unknown relation
3826    #[doc(alias = "GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_RELATION")]
3827    InvalidRelation,
3828    #[doc(hidden)]
3829    __Unknown(i32),
3830}
3831
3832#[doc(hidden)]
3833impl IntoGlib for ConstraintVflParserError {
3834    type GlibType = ffi::GtkConstraintVflParserError;
3835
3836    #[inline]
3837    fn into_glib(self) -> ffi::GtkConstraintVflParserError {
3838        match self {
3839            Self::InvalidSymbol => ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_SYMBOL,
3840            Self::InvalidAttribute => ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_ATTRIBUTE,
3841            Self::InvalidView => ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_VIEW,
3842            Self::InvalidMetric => ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_METRIC,
3843            Self::InvalidPriority => ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_PRIORITY,
3844            Self::InvalidRelation => ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_RELATION,
3845            Self::__Unknown(value) => value,
3846        }
3847    }
3848}
3849
3850#[doc(hidden)]
3851impl FromGlib<ffi::GtkConstraintVflParserError> for ConstraintVflParserError {
3852    #[inline]
3853    unsafe fn from_glib(value: ffi::GtkConstraintVflParserError) -> Self {
3854        skip_assert_initialized!();
3855
3856        match value {
3857            ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_SYMBOL => Self::InvalidSymbol,
3858            ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_ATTRIBUTE => Self::InvalidAttribute,
3859            ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_VIEW => Self::InvalidView,
3860            ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_METRIC => Self::InvalidMetric,
3861            ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_PRIORITY => Self::InvalidPriority,
3862            ffi::GTK_CONSTRAINT_VFL_PARSER_ERROR_INVALID_RELATION => Self::InvalidRelation,
3863            value => Self::__Unknown(value),
3864        }
3865    }
3866}
3867
3868impl glib::error::ErrorDomain for ConstraintVflParserError {
3869    #[inline]
3870    fn domain() -> glib::Quark {
3871        skip_assert_initialized!();
3872
3873        unsafe { from_glib(ffi::gtk_constraint_vfl_parser_error_quark()) }
3874    }
3875
3876    #[inline]
3877    fn code(self) -> i32 {
3878        self.into_glib()
3879    }
3880
3881    #[inline]
3882    #[allow(clippy::match_single_binding)]
3883    fn from(code: i32) -> Option<Self> {
3884        skip_assert_initialized!();
3885        match unsafe { from_glib(code) } {
3886            value => Some(value),
3887        }
3888    }
3889}
3890
3891impl StaticType for ConstraintVflParserError {
3892    #[inline]
3893    #[doc(alias = "gtk_constraint_vfl_parser_error_get_type")]
3894    fn static_type() -> glib::Type {
3895        unsafe { from_glib(ffi::gtk_constraint_vfl_parser_error_get_type()) }
3896    }
3897}
3898
3899impl glib::HasParamSpec for ConstraintVflParserError {
3900    type ParamSpec = glib::ParamSpecEnum;
3901    type SetValue = Self;
3902    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
3903
3904    fn param_spec_builder() -> Self::BuilderFn {
3905        Self::ParamSpec::builder_with_default
3906    }
3907}
3908
3909impl glib::value::ValueType for ConstraintVflParserError {
3910    type Type = Self;
3911}
3912
3913unsafe impl<'a> glib::value::FromValue<'a> for ConstraintVflParserError {
3914    type Checker = glib::value::GenericValueTypeChecker<Self>;
3915
3916    #[inline]
3917    unsafe fn from_value(value: &'a glib::Value) -> Self {
3918        skip_assert_initialized!();
3919        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
3920    }
3921}
3922
3923impl ToValue for ConstraintVflParserError {
3924    #[inline]
3925    fn to_value(&self) -> glib::Value {
3926        let mut value = glib::Value::for_value_type::<Self>();
3927        unsafe {
3928            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
3929        }
3930        value
3931    }
3932
3933    #[inline]
3934    fn value_type(&self) -> glib::Type {
3935        Self::static_type()
3936    }
3937}
3938
3939impl From<ConstraintVflParserError> for glib::Value {
3940    #[inline]
3941    fn from(v: ConstraintVflParserError) -> Self {
3942        skip_assert_initialized!();
3943        ToValue::to_value(&v)
3944    }
3945}
3946
3947/// Controls how a content should be made to fit inside an allocation.
3948#[cfg(feature = "v4_8")]
3949#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
3950#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
3951#[non_exhaustive]
3952#[doc(alias = "GtkContentFit")]
3953pub enum ContentFit {
3954    /// Make the content fill the entire allocation,
3955    ///   without taking its aspect ratio in consideration. The resulting
3956    ///   content will appear as stretched if its aspect ratio is different
3957    ///   from the allocation aspect ratio.
3958    #[doc(alias = "GTK_CONTENT_FIT_FILL")]
3959    Fill,
3960    /// Scale the content to fit the allocation,
3961    ///   while taking its aspect ratio in consideration. The resulting
3962    ///   content will appear as letterboxed if its aspect ratio is different
3963    ///   from the allocation aspect ratio.
3964    #[doc(alias = "GTK_CONTENT_FIT_CONTAIN")]
3965    Contain,
3966    /// Cover the entire allocation, while taking
3967    ///   the content aspect ratio in consideration. The resulting content
3968    ///   will appear as clipped if its aspect ratio is different from the
3969    ///   allocation aspect ratio.
3970    #[doc(alias = "GTK_CONTENT_FIT_COVER")]
3971    Cover,
3972    /// The content is scaled down to fit the
3973    ///   allocation, if needed, otherwise its original size is used.
3974    #[doc(alias = "GTK_CONTENT_FIT_SCALE_DOWN")]
3975    ScaleDown,
3976    #[doc(hidden)]
3977    __Unknown(i32),
3978}
3979
3980#[cfg(feature = "v4_8")]
3981#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
3982#[doc(hidden)]
3983impl IntoGlib for ContentFit {
3984    type GlibType = ffi::GtkContentFit;
3985
3986    #[inline]
3987    fn into_glib(self) -> ffi::GtkContentFit {
3988        match self {
3989            Self::Fill => ffi::GTK_CONTENT_FIT_FILL,
3990            Self::Contain => ffi::GTK_CONTENT_FIT_CONTAIN,
3991            Self::Cover => ffi::GTK_CONTENT_FIT_COVER,
3992            Self::ScaleDown => ffi::GTK_CONTENT_FIT_SCALE_DOWN,
3993            Self::__Unknown(value) => value,
3994        }
3995    }
3996}
3997
3998#[cfg(feature = "v4_8")]
3999#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4000#[doc(hidden)]
4001impl FromGlib<ffi::GtkContentFit> for ContentFit {
4002    #[inline]
4003    unsafe fn from_glib(value: ffi::GtkContentFit) -> Self {
4004        skip_assert_initialized!();
4005
4006        match value {
4007            ffi::GTK_CONTENT_FIT_FILL => Self::Fill,
4008            ffi::GTK_CONTENT_FIT_CONTAIN => Self::Contain,
4009            ffi::GTK_CONTENT_FIT_COVER => Self::Cover,
4010            ffi::GTK_CONTENT_FIT_SCALE_DOWN => Self::ScaleDown,
4011            value => Self::__Unknown(value),
4012        }
4013    }
4014}
4015
4016#[cfg(feature = "v4_8")]
4017#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4018impl StaticType for ContentFit {
4019    #[inline]
4020    #[doc(alias = "gtk_content_fit_get_type")]
4021    fn static_type() -> glib::Type {
4022        unsafe { from_glib(ffi::gtk_content_fit_get_type()) }
4023    }
4024}
4025
4026#[cfg(feature = "v4_8")]
4027#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4028impl glib::HasParamSpec for ContentFit {
4029    type ParamSpec = glib::ParamSpecEnum;
4030    type SetValue = Self;
4031    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4032
4033    fn param_spec_builder() -> Self::BuilderFn {
4034        Self::ParamSpec::builder_with_default
4035    }
4036}
4037
4038#[cfg(feature = "v4_8")]
4039#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4040impl glib::value::ValueType for ContentFit {
4041    type Type = Self;
4042}
4043
4044#[cfg(feature = "v4_8")]
4045#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4046unsafe impl<'a> glib::value::FromValue<'a> for ContentFit {
4047    type Checker = glib::value::GenericValueTypeChecker<Self>;
4048
4049    #[inline]
4050    unsafe fn from_value(value: &'a glib::Value) -> Self {
4051        skip_assert_initialized!();
4052        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4053    }
4054}
4055
4056#[cfg(feature = "v4_8")]
4057#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4058impl ToValue for ContentFit {
4059    #[inline]
4060    fn to_value(&self) -> glib::Value {
4061        let mut value = glib::Value::for_value_type::<Self>();
4062        unsafe {
4063            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4064        }
4065        value
4066    }
4067
4068    #[inline]
4069    fn value_type(&self) -> glib::Type {
4070        Self::static_type()
4071    }
4072}
4073
4074#[cfg(feature = "v4_8")]
4075#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
4076impl From<ContentFit> for glib::Value {
4077    #[inline]
4078    fn from(v: ContentFit) -> Self {
4079        skip_assert_initialized!();
4080        ToValue::to_value(&v)
4081    }
4082}
4083
4084/// Specifies which corner a child widget should be placed in when packed into
4085/// a [`ScrolledWindow`][crate::ScrolledWindow]
4086///
4087/// This is effectively the opposite of where the scroll bars are placed.
4088#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4089#[non_exhaustive]
4090#[doc(alias = "GtkCornerType")]
4091pub enum CornerType {
4092    /// Place the scrollbars on the right and bottom of the
4093    ///   widget (default behaviour).
4094    #[doc(alias = "GTK_CORNER_TOP_LEFT")]
4095    TopLeft,
4096    /// Place the scrollbars on the top and right of the
4097    ///   widget.
4098    #[doc(alias = "GTK_CORNER_BOTTOM_LEFT")]
4099    BottomLeft,
4100    /// Place the scrollbars on the left and bottom of the
4101    ///   widget.
4102    #[doc(alias = "GTK_CORNER_TOP_RIGHT")]
4103    TopRight,
4104    /// Place the scrollbars on the top and left of the
4105    ///   widget.
4106    #[doc(alias = "GTK_CORNER_BOTTOM_RIGHT")]
4107    BottomRight,
4108    #[doc(hidden)]
4109    __Unknown(i32),
4110}
4111
4112#[doc(hidden)]
4113impl IntoGlib for CornerType {
4114    type GlibType = ffi::GtkCornerType;
4115
4116    #[inline]
4117    fn into_glib(self) -> ffi::GtkCornerType {
4118        match self {
4119            Self::TopLeft => ffi::GTK_CORNER_TOP_LEFT,
4120            Self::BottomLeft => ffi::GTK_CORNER_BOTTOM_LEFT,
4121            Self::TopRight => ffi::GTK_CORNER_TOP_RIGHT,
4122            Self::BottomRight => ffi::GTK_CORNER_BOTTOM_RIGHT,
4123            Self::__Unknown(value) => value,
4124        }
4125    }
4126}
4127
4128#[doc(hidden)]
4129impl FromGlib<ffi::GtkCornerType> for CornerType {
4130    #[inline]
4131    unsafe fn from_glib(value: ffi::GtkCornerType) -> Self {
4132        skip_assert_initialized!();
4133
4134        match value {
4135            ffi::GTK_CORNER_TOP_LEFT => Self::TopLeft,
4136            ffi::GTK_CORNER_BOTTOM_LEFT => Self::BottomLeft,
4137            ffi::GTK_CORNER_TOP_RIGHT => Self::TopRight,
4138            ffi::GTK_CORNER_BOTTOM_RIGHT => Self::BottomRight,
4139            value => Self::__Unknown(value),
4140        }
4141    }
4142}
4143
4144impl StaticType for CornerType {
4145    #[inline]
4146    #[doc(alias = "gtk_corner_type_get_type")]
4147    fn static_type() -> glib::Type {
4148        unsafe { from_glib(ffi::gtk_corner_type_get_type()) }
4149    }
4150}
4151
4152impl glib::HasParamSpec for CornerType {
4153    type ParamSpec = glib::ParamSpecEnum;
4154    type SetValue = Self;
4155    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4156
4157    fn param_spec_builder() -> Self::BuilderFn {
4158        Self::ParamSpec::builder_with_default
4159    }
4160}
4161
4162impl glib::value::ValueType for CornerType {
4163    type Type = Self;
4164}
4165
4166unsafe impl<'a> glib::value::FromValue<'a> for CornerType {
4167    type Checker = glib::value::GenericValueTypeChecker<Self>;
4168
4169    #[inline]
4170    unsafe fn from_value(value: &'a glib::Value) -> Self {
4171        skip_assert_initialized!();
4172        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4173    }
4174}
4175
4176impl ToValue for CornerType {
4177    #[inline]
4178    fn to_value(&self) -> glib::Value {
4179        let mut value = glib::Value::for_value_type::<Self>();
4180        unsafe {
4181            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4182        }
4183        value
4184    }
4185
4186    #[inline]
4187    fn value_type(&self) -> glib::Type {
4188        Self::static_type()
4189    }
4190}
4191
4192impl From<CornerType> for glib::Value {
4193    #[inline]
4194    fn from(v: CornerType) -> Self {
4195        skip_assert_initialized!();
4196        ToValue::to_value(&v)
4197    }
4198}
4199
4200/// Errors that can occur while parsing CSS.
4201///
4202/// These errors are unexpected and will cause parts of the given CSS
4203/// to be ignored.
4204#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4205#[non_exhaustive]
4206#[doc(alias = "GtkCssParserError")]
4207pub enum CssParserError {
4208    /// Unknown failure.
4209    #[doc(alias = "GTK_CSS_PARSER_ERROR_FAILED")]
4210    Failed,
4211    /// The given text does not form valid syntax
4212    #[doc(alias = "GTK_CSS_PARSER_ERROR_SYNTAX")]
4213    Syntax,
4214    /// Failed to import a resource
4215    #[doc(alias = "GTK_CSS_PARSER_ERROR_IMPORT")]
4216    Import,
4217    /// The given name has not been defined
4218    #[doc(alias = "GTK_CSS_PARSER_ERROR_NAME")]
4219    Name,
4220    /// The given value is not correct
4221    #[doc(alias = "GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE")]
4222    UnknownValue,
4223    #[doc(hidden)]
4224    __Unknown(i32),
4225}
4226
4227#[doc(hidden)]
4228impl IntoGlib for CssParserError {
4229    type GlibType = ffi::GtkCssParserError;
4230
4231    #[inline]
4232    fn into_glib(self) -> ffi::GtkCssParserError {
4233        match self {
4234            Self::Failed => ffi::GTK_CSS_PARSER_ERROR_FAILED,
4235            Self::Syntax => ffi::GTK_CSS_PARSER_ERROR_SYNTAX,
4236            Self::Import => ffi::GTK_CSS_PARSER_ERROR_IMPORT,
4237            Self::Name => ffi::GTK_CSS_PARSER_ERROR_NAME,
4238            Self::UnknownValue => ffi::GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE,
4239            Self::__Unknown(value) => value,
4240        }
4241    }
4242}
4243
4244#[doc(hidden)]
4245impl FromGlib<ffi::GtkCssParserError> for CssParserError {
4246    #[inline]
4247    unsafe fn from_glib(value: ffi::GtkCssParserError) -> Self {
4248        skip_assert_initialized!();
4249
4250        match value {
4251            ffi::GTK_CSS_PARSER_ERROR_FAILED => Self::Failed,
4252            ffi::GTK_CSS_PARSER_ERROR_SYNTAX => Self::Syntax,
4253            ffi::GTK_CSS_PARSER_ERROR_IMPORT => Self::Import,
4254            ffi::GTK_CSS_PARSER_ERROR_NAME => Self::Name,
4255            ffi::GTK_CSS_PARSER_ERROR_UNKNOWN_VALUE => Self::UnknownValue,
4256            value => Self::__Unknown(value),
4257        }
4258    }
4259}
4260
4261impl glib::error::ErrorDomain for CssParserError {
4262    #[inline]
4263    fn domain() -> glib::Quark {
4264        skip_assert_initialized!();
4265
4266        unsafe { from_glib(ffi::gtk_css_parser_error_quark()) }
4267    }
4268
4269    #[inline]
4270    fn code(self) -> i32 {
4271        self.into_glib()
4272    }
4273
4274    #[inline]
4275    #[allow(clippy::match_single_binding)]
4276    fn from(code: i32) -> Option<Self> {
4277        skip_assert_initialized!();
4278        match unsafe { from_glib(code) } {
4279            Self::__Unknown(_) => Some(Self::Failed),
4280            value => Some(value),
4281        }
4282    }
4283}
4284
4285/// Warnings that can occur while parsing CSS.
4286///
4287/// Unlike [`CssParserError`][crate::CssParserError]s, warnings do not cause the parser to
4288/// skip any input, but they indicate issues that should be fixed.
4289#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4290#[non_exhaustive]
4291#[doc(alias = "GtkCssParserWarning")]
4292pub enum CssParserWarning {
4293    /// The given construct is
4294    ///   deprecated and will be removed in a future version
4295    #[doc(alias = "GTK_CSS_PARSER_WARNING_DEPRECATED")]
4296    Deprecated,
4297    /// A syntax construct was used
4298    ///   that should be avoided
4299    #[doc(alias = "GTK_CSS_PARSER_WARNING_SYNTAX")]
4300    Syntax,
4301    /// A feature is not implemented
4302    #[doc(alias = "GTK_CSS_PARSER_WARNING_UNIMPLEMENTED")]
4303    Unimplemented,
4304    #[doc(hidden)]
4305    __Unknown(i32),
4306}
4307
4308#[doc(hidden)]
4309impl IntoGlib for CssParserWarning {
4310    type GlibType = ffi::GtkCssParserWarning;
4311
4312    #[inline]
4313    fn into_glib(self) -> ffi::GtkCssParserWarning {
4314        match self {
4315            Self::Deprecated => ffi::GTK_CSS_PARSER_WARNING_DEPRECATED,
4316            Self::Syntax => ffi::GTK_CSS_PARSER_WARNING_SYNTAX,
4317            Self::Unimplemented => ffi::GTK_CSS_PARSER_WARNING_UNIMPLEMENTED,
4318            Self::__Unknown(value) => value,
4319        }
4320    }
4321}
4322
4323#[doc(hidden)]
4324impl FromGlib<ffi::GtkCssParserWarning> for CssParserWarning {
4325    #[inline]
4326    unsafe fn from_glib(value: ffi::GtkCssParserWarning) -> Self {
4327        skip_assert_initialized!();
4328
4329        match value {
4330            ffi::GTK_CSS_PARSER_WARNING_DEPRECATED => Self::Deprecated,
4331            ffi::GTK_CSS_PARSER_WARNING_SYNTAX => Self::Syntax,
4332            ffi::GTK_CSS_PARSER_WARNING_UNIMPLEMENTED => Self::Unimplemented,
4333            value => Self::__Unknown(value),
4334        }
4335    }
4336}
4337
4338/// Passed to various keybinding signals for deleting text.
4339#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4340#[non_exhaustive]
4341#[doc(alias = "GtkDeleteType")]
4342pub enum DeleteType {
4343    /// Delete characters.
4344    #[doc(alias = "GTK_DELETE_CHARS")]
4345    Chars,
4346    /// Delete only the portion of the word to the
4347    ///   left/right of cursor if we’re in the middle of a word.
4348    #[doc(alias = "GTK_DELETE_WORD_ENDS")]
4349    WordEnds,
4350    /// Delete words.
4351    #[doc(alias = "GTK_DELETE_WORDS")]
4352    Words,
4353    /// Delete display-lines. Display-lines
4354    ///   refers to the visible lines, with respect to the current line
4355    ///   breaks. As opposed to paragraphs, which are defined by line
4356    ///   breaks in the input.
4357    #[doc(alias = "GTK_DELETE_DISPLAY_LINES")]
4358    DisplayLines,
4359    /// Delete only the portion of the
4360    ///   display-line to the left/right of cursor.
4361    #[doc(alias = "GTK_DELETE_DISPLAY_LINE_ENDS")]
4362    DisplayLineEnds,
4363    /// Delete to the end of the
4364    ///   paragraph. Like C-k in Emacs (or its reverse).
4365    #[doc(alias = "GTK_DELETE_PARAGRAPH_ENDS")]
4366    ParagraphEnds,
4367    /// Delete entire line. Like C-k in pico.
4368    #[doc(alias = "GTK_DELETE_PARAGRAPHS")]
4369    Paragraphs,
4370    /// Delete only whitespace. Like M-\ in Emacs.
4371    #[doc(alias = "GTK_DELETE_WHITESPACE")]
4372    Whitespace,
4373    #[doc(hidden)]
4374    __Unknown(i32),
4375}
4376
4377#[doc(hidden)]
4378impl IntoGlib for DeleteType {
4379    type GlibType = ffi::GtkDeleteType;
4380
4381    #[inline]
4382    fn into_glib(self) -> ffi::GtkDeleteType {
4383        match self {
4384            Self::Chars => ffi::GTK_DELETE_CHARS,
4385            Self::WordEnds => ffi::GTK_DELETE_WORD_ENDS,
4386            Self::Words => ffi::GTK_DELETE_WORDS,
4387            Self::DisplayLines => ffi::GTK_DELETE_DISPLAY_LINES,
4388            Self::DisplayLineEnds => ffi::GTK_DELETE_DISPLAY_LINE_ENDS,
4389            Self::ParagraphEnds => ffi::GTK_DELETE_PARAGRAPH_ENDS,
4390            Self::Paragraphs => ffi::GTK_DELETE_PARAGRAPHS,
4391            Self::Whitespace => ffi::GTK_DELETE_WHITESPACE,
4392            Self::__Unknown(value) => value,
4393        }
4394    }
4395}
4396
4397#[doc(hidden)]
4398impl FromGlib<ffi::GtkDeleteType> for DeleteType {
4399    #[inline]
4400    unsafe fn from_glib(value: ffi::GtkDeleteType) -> Self {
4401        skip_assert_initialized!();
4402
4403        match value {
4404            ffi::GTK_DELETE_CHARS => Self::Chars,
4405            ffi::GTK_DELETE_WORD_ENDS => Self::WordEnds,
4406            ffi::GTK_DELETE_WORDS => Self::Words,
4407            ffi::GTK_DELETE_DISPLAY_LINES => Self::DisplayLines,
4408            ffi::GTK_DELETE_DISPLAY_LINE_ENDS => Self::DisplayLineEnds,
4409            ffi::GTK_DELETE_PARAGRAPH_ENDS => Self::ParagraphEnds,
4410            ffi::GTK_DELETE_PARAGRAPHS => Self::Paragraphs,
4411            ffi::GTK_DELETE_WHITESPACE => Self::Whitespace,
4412            value => Self::__Unknown(value),
4413        }
4414    }
4415}
4416
4417impl StaticType for DeleteType {
4418    #[inline]
4419    #[doc(alias = "gtk_delete_type_get_type")]
4420    fn static_type() -> glib::Type {
4421        unsafe { from_glib(ffi::gtk_delete_type_get_type()) }
4422    }
4423}
4424
4425impl glib::HasParamSpec for DeleteType {
4426    type ParamSpec = glib::ParamSpecEnum;
4427    type SetValue = Self;
4428    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4429
4430    fn param_spec_builder() -> Self::BuilderFn {
4431        Self::ParamSpec::builder_with_default
4432    }
4433}
4434
4435impl glib::value::ValueType for DeleteType {
4436    type Type = Self;
4437}
4438
4439unsafe impl<'a> glib::value::FromValue<'a> for DeleteType {
4440    type Checker = glib::value::GenericValueTypeChecker<Self>;
4441
4442    #[inline]
4443    unsafe fn from_value(value: &'a glib::Value) -> Self {
4444        skip_assert_initialized!();
4445        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4446    }
4447}
4448
4449impl ToValue for DeleteType {
4450    #[inline]
4451    fn to_value(&self) -> glib::Value {
4452        let mut value = glib::Value::for_value_type::<Self>();
4453        unsafe {
4454            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4455        }
4456        value
4457    }
4458
4459    #[inline]
4460    fn value_type(&self) -> glib::Type {
4461        Self::static_type()
4462    }
4463}
4464
4465impl From<DeleteType> for glib::Value {
4466    #[inline]
4467    fn from(v: DeleteType) -> Self {
4468        skip_assert_initialized!();
4469        ToValue::to_value(&v)
4470    }
4471}
4472
4473/// Error codes in the `GTK_DIALOG_ERROR` domain that can be returned
4474/// by async dialog functions.
4475#[cfg(feature = "v4_10")]
4476#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4477#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4478#[non_exhaustive]
4479#[doc(alias = "GtkDialogError")]
4480pub enum DialogError {
4481    /// Generic error condition for when
4482    ///   an operation fails and no more specific code is applicable
4483    #[doc(alias = "GTK_DIALOG_ERROR_FAILED")]
4484    Failed,
4485    /// The async function call was cancelled
4486    ///   via its `GCancellable`
4487    #[doc(alias = "GTK_DIALOG_ERROR_CANCELLED")]
4488    Cancelled,
4489    /// The operation was cancelled
4490    ///   by the user (via a Cancel or Close button)
4491    #[doc(alias = "GTK_DIALOG_ERROR_DISMISSED")]
4492    Dismissed,
4493    #[doc(hidden)]
4494    __Unknown(i32),
4495}
4496
4497#[cfg(feature = "v4_10")]
4498#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4499#[doc(hidden)]
4500impl IntoGlib for DialogError {
4501    type GlibType = ffi::GtkDialogError;
4502
4503    #[inline]
4504    fn into_glib(self) -> ffi::GtkDialogError {
4505        match self {
4506            Self::Failed => ffi::GTK_DIALOG_ERROR_FAILED,
4507            Self::Cancelled => ffi::GTK_DIALOG_ERROR_CANCELLED,
4508            Self::Dismissed => ffi::GTK_DIALOG_ERROR_DISMISSED,
4509            Self::__Unknown(value) => value,
4510        }
4511    }
4512}
4513
4514#[cfg(feature = "v4_10")]
4515#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4516#[doc(hidden)]
4517impl FromGlib<ffi::GtkDialogError> for DialogError {
4518    #[inline]
4519    unsafe fn from_glib(value: ffi::GtkDialogError) -> Self {
4520        skip_assert_initialized!();
4521
4522        match value {
4523            ffi::GTK_DIALOG_ERROR_FAILED => Self::Failed,
4524            ffi::GTK_DIALOG_ERROR_CANCELLED => Self::Cancelled,
4525            ffi::GTK_DIALOG_ERROR_DISMISSED => Self::Dismissed,
4526            value => Self::__Unknown(value),
4527        }
4528    }
4529}
4530
4531#[cfg(feature = "v4_10")]
4532#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4533impl glib::error::ErrorDomain for DialogError {
4534    #[inline]
4535    fn domain() -> glib::Quark {
4536        skip_assert_initialized!();
4537
4538        unsafe { from_glib(ffi::gtk_dialog_error_quark()) }
4539    }
4540
4541    #[inline]
4542    fn code(self) -> i32 {
4543        self.into_glib()
4544    }
4545
4546    #[inline]
4547    #[allow(clippy::match_single_binding)]
4548    fn from(code: i32) -> Option<Self> {
4549        skip_assert_initialized!();
4550        match unsafe { from_glib(code) } {
4551            Self::__Unknown(_) => Some(Self::Failed),
4552            value => Some(value),
4553        }
4554    }
4555}
4556
4557#[cfg(feature = "v4_10")]
4558#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4559impl StaticType for DialogError {
4560    #[inline]
4561    #[doc(alias = "gtk_dialog_error_get_type")]
4562    fn static_type() -> glib::Type {
4563        unsafe { from_glib(ffi::gtk_dialog_error_get_type()) }
4564    }
4565}
4566
4567#[cfg(feature = "v4_10")]
4568#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4569impl glib::HasParamSpec for DialogError {
4570    type ParamSpec = glib::ParamSpecEnum;
4571    type SetValue = Self;
4572    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4573
4574    fn param_spec_builder() -> Self::BuilderFn {
4575        Self::ParamSpec::builder_with_default
4576    }
4577}
4578
4579#[cfg(feature = "v4_10")]
4580#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4581impl glib::value::ValueType for DialogError {
4582    type Type = Self;
4583}
4584
4585#[cfg(feature = "v4_10")]
4586#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4587unsafe impl<'a> glib::value::FromValue<'a> for DialogError {
4588    type Checker = glib::value::GenericValueTypeChecker<Self>;
4589
4590    #[inline]
4591    unsafe fn from_value(value: &'a glib::Value) -> Self {
4592        skip_assert_initialized!();
4593        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4594    }
4595}
4596
4597#[cfg(feature = "v4_10")]
4598#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4599impl ToValue for DialogError {
4600    #[inline]
4601    fn to_value(&self) -> glib::Value {
4602        let mut value = glib::Value::for_value_type::<Self>();
4603        unsafe {
4604            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4605        }
4606        value
4607    }
4608
4609    #[inline]
4610    fn value_type(&self) -> glib::Type {
4611        Self::static_type()
4612    }
4613}
4614
4615#[cfg(feature = "v4_10")]
4616#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
4617impl From<DialogError> for glib::Value {
4618    #[inline]
4619    fn from(v: DialogError) -> Self {
4620        skip_assert_initialized!();
4621        ToValue::to_value(&v)
4622    }
4623}
4624
4625/// Focus movement types.
4626#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4627#[non_exhaustive]
4628#[doc(alias = "GtkDirectionType")]
4629pub enum DirectionType {
4630    /// Move forward.
4631    #[doc(alias = "GTK_DIR_TAB_FORWARD")]
4632    TabForward,
4633    /// Move backward.
4634    #[doc(alias = "GTK_DIR_TAB_BACKWARD")]
4635    TabBackward,
4636    /// Move up.
4637    #[doc(alias = "GTK_DIR_UP")]
4638    Up,
4639    /// Move down.
4640    #[doc(alias = "GTK_DIR_DOWN")]
4641    Down,
4642    /// Move left.
4643    #[doc(alias = "GTK_DIR_LEFT")]
4644    Left,
4645    /// Move right.
4646    #[doc(alias = "GTK_DIR_RIGHT")]
4647    Right,
4648    #[doc(hidden)]
4649    __Unknown(i32),
4650}
4651
4652#[doc(hidden)]
4653impl IntoGlib for DirectionType {
4654    type GlibType = ffi::GtkDirectionType;
4655
4656    #[inline]
4657    fn into_glib(self) -> ffi::GtkDirectionType {
4658        match self {
4659            Self::TabForward => ffi::GTK_DIR_TAB_FORWARD,
4660            Self::TabBackward => ffi::GTK_DIR_TAB_BACKWARD,
4661            Self::Up => ffi::GTK_DIR_UP,
4662            Self::Down => ffi::GTK_DIR_DOWN,
4663            Self::Left => ffi::GTK_DIR_LEFT,
4664            Self::Right => ffi::GTK_DIR_RIGHT,
4665            Self::__Unknown(value) => value,
4666        }
4667    }
4668}
4669
4670#[doc(hidden)]
4671impl FromGlib<ffi::GtkDirectionType> for DirectionType {
4672    #[inline]
4673    unsafe fn from_glib(value: ffi::GtkDirectionType) -> Self {
4674        skip_assert_initialized!();
4675
4676        match value {
4677            ffi::GTK_DIR_TAB_FORWARD => Self::TabForward,
4678            ffi::GTK_DIR_TAB_BACKWARD => Self::TabBackward,
4679            ffi::GTK_DIR_UP => Self::Up,
4680            ffi::GTK_DIR_DOWN => Self::Down,
4681            ffi::GTK_DIR_LEFT => Self::Left,
4682            ffi::GTK_DIR_RIGHT => Self::Right,
4683            value => Self::__Unknown(value),
4684        }
4685    }
4686}
4687
4688impl StaticType for DirectionType {
4689    #[inline]
4690    #[doc(alias = "gtk_direction_type_get_type")]
4691    fn static_type() -> glib::Type {
4692        unsafe { from_glib(ffi::gtk_direction_type_get_type()) }
4693    }
4694}
4695
4696impl glib::HasParamSpec for DirectionType {
4697    type ParamSpec = glib::ParamSpecEnum;
4698    type SetValue = Self;
4699    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4700
4701    fn param_spec_builder() -> Self::BuilderFn {
4702        Self::ParamSpec::builder_with_default
4703    }
4704}
4705
4706impl glib::value::ValueType for DirectionType {
4707    type Type = Self;
4708}
4709
4710unsafe impl<'a> glib::value::FromValue<'a> for DirectionType {
4711    type Checker = glib::value::GenericValueTypeChecker<Self>;
4712
4713    #[inline]
4714    unsafe fn from_value(value: &'a glib::Value) -> Self {
4715        skip_assert_initialized!();
4716        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4717    }
4718}
4719
4720impl ToValue for DirectionType {
4721    #[inline]
4722    fn to_value(&self) -> glib::Value {
4723        let mut value = glib::Value::for_value_type::<Self>();
4724        unsafe {
4725            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4726        }
4727        value
4728    }
4729
4730    #[inline]
4731    fn value_type(&self) -> glib::Type {
4732        Self::static_type()
4733    }
4734}
4735
4736impl From<DirectionType> for glib::Value {
4737    #[inline]
4738    fn from(v: DirectionType) -> Self {
4739        skip_assert_initialized!();
4740        ToValue::to_value(&v)
4741    }
4742}
4743
4744/// The identifiers for [`Editable`][crate::Editable] properties.
4745///
4746/// See [`Editable::install_properties()`][crate::Editable::install_properties()] for details on how to
4747/// implement the [`Editable`][crate::Editable] interface.
4748#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4749#[non_exhaustive]
4750#[doc(alias = "GtkEditableProperties")]
4751pub enum EditableProperties {
4752    /// the property id for [`text`][struct@crate::Editable#text]
4753    #[doc(alias = "GTK_EDITABLE_PROP_TEXT")]
4754    PropText,
4755    /// the property id for [`cursor-position`][struct@crate::Editable#cursor-position]
4756    #[doc(alias = "GTK_EDITABLE_PROP_CURSOR_POSITION")]
4757    PropCursorPosition,
4758    /// the property id for [`selection-bound`][struct@crate::Editable#selection-bound]
4759    #[doc(alias = "GTK_EDITABLE_PROP_SELECTION_BOUND")]
4760    PropSelectionBound,
4761    /// the property id for [`editable`][struct@crate::Editable#editable]
4762    #[doc(alias = "GTK_EDITABLE_PROP_EDITABLE")]
4763    PropEditable,
4764    /// the property id for [`width-chars`][struct@crate::Editable#width-chars]
4765    #[doc(alias = "GTK_EDITABLE_PROP_WIDTH_CHARS")]
4766    PropWidthChars,
4767    /// the property id for [`max-width-chars`][struct@crate::Editable#max-width-chars]
4768    #[doc(alias = "GTK_EDITABLE_PROP_MAX_WIDTH_CHARS")]
4769    PropMaxWidthChars,
4770    /// the property id for [`xalign`][struct@crate::Editable#xalign]
4771    #[doc(alias = "GTK_EDITABLE_PROP_XALIGN")]
4772    PropXalign,
4773    /// the property id for [`enable-undo`][struct@crate::Editable#enable-undo]
4774    #[doc(alias = "GTK_EDITABLE_PROP_ENABLE_UNDO")]
4775    PropEnableUndo,
4776    /// the property id for [`complete-text`][struct@crate::Editable#complete-text]
4777    #[doc(alias = "GTK_EDITABLE_PROP_COMPLETE_TEXT")]
4778    PropCompleteText,
4779    /// the property id for [`input-interceptor`][struct@crate::Editable#input-interceptor]
4780    #[doc(alias = "GTK_EDITABLE_PROP_INPUT_INTERCEPTOR")]
4781    PropInputInterceptor,
4782    /// the number of properties
4783    #[doc(alias = "GTK_EDITABLE_NUM_PROPERTIES")]
4784    NumProperties,
4785    #[doc(hidden)]
4786    __Unknown(i32),
4787}
4788
4789#[doc(hidden)]
4790impl IntoGlib for EditableProperties {
4791    type GlibType = ffi::GtkEditableProperties;
4792
4793    #[inline]
4794    fn into_glib(self) -> ffi::GtkEditableProperties {
4795        match self {
4796            Self::PropText => ffi::GTK_EDITABLE_PROP_TEXT,
4797            Self::PropCursorPosition => ffi::GTK_EDITABLE_PROP_CURSOR_POSITION,
4798            Self::PropSelectionBound => ffi::GTK_EDITABLE_PROP_SELECTION_BOUND,
4799            Self::PropEditable => ffi::GTK_EDITABLE_PROP_EDITABLE,
4800            Self::PropWidthChars => ffi::GTK_EDITABLE_PROP_WIDTH_CHARS,
4801            Self::PropMaxWidthChars => ffi::GTK_EDITABLE_PROP_MAX_WIDTH_CHARS,
4802            Self::PropXalign => ffi::GTK_EDITABLE_PROP_XALIGN,
4803            Self::PropEnableUndo => ffi::GTK_EDITABLE_PROP_ENABLE_UNDO,
4804            Self::PropCompleteText => ffi::GTK_EDITABLE_PROP_COMPLETE_TEXT,
4805            Self::PropInputInterceptor => ffi::GTK_EDITABLE_PROP_INPUT_INTERCEPTOR,
4806            Self::NumProperties => ffi::GTK_EDITABLE_NUM_PROPERTIES,
4807            Self::__Unknown(value) => value,
4808        }
4809    }
4810}
4811
4812#[doc(hidden)]
4813impl FromGlib<ffi::GtkEditableProperties> for EditableProperties {
4814    #[inline]
4815    unsafe fn from_glib(value: ffi::GtkEditableProperties) -> Self {
4816        skip_assert_initialized!();
4817
4818        match value {
4819            ffi::GTK_EDITABLE_PROP_TEXT => Self::PropText,
4820            ffi::GTK_EDITABLE_PROP_CURSOR_POSITION => Self::PropCursorPosition,
4821            ffi::GTK_EDITABLE_PROP_SELECTION_BOUND => Self::PropSelectionBound,
4822            ffi::GTK_EDITABLE_PROP_EDITABLE => Self::PropEditable,
4823            ffi::GTK_EDITABLE_PROP_WIDTH_CHARS => Self::PropWidthChars,
4824            ffi::GTK_EDITABLE_PROP_MAX_WIDTH_CHARS => Self::PropMaxWidthChars,
4825            ffi::GTK_EDITABLE_PROP_XALIGN => Self::PropXalign,
4826            ffi::GTK_EDITABLE_PROP_ENABLE_UNDO => Self::PropEnableUndo,
4827            ffi::GTK_EDITABLE_PROP_COMPLETE_TEXT => Self::PropCompleteText,
4828            ffi::GTK_EDITABLE_PROP_INPUT_INTERCEPTOR => Self::PropInputInterceptor,
4829            ffi::GTK_EDITABLE_NUM_PROPERTIES => Self::NumProperties,
4830            value => Self::__Unknown(value),
4831        }
4832    }
4833}
4834
4835impl StaticType for EditableProperties {
4836    #[inline]
4837    #[doc(alias = "gtk_editable_properties_get_type")]
4838    fn static_type() -> glib::Type {
4839        unsafe { from_glib(ffi::gtk_editable_properties_get_type()) }
4840    }
4841}
4842
4843impl glib::HasParamSpec for EditableProperties {
4844    type ParamSpec = glib::ParamSpecEnum;
4845    type SetValue = Self;
4846    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4847
4848    fn param_spec_builder() -> Self::BuilderFn {
4849        Self::ParamSpec::builder_with_default
4850    }
4851}
4852
4853impl glib::value::ValueType for EditableProperties {
4854    type Type = Self;
4855}
4856
4857unsafe impl<'a> glib::value::FromValue<'a> for EditableProperties {
4858    type Checker = glib::value::GenericValueTypeChecker<Self>;
4859
4860    #[inline]
4861    unsafe fn from_value(value: &'a glib::Value) -> Self {
4862        skip_assert_initialized!();
4863        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4864    }
4865}
4866
4867impl ToValue for EditableProperties {
4868    #[inline]
4869    fn to_value(&self) -> glib::Value {
4870        let mut value = glib::Value::for_value_type::<Self>();
4871        unsafe {
4872            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4873        }
4874        value
4875    }
4876
4877    #[inline]
4878    fn value_type(&self) -> glib::Type {
4879        Self::static_type()
4880    }
4881}
4882
4883impl From<EditableProperties> for glib::Value {
4884    #[inline]
4885    fn from(v: EditableProperties) -> Self {
4886        skip_assert_initialized!();
4887        ToValue::to_value(&v)
4888    }
4889}
4890
4891/// Specifies the side of the entry at which an icon is placed.
4892#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4893#[non_exhaustive]
4894#[doc(alias = "GtkEntryIconPosition")]
4895pub enum EntryIconPosition {
4896    /// At the beginning of the entry (depending on the text direction).
4897    #[doc(alias = "GTK_ENTRY_ICON_PRIMARY")]
4898    Primary,
4899    /// At the end of the entry (depending on the text direction).
4900    #[doc(alias = "GTK_ENTRY_ICON_SECONDARY")]
4901    Secondary,
4902    #[doc(hidden)]
4903    __Unknown(i32),
4904}
4905
4906#[doc(hidden)]
4907impl IntoGlib for EntryIconPosition {
4908    type GlibType = ffi::GtkEntryIconPosition;
4909
4910    #[inline]
4911    fn into_glib(self) -> ffi::GtkEntryIconPosition {
4912        match self {
4913            Self::Primary => ffi::GTK_ENTRY_ICON_PRIMARY,
4914            Self::Secondary => ffi::GTK_ENTRY_ICON_SECONDARY,
4915            Self::__Unknown(value) => value,
4916        }
4917    }
4918}
4919
4920#[doc(hidden)]
4921impl FromGlib<ffi::GtkEntryIconPosition> for EntryIconPosition {
4922    #[inline]
4923    unsafe fn from_glib(value: ffi::GtkEntryIconPosition) -> Self {
4924        skip_assert_initialized!();
4925
4926        match value {
4927            ffi::GTK_ENTRY_ICON_PRIMARY => Self::Primary,
4928            ffi::GTK_ENTRY_ICON_SECONDARY => Self::Secondary,
4929            value => Self::__Unknown(value),
4930        }
4931    }
4932}
4933
4934impl StaticType for EntryIconPosition {
4935    #[inline]
4936    #[doc(alias = "gtk_entry_icon_position_get_type")]
4937    fn static_type() -> glib::Type {
4938        unsafe { from_glib(ffi::gtk_entry_icon_position_get_type()) }
4939    }
4940}
4941
4942impl glib::HasParamSpec for EntryIconPosition {
4943    type ParamSpec = glib::ParamSpecEnum;
4944    type SetValue = Self;
4945    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4946
4947    fn param_spec_builder() -> Self::BuilderFn {
4948        Self::ParamSpec::builder_with_default
4949    }
4950}
4951
4952impl glib::value::ValueType for EntryIconPosition {
4953    type Type = Self;
4954}
4955
4956unsafe impl<'a> glib::value::FromValue<'a> for EntryIconPosition {
4957    type Checker = glib::value::GenericValueTypeChecker<Self>;
4958
4959    #[inline]
4960    unsafe fn from_value(value: &'a glib::Value) -> Self {
4961        skip_assert_initialized!();
4962        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4963    }
4964}
4965
4966impl ToValue for EntryIconPosition {
4967    #[inline]
4968    fn to_value(&self) -> glib::Value {
4969        let mut value = glib::Value::for_value_type::<Self>();
4970        unsafe {
4971            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4972        }
4973        value
4974    }
4975
4976    #[inline]
4977    fn value_type(&self) -> glib::Type {
4978        Self::static_type()
4979    }
4980}
4981
4982impl From<EntryIconPosition> for glib::Value {
4983    #[inline]
4984    fn from(v: EntryIconPosition) -> Self {
4985        skip_assert_initialized!();
4986        ToValue::to_value(&v)
4987    }
4988}
4989
4990/// Describes the state of a [`gdk::EventSequence`][crate::gdk::EventSequence] in a [`Gesture`][crate::Gesture].
4991#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4992#[non_exhaustive]
4993#[doc(alias = "GtkEventSequenceState")]
4994pub enum EventSequenceState {
4995    /// The sequence is handled, but not grabbed.
4996    #[doc(alias = "GTK_EVENT_SEQUENCE_NONE")]
4997    None,
4998    /// The sequence is handled and grabbed.
4999    #[doc(alias = "GTK_EVENT_SEQUENCE_CLAIMED")]
5000    Claimed,
5001    /// The sequence is denied.
5002    #[doc(alias = "GTK_EVENT_SEQUENCE_DENIED")]
5003    Denied,
5004    #[doc(hidden)]
5005    __Unknown(i32),
5006}
5007
5008#[doc(hidden)]
5009impl IntoGlib for EventSequenceState {
5010    type GlibType = ffi::GtkEventSequenceState;
5011
5012    #[inline]
5013    fn into_glib(self) -> ffi::GtkEventSequenceState {
5014        match self {
5015            Self::None => ffi::GTK_EVENT_SEQUENCE_NONE,
5016            Self::Claimed => ffi::GTK_EVENT_SEQUENCE_CLAIMED,
5017            Self::Denied => ffi::GTK_EVENT_SEQUENCE_DENIED,
5018            Self::__Unknown(value) => value,
5019        }
5020    }
5021}
5022
5023#[doc(hidden)]
5024impl FromGlib<ffi::GtkEventSequenceState> for EventSequenceState {
5025    #[inline]
5026    unsafe fn from_glib(value: ffi::GtkEventSequenceState) -> Self {
5027        skip_assert_initialized!();
5028
5029        match value {
5030            ffi::GTK_EVENT_SEQUENCE_NONE => Self::None,
5031            ffi::GTK_EVENT_SEQUENCE_CLAIMED => Self::Claimed,
5032            ffi::GTK_EVENT_SEQUENCE_DENIED => Self::Denied,
5033            value => Self::__Unknown(value),
5034        }
5035    }
5036}
5037
5038impl StaticType for EventSequenceState {
5039    #[inline]
5040    #[doc(alias = "gtk_event_sequence_state_get_type")]
5041    fn static_type() -> glib::Type {
5042        unsafe { from_glib(ffi::gtk_event_sequence_state_get_type()) }
5043    }
5044}
5045
5046impl glib::HasParamSpec for EventSequenceState {
5047    type ParamSpec = glib::ParamSpecEnum;
5048    type SetValue = Self;
5049    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5050
5051    fn param_spec_builder() -> Self::BuilderFn {
5052        Self::ParamSpec::builder_with_default
5053    }
5054}
5055
5056impl glib::value::ValueType for EventSequenceState {
5057    type Type = Self;
5058}
5059
5060unsafe impl<'a> glib::value::FromValue<'a> for EventSequenceState {
5061    type Checker = glib::value::GenericValueTypeChecker<Self>;
5062
5063    #[inline]
5064    unsafe fn from_value(value: &'a glib::Value) -> Self {
5065        skip_assert_initialized!();
5066        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5067    }
5068}
5069
5070impl ToValue for EventSequenceState {
5071    #[inline]
5072    fn to_value(&self) -> glib::Value {
5073        let mut value = glib::Value::for_value_type::<Self>();
5074        unsafe {
5075            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5076        }
5077        value
5078    }
5079
5080    #[inline]
5081    fn value_type(&self) -> glib::Type {
5082        Self::static_type()
5083    }
5084}
5085
5086impl From<EventSequenceState> for glib::Value {
5087    #[inline]
5088    fn from(v: EventSequenceState) -> Self {
5089        skip_assert_initialized!();
5090        ToValue::to_value(&v)
5091    }
5092}
5093
5094/// Describes whether a [`FileChooser`][crate::FileChooser] is being used to open existing files
5095/// or to save to a possibly new file.
5096#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5097#[non_exhaustive]
5098#[doc(alias = "GtkFileChooserAction")]
5099pub enum FileChooserAction {
5100    /// Indicates open mode.  The file chooser
5101    ///  will only let the user pick an existing file.
5102    #[doc(alias = "GTK_FILE_CHOOSER_ACTION_OPEN")]
5103    Open,
5104    /// Indicates save mode.  The file chooser
5105    ///  will let the user pick an existing file, or type in a new
5106    ///  filename.
5107    #[doc(alias = "GTK_FILE_CHOOSER_ACTION_SAVE")]
5108    Save,
5109    /// Indicates an Open mode for
5110    ///  selecting folders.  The file chooser will let the user pick an
5111    ///  existing folder.
5112    #[doc(alias = "GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER")]
5113    SelectFolder,
5114    #[doc(hidden)]
5115    __Unknown(i32),
5116}
5117
5118#[doc(hidden)]
5119impl IntoGlib for FileChooserAction {
5120    type GlibType = ffi::GtkFileChooserAction;
5121
5122    #[inline]
5123    fn into_glib(self) -> ffi::GtkFileChooserAction {
5124        match self {
5125            Self::Open => ffi::GTK_FILE_CHOOSER_ACTION_OPEN,
5126            Self::Save => ffi::GTK_FILE_CHOOSER_ACTION_SAVE,
5127            Self::SelectFolder => ffi::GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
5128            Self::__Unknown(value) => value,
5129        }
5130    }
5131}
5132
5133#[doc(hidden)]
5134impl FromGlib<ffi::GtkFileChooserAction> for FileChooserAction {
5135    #[inline]
5136    unsafe fn from_glib(value: ffi::GtkFileChooserAction) -> Self {
5137        skip_assert_initialized!();
5138
5139        match value {
5140            ffi::GTK_FILE_CHOOSER_ACTION_OPEN => Self::Open,
5141            ffi::GTK_FILE_CHOOSER_ACTION_SAVE => Self::Save,
5142            ffi::GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER => Self::SelectFolder,
5143            value => Self::__Unknown(value),
5144        }
5145    }
5146}
5147
5148impl StaticType for FileChooserAction {
5149    #[inline]
5150    #[doc(alias = "gtk_file_chooser_action_get_type")]
5151    fn static_type() -> glib::Type {
5152        unsafe { from_glib(ffi::gtk_file_chooser_action_get_type()) }
5153    }
5154}
5155
5156impl glib::HasParamSpec for FileChooserAction {
5157    type ParamSpec = glib::ParamSpecEnum;
5158    type SetValue = Self;
5159    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5160
5161    fn param_spec_builder() -> Self::BuilderFn {
5162        Self::ParamSpec::builder_with_default
5163    }
5164}
5165
5166impl glib::value::ValueType for FileChooserAction {
5167    type Type = Self;
5168}
5169
5170unsafe impl<'a> glib::value::FromValue<'a> for FileChooserAction {
5171    type Checker = glib::value::GenericValueTypeChecker<Self>;
5172
5173    #[inline]
5174    unsafe fn from_value(value: &'a glib::Value) -> Self {
5175        skip_assert_initialized!();
5176        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5177    }
5178}
5179
5180impl ToValue for FileChooserAction {
5181    #[inline]
5182    fn to_value(&self) -> glib::Value {
5183        let mut value = glib::Value::for_value_type::<Self>();
5184        unsafe {
5185            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5186        }
5187        value
5188    }
5189
5190    #[inline]
5191    fn value_type(&self) -> glib::Type {
5192        Self::static_type()
5193    }
5194}
5195
5196impl From<FileChooserAction> for glib::Value {
5197    #[inline]
5198    fn from(v: FileChooserAction) -> Self {
5199        skip_assert_initialized!();
5200        ToValue::to_value(&v)
5201    }
5202}
5203
5204/// These identify the various errors that can occur while calling
5205/// [`FileChooser`][crate::FileChooser] functions.
5206///
5207/// # Deprecated since 4.20
5208///
5209/// There is no replacement
5210#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
5211#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5212#[non_exhaustive]
5213#[doc(alias = "GtkFileChooserError")]
5214pub enum FileChooserError {
5215    /// Indicates that a file does not exist.
5216    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_NONEXISTENT")]
5217    Nonexistent,
5218    /// Indicates a malformed filename.
5219    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_BAD_FILENAME")]
5220    BadFilename,
5221    /// Indicates a duplicate path (e.g. when
5222    ///  adding a bookmark).
5223    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS")]
5224    AlreadyExists,
5225    /// Indicates an incomplete hostname
5226    ///  (e.g. "http://foo" without a slash after that).
5227    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME")]
5228    IncompleteHostname,
5229    #[doc(hidden)]
5230    __Unknown(i32),
5231}
5232
5233#[allow(deprecated)]
5234#[doc(hidden)]
5235impl IntoGlib for FileChooserError {
5236    type GlibType = ffi::GtkFileChooserError;
5237
5238    #[inline]
5239    fn into_glib(self) -> ffi::GtkFileChooserError {
5240        match self {
5241            Self::Nonexistent => ffi::GTK_FILE_CHOOSER_ERROR_NONEXISTENT,
5242            Self::BadFilename => ffi::GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
5243            Self::AlreadyExists => ffi::GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS,
5244            Self::IncompleteHostname => ffi::GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME,
5245            Self::__Unknown(value) => value,
5246        }
5247    }
5248}
5249
5250#[allow(deprecated)]
5251#[doc(hidden)]
5252impl FromGlib<ffi::GtkFileChooserError> for FileChooserError {
5253    #[inline]
5254    unsafe fn from_glib(value: ffi::GtkFileChooserError) -> Self {
5255        skip_assert_initialized!();
5256
5257        match value {
5258            ffi::GTK_FILE_CHOOSER_ERROR_NONEXISTENT => Self::Nonexistent,
5259            ffi::GTK_FILE_CHOOSER_ERROR_BAD_FILENAME => Self::BadFilename,
5260            ffi::GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS => Self::AlreadyExists,
5261            ffi::GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME => Self::IncompleteHostname,
5262            value => Self::__Unknown(value),
5263        }
5264    }
5265}
5266
5267#[allow(deprecated)]
5268impl glib::error::ErrorDomain for FileChooserError {
5269    #[inline]
5270    fn domain() -> glib::Quark {
5271        skip_assert_initialized!();
5272
5273        unsafe { from_glib(ffi::gtk_file_chooser_error_quark()) }
5274    }
5275
5276    #[inline]
5277    fn code(self) -> i32 {
5278        self.into_glib()
5279    }
5280
5281    #[inline]
5282    #[allow(clippy::match_single_binding)]
5283    fn from(code: i32) -> Option<Self> {
5284        skip_assert_initialized!();
5285        match unsafe { from_glib(code) } {
5286            value => Some(value),
5287        }
5288    }
5289}
5290
5291#[allow(deprecated)]
5292impl StaticType for FileChooserError {
5293    #[inline]
5294    #[doc(alias = "gtk_file_chooser_error_get_type")]
5295    fn static_type() -> glib::Type {
5296        unsafe { from_glib(ffi::gtk_file_chooser_error_get_type()) }
5297    }
5298}
5299
5300#[allow(deprecated)]
5301impl glib::HasParamSpec for FileChooserError {
5302    type ParamSpec = glib::ParamSpecEnum;
5303    type SetValue = Self;
5304    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5305
5306    fn param_spec_builder() -> Self::BuilderFn {
5307        Self::ParamSpec::builder_with_default
5308    }
5309}
5310
5311#[allow(deprecated)]
5312impl glib::value::ValueType for FileChooserError {
5313    type Type = Self;
5314}
5315
5316#[allow(deprecated)]
5317unsafe impl<'a> glib::value::FromValue<'a> for FileChooserError {
5318    type Checker = glib::value::GenericValueTypeChecker<Self>;
5319
5320    #[inline]
5321    unsafe fn from_value(value: &'a glib::Value) -> Self {
5322        skip_assert_initialized!();
5323        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5324    }
5325}
5326
5327#[allow(deprecated)]
5328impl ToValue for FileChooserError {
5329    #[inline]
5330    fn to_value(&self) -> glib::Value {
5331        let mut value = glib::Value::for_value_type::<Self>();
5332        unsafe {
5333            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5334        }
5335        value
5336    }
5337
5338    #[inline]
5339    fn value_type(&self) -> glib::Type {
5340        Self::static_type()
5341    }
5342}
5343
5344#[allow(deprecated)]
5345impl From<FileChooserError> for glib::Value {
5346    #[inline]
5347    fn from(v: FileChooserError) -> Self {
5348        skip_assert_initialized!();
5349        ToValue::to_value(&v)
5350    }
5351}
5352
5353/// Describes changes in a filter in more detail and allows objects
5354/// using the filter to optimize refiltering items.
5355///
5356/// If you are writing an implementation and are not sure which
5357/// value to pass, `GTK_FILTER_CHANGE_DIFFERENT` is always a correct
5358/// choice.
5359///
5360/// New values may be added in the future.
5361#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5362#[non_exhaustive]
5363#[doc(alias = "GtkFilterChange")]
5364pub enum FilterChange {
5365    /// The filter change cannot be
5366    ///   described with any of the other enumeration values
5367    #[doc(alias = "GTK_FILTER_CHANGE_DIFFERENT")]
5368    Different,
5369    /// The filter is less strict than
5370    ///   it was before: All items that it used to return true
5371    ///   still return true, others now may, too.
5372    #[doc(alias = "GTK_FILTER_CHANGE_LESS_STRICT")]
5373    LessStrict,
5374    /// The filter is more strict than
5375    ///   it was before: All items that it used to return false
5376    ///   still return false, others now may, too.
5377    #[doc(alias = "GTK_FILTER_CHANGE_MORE_STRICT")]
5378    MoreStrict,
5379    /// Similar to [enum@Gtk.FilterChange.DIFFERENT],
5380    /// but signs that item watches should be recreated. This is used by
5381    /// [`FilterListModel`][crate::FilterListModel] to keep the list up-to-date when items
5382    /// change.
5383    #[cfg(feature = "v4_20")]
5384    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
5385    #[doc(alias = "GTK_FILTER_CHANGE_DIFFERENT_REWATCH")]
5386    DifferentRewatch,
5387    /// Similar to [enum@Gtk.FilterChange.LESS_STRICT],
5388    /// but signs that item watches should be recreated. This is used by
5389    /// [`FilterListModel`][crate::FilterListModel] to keep the list up-to-date when items
5390    /// change.
5391    #[cfg(feature = "v4_20")]
5392    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
5393    #[doc(alias = "GTK_FILTER_CHANGE_LESS_STRICT_REWATCH")]
5394    LessStrictRewatch,
5395    /// Similar to [enum@Gtk.FilterChange.MORE_STRICT],
5396    /// but signs that item watches should be recreated. This is used by
5397    /// [`FilterListModel`][crate::FilterListModel] to keep the list up-to-date when items
5398    /// change.
5399    #[cfg(feature = "v4_20")]
5400    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
5401    #[doc(alias = "GTK_FILTER_CHANGE_MORE_STRICT_REWATCH")]
5402    MoreStrictRewatch,
5403    #[doc(hidden)]
5404    __Unknown(i32),
5405}
5406
5407#[doc(hidden)]
5408impl IntoGlib for FilterChange {
5409    type GlibType = ffi::GtkFilterChange;
5410
5411    #[inline]
5412    fn into_glib(self) -> ffi::GtkFilterChange {
5413        match self {
5414            Self::Different => ffi::GTK_FILTER_CHANGE_DIFFERENT,
5415            Self::LessStrict => ffi::GTK_FILTER_CHANGE_LESS_STRICT,
5416            Self::MoreStrict => ffi::GTK_FILTER_CHANGE_MORE_STRICT,
5417            #[cfg(feature = "v4_20")]
5418            Self::DifferentRewatch => ffi::GTK_FILTER_CHANGE_DIFFERENT_REWATCH,
5419            #[cfg(feature = "v4_20")]
5420            Self::LessStrictRewatch => ffi::GTK_FILTER_CHANGE_LESS_STRICT_REWATCH,
5421            #[cfg(feature = "v4_20")]
5422            Self::MoreStrictRewatch => ffi::GTK_FILTER_CHANGE_MORE_STRICT_REWATCH,
5423            Self::__Unknown(value) => value,
5424        }
5425    }
5426}
5427
5428#[doc(hidden)]
5429impl FromGlib<ffi::GtkFilterChange> for FilterChange {
5430    #[inline]
5431    unsafe fn from_glib(value: ffi::GtkFilterChange) -> Self {
5432        skip_assert_initialized!();
5433
5434        match value {
5435            ffi::GTK_FILTER_CHANGE_DIFFERENT => Self::Different,
5436            ffi::GTK_FILTER_CHANGE_LESS_STRICT => Self::LessStrict,
5437            ffi::GTK_FILTER_CHANGE_MORE_STRICT => Self::MoreStrict,
5438            #[cfg(feature = "v4_20")]
5439            ffi::GTK_FILTER_CHANGE_DIFFERENT_REWATCH => Self::DifferentRewatch,
5440            #[cfg(feature = "v4_20")]
5441            ffi::GTK_FILTER_CHANGE_LESS_STRICT_REWATCH => Self::LessStrictRewatch,
5442            #[cfg(feature = "v4_20")]
5443            ffi::GTK_FILTER_CHANGE_MORE_STRICT_REWATCH => Self::MoreStrictRewatch,
5444            value => Self::__Unknown(value),
5445        }
5446    }
5447}
5448
5449impl StaticType for FilterChange {
5450    #[inline]
5451    #[doc(alias = "gtk_filter_change_get_type")]
5452    fn static_type() -> glib::Type {
5453        unsafe { from_glib(ffi::gtk_filter_change_get_type()) }
5454    }
5455}
5456
5457impl glib::HasParamSpec for FilterChange {
5458    type ParamSpec = glib::ParamSpecEnum;
5459    type SetValue = Self;
5460    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5461
5462    fn param_spec_builder() -> Self::BuilderFn {
5463        Self::ParamSpec::builder_with_default
5464    }
5465}
5466
5467impl glib::value::ValueType for FilterChange {
5468    type Type = Self;
5469}
5470
5471unsafe impl<'a> glib::value::FromValue<'a> for FilterChange {
5472    type Checker = glib::value::GenericValueTypeChecker<Self>;
5473
5474    #[inline]
5475    unsafe fn from_value(value: &'a glib::Value) -> Self {
5476        skip_assert_initialized!();
5477        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5478    }
5479}
5480
5481impl ToValue for FilterChange {
5482    #[inline]
5483    fn to_value(&self) -> glib::Value {
5484        let mut value = glib::Value::for_value_type::<Self>();
5485        unsafe {
5486            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5487        }
5488        value
5489    }
5490
5491    #[inline]
5492    fn value_type(&self) -> glib::Type {
5493        Self::static_type()
5494    }
5495}
5496
5497impl From<FilterChange> for glib::Value {
5498    #[inline]
5499    fn from(v: FilterChange) -> Self {
5500        skip_assert_initialized!();
5501        ToValue::to_value(&v)
5502    }
5503}
5504
5505/// Describes the known strictness of a filter.
5506///
5507/// Note that for filters where the strictness is not known,
5508/// `GTK_FILTER_MATCH_SOME` is always an acceptable value,
5509/// even if a filter does match all or no items.
5510#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5511#[non_exhaustive]
5512#[doc(alias = "GtkFilterMatch")]
5513pub enum FilterMatch {
5514    /// The filter matches some items,
5515    ///   [`FilterExt::match_()`][crate::prelude::FilterExt::match_()] may return true or false
5516    #[doc(alias = "GTK_FILTER_MATCH_SOME")]
5517    Some,
5518    /// The filter does not match any item,
5519    ///   [`FilterExt::match_()`][crate::prelude::FilterExt::match_()] will always return false
5520    #[doc(alias = "GTK_FILTER_MATCH_NONE")]
5521    None,
5522    /// The filter matches all items,
5523    ///   [`FilterExt::match_()`][crate::prelude::FilterExt::match_()] will alays return true
5524    #[doc(alias = "GTK_FILTER_MATCH_ALL")]
5525    All,
5526    #[doc(hidden)]
5527    __Unknown(i32),
5528}
5529
5530#[doc(hidden)]
5531impl IntoGlib for FilterMatch {
5532    type GlibType = ffi::GtkFilterMatch;
5533
5534    #[inline]
5535    fn into_glib(self) -> ffi::GtkFilterMatch {
5536        match self {
5537            Self::Some => ffi::GTK_FILTER_MATCH_SOME,
5538            Self::None => ffi::GTK_FILTER_MATCH_NONE,
5539            Self::All => ffi::GTK_FILTER_MATCH_ALL,
5540            Self::__Unknown(value) => value,
5541        }
5542    }
5543}
5544
5545#[doc(hidden)]
5546impl FromGlib<ffi::GtkFilterMatch> for FilterMatch {
5547    #[inline]
5548    unsafe fn from_glib(value: ffi::GtkFilterMatch) -> Self {
5549        skip_assert_initialized!();
5550
5551        match value {
5552            ffi::GTK_FILTER_MATCH_SOME => Self::Some,
5553            ffi::GTK_FILTER_MATCH_NONE => Self::None,
5554            ffi::GTK_FILTER_MATCH_ALL => Self::All,
5555            value => Self::__Unknown(value),
5556        }
5557    }
5558}
5559
5560impl StaticType for FilterMatch {
5561    #[inline]
5562    #[doc(alias = "gtk_filter_match_get_type")]
5563    fn static_type() -> glib::Type {
5564        unsafe { from_glib(ffi::gtk_filter_match_get_type()) }
5565    }
5566}
5567
5568impl glib::HasParamSpec for FilterMatch {
5569    type ParamSpec = glib::ParamSpecEnum;
5570    type SetValue = Self;
5571    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5572
5573    fn param_spec_builder() -> Self::BuilderFn {
5574        Self::ParamSpec::builder_with_default
5575    }
5576}
5577
5578impl glib::value::ValueType for FilterMatch {
5579    type Type = Self;
5580}
5581
5582unsafe impl<'a> glib::value::FromValue<'a> for FilterMatch {
5583    type Checker = glib::value::GenericValueTypeChecker<Self>;
5584
5585    #[inline]
5586    unsafe fn from_value(value: &'a glib::Value) -> Self {
5587        skip_assert_initialized!();
5588        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5589    }
5590}
5591
5592impl ToValue for FilterMatch {
5593    #[inline]
5594    fn to_value(&self) -> glib::Value {
5595        let mut value = glib::Value::for_value_type::<Self>();
5596        unsafe {
5597            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5598        }
5599        value
5600    }
5601
5602    #[inline]
5603    fn value_type(&self) -> glib::Type {
5604        Self::static_type()
5605    }
5606}
5607
5608impl From<FilterMatch> for glib::Value {
5609    #[inline]
5610    fn from(v: FilterMatch) -> Self {
5611        skip_assert_initialized!();
5612        ToValue::to_value(&v)
5613    }
5614}
5615
5616/// The level of granularity for the font selection.
5617///
5618/// Depending on this value, the [`pango::FontDescription`][crate::pango::FontDescription] that
5619/// is returned by [`FontDialogButton::font_desc()`][crate::FontDialogButton::font_desc()]
5620/// will have more or less fields set.
5621#[cfg(feature = "v4_10")]
5622#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5623#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5624#[non_exhaustive]
5625#[doc(alias = "GtkFontLevel")]
5626pub enum FontLevel {
5627    /// Select a font family
5628    #[doc(alias = "GTK_FONT_LEVEL_FAMILY")]
5629    Family,
5630    /// Select a font face (i.e. a family and a style)
5631    #[doc(alias = "GTK_FONT_LEVEL_FACE")]
5632    Face,
5633    /// Select a font (i.e. a face with a size, and possibly font variations)
5634    #[doc(alias = "GTK_FONT_LEVEL_FONT")]
5635    Font,
5636    /// Select a font and font features
5637    #[doc(alias = "GTK_FONT_LEVEL_FEATURES")]
5638    Features,
5639    #[doc(hidden)]
5640    __Unknown(i32),
5641}
5642
5643#[cfg(feature = "v4_10")]
5644#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5645#[doc(hidden)]
5646impl IntoGlib for FontLevel {
5647    type GlibType = ffi::GtkFontLevel;
5648
5649    #[inline]
5650    fn into_glib(self) -> ffi::GtkFontLevel {
5651        match self {
5652            Self::Family => ffi::GTK_FONT_LEVEL_FAMILY,
5653            Self::Face => ffi::GTK_FONT_LEVEL_FACE,
5654            Self::Font => ffi::GTK_FONT_LEVEL_FONT,
5655            Self::Features => ffi::GTK_FONT_LEVEL_FEATURES,
5656            Self::__Unknown(value) => value,
5657        }
5658    }
5659}
5660
5661#[cfg(feature = "v4_10")]
5662#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5663#[doc(hidden)]
5664impl FromGlib<ffi::GtkFontLevel> for FontLevel {
5665    #[inline]
5666    unsafe fn from_glib(value: ffi::GtkFontLevel) -> Self {
5667        skip_assert_initialized!();
5668
5669        match value {
5670            ffi::GTK_FONT_LEVEL_FAMILY => Self::Family,
5671            ffi::GTK_FONT_LEVEL_FACE => Self::Face,
5672            ffi::GTK_FONT_LEVEL_FONT => Self::Font,
5673            ffi::GTK_FONT_LEVEL_FEATURES => Self::Features,
5674            value => Self::__Unknown(value),
5675        }
5676    }
5677}
5678
5679#[cfg(feature = "v4_10")]
5680#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5681impl StaticType for FontLevel {
5682    #[inline]
5683    #[doc(alias = "gtk_font_level_get_type")]
5684    fn static_type() -> glib::Type {
5685        unsafe { from_glib(ffi::gtk_font_level_get_type()) }
5686    }
5687}
5688
5689#[cfg(feature = "v4_10")]
5690#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5691impl glib::HasParamSpec for FontLevel {
5692    type ParamSpec = glib::ParamSpecEnum;
5693    type SetValue = Self;
5694    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5695
5696    fn param_spec_builder() -> Self::BuilderFn {
5697        Self::ParamSpec::builder_with_default
5698    }
5699}
5700
5701#[cfg(feature = "v4_10")]
5702#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5703impl glib::value::ValueType for FontLevel {
5704    type Type = Self;
5705}
5706
5707#[cfg(feature = "v4_10")]
5708#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5709unsafe impl<'a> glib::value::FromValue<'a> for FontLevel {
5710    type Checker = glib::value::GenericValueTypeChecker<Self>;
5711
5712    #[inline]
5713    unsafe fn from_value(value: &'a glib::Value) -> Self {
5714        skip_assert_initialized!();
5715        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5716    }
5717}
5718
5719#[cfg(feature = "v4_10")]
5720#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5721impl ToValue for FontLevel {
5722    #[inline]
5723    fn to_value(&self) -> glib::Value {
5724        let mut value = glib::Value::for_value_type::<Self>();
5725        unsafe {
5726            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5727        }
5728        value
5729    }
5730
5731    #[inline]
5732    fn value_type(&self) -> glib::Type {
5733        Self::static_type()
5734    }
5735}
5736
5737#[cfg(feature = "v4_10")]
5738#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5739impl From<FontLevel> for glib::Value {
5740    #[inline]
5741    fn from(v: FontLevel) -> Self {
5742        skip_assert_initialized!();
5743        ToValue::to_value(&v)
5744    }
5745}
5746
5747/// Values for the [`gtk-font-rendering`][struct@crate::Settings#gtk-font-rendering] setting
5748/// that influence how GTK renders fonts.
5749#[cfg(feature = "v4_16")]
5750#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5751#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5752#[non_exhaustive]
5753#[doc(alias = "GtkFontRendering")]
5754pub enum FontRendering {
5755    /// Set up font rendering automatically,
5756    ///   taking factors like screen resolution and scale into account
5757    #[doc(alias = "GTK_FONT_RENDERING_AUTOMATIC")]
5758    Automatic,
5759    /// Follow low-level font-related settings
5760    ///   when configuring font rendering
5761    #[doc(alias = "GTK_FONT_RENDERING_MANUAL")]
5762    Manual,
5763    #[doc(hidden)]
5764    __Unknown(i32),
5765}
5766
5767#[cfg(feature = "v4_16")]
5768#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5769#[doc(hidden)]
5770impl IntoGlib for FontRendering {
5771    type GlibType = ffi::GtkFontRendering;
5772
5773    #[inline]
5774    fn into_glib(self) -> ffi::GtkFontRendering {
5775        match self {
5776            Self::Automatic => ffi::GTK_FONT_RENDERING_AUTOMATIC,
5777            Self::Manual => ffi::GTK_FONT_RENDERING_MANUAL,
5778            Self::__Unknown(value) => value,
5779        }
5780    }
5781}
5782
5783#[cfg(feature = "v4_16")]
5784#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5785#[doc(hidden)]
5786impl FromGlib<ffi::GtkFontRendering> for FontRendering {
5787    #[inline]
5788    unsafe fn from_glib(value: ffi::GtkFontRendering) -> Self {
5789        skip_assert_initialized!();
5790
5791        match value {
5792            ffi::GTK_FONT_RENDERING_AUTOMATIC => Self::Automatic,
5793            ffi::GTK_FONT_RENDERING_MANUAL => Self::Manual,
5794            value => Self::__Unknown(value),
5795        }
5796    }
5797}
5798
5799#[cfg(feature = "v4_16")]
5800#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5801impl StaticType for FontRendering {
5802    #[inline]
5803    #[doc(alias = "gtk_font_rendering_get_type")]
5804    fn static_type() -> glib::Type {
5805        unsafe { from_glib(ffi::gtk_font_rendering_get_type()) }
5806    }
5807}
5808
5809#[cfg(feature = "v4_16")]
5810#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5811impl glib::HasParamSpec for FontRendering {
5812    type ParamSpec = glib::ParamSpecEnum;
5813    type SetValue = Self;
5814    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5815
5816    fn param_spec_builder() -> Self::BuilderFn {
5817        Self::ParamSpec::builder_with_default
5818    }
5819}
5820
5821#[cfg(feature = "v4_16")]
5822#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5823impl glib::value::ValueType for FontRendering {
5824    type Type = Self;
5825}
5826
5827#[cfg(feature = "v4_16")]
5828#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5829unsafe impl<'a> glib::value::FromValue<'a> for FontRendering {
5830    type Checker = glib::value::GenericValueTypeChecker<Self>;
5831
5832    #[inline]
5833    unsafe fn from_value(value: &'a glib::Value) -> Self {
5834        skip_assert_initialized!();
5835        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5836    }
5837}
5838
5839#[cfg(feature = "v4_16")]
5840#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5841impl ToValue for FontRendering {
5842    #[inline]
5843    fn to_value(&self) -> glib::Value {
5844        let mut value = glib::Value::for_value_type::<Self>();
5845        unsafe {
5846            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5847        }
5848        value
5849    }
5850
5851    #[inline]
5852    fn value_type(&self) -> glib::Type {
5853        Self::static_type()
5854    }
5855}
5856
5857#[cfg(feature = "v4_16")]
5858#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5859impl From<FontRendering> for glib::Value {
5860    #[inline]
5861    fn from(v: FontRendering) -> Self {
5862        skip_assert_initialized!();
5863        ToValue::to_value(&v)
5864    }
5865}
5866
5867/// Represents the state of graphics offloading.
5868#[cfg(feature = "v4_14")]
5869#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5870#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5871#[non_exhaustive]
5872#[doc(alias = "GtkGraphicsOffloadEnabled")]
5873pub enum GraphicsOffloadEnabled {
5874    /// Graphics offloading is enabled.
5875    #[doc(alias = "GTK_GRAPHICS_OFFLOAD_ENABLED")]
5876    Enabled,
5877    /// Graphics offloading is disabled.
5878    #[doc(alias = "GTK_GRAPHICS_OFFLOAD_DISABLED")]
5879    Disabled,
5880    #[doc(hidden)]
5881    __Unknown(i32),
5882}
5883
5884#[cfg(feature = "v4_14")]
5885#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5886#[doc(hidden)]
5887impl IntoGlib for GraphicsOffloadEnabled {
5888    type GlibType = ffi::GtkGraphicsOffloadEnabled;
5889
5890    #[inline]
5891    fn into_glib(self) -> ffi::GtkGraphicsOffloadEnabled {
5892        match self {
5893            Self::Enabled => ffi::GTK_GRAPHICS_OFFLOAD_ENABLED,
5894            Self::Disabled => ffi::GTK_GRAPHICS_OFFLOAD_DISABLED,
5895            Self::__Unknown(value) => value,
5896        }
5897    }
5898}
5899
5900#[cfg(feature = "v4_14")]
5901#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5902#[doc(hidden)]
5903impl FromGlib<ffi::GtkGraphicsOffloadEnabled> for GraphicsOffloadEnabled {
5904    #[inline]
5905    unsafe fn from_glib(value: ffi::GtkGraphicsOffloadEnabled) -> Self {
5906        skip_assert_initialized!();
5907
5908        match value {
5909            ffi::GTK_GRAPHICS_OFFLOAD_ENABLED => Self::Enabled,
5910            ffi::GTK_GRAPHICS_OFFLOAD_DISABLED => Self::Disabled,
5911            value => Self::__Unknown(value),
5912        }
5913    }
5914}
5915
5916#[cfg(feature = "v4_14")]
5917#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5918impl StaticType for GraphicsOffloadEnabled {
5919    #[inline]
5920    #[doc(alias = "gtk_graphics_offload_enabled_get_type")]
5921    fn static_type() -> glib::Type {
5922        unsafe { from_glib(ffi::gtk_graphics_offload_enabled_get_type()) }
5923    }
5924}
5925
5926#[cfg(feature = "v4_14")]
5927#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5928impl glib::HasParamSpec for GraphicsOffloadEnabled {
5929    type ParamSpec = glib::ParamSpecEnum;
5930    type SetValue = Self;
5931    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5932
5933    fn param_spec_builder() -> Self::BuilderFn {
5934        Self::ParamSpec::builder_with_default
5935    }
5936}
5937
5938#[cfg(feature = "v4_14")]
5939#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5940impl glib::value::ValueType for GraphicsOffloadEnabled {
5941    type Type = Self;
5942}
5943
5944#[cfg(feature = "v4_14")]
5945#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5946unsafe impl<'a> glib::value::FromValue<'a> for GraphicsOffloadEnabled {
5947    type Checker = glib::value::GenericValueTypeChecker<Self>;
5948
5949    #[inline]
5950    unsafe fn from_value(value: &'a glib::Value) -> Self {
5951        skip_assert_initialized!();
5952        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5953    }
5954}
5955
5956#[cfg(feature = "v4_14")]
5957#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5958impl ToValue for GraphicsOffloadEnabled {
5959    #[inline]
5960    fn to_value(&self) -> glib::Value {
5961        let mut value = glib::Value::for_value_type::<Self>();
5962        unsafe {
5963            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5964        }
5965        value
5966    }
5967
5968    #[inline]
5969    fn value_type(&self) -> glib::Type {
5970        Self::static_type()
5971    }
5972}
5973
5974#[cfg(feature = "v4_14")]
5975#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5976impl From<GraphicsOffloadEnabled> for glib::Value {
5977    #[inline]
5978    fn from(v: GraphicsOffloadEnabled) -> Self {
5979        skip_assert_initialized!();
5980        ToValue::to_value(&v)
5981    }
5982}
5983
5984/// Built-in icon sizes.
5985///
5986/// Icon sizes default to being inherited. Where they cannot be
5987/// inherited, text size is the default.
5988///
5989/// All widgets which use [`IconSize`][crate::IconSize] set the normal-icons or
5990/// large-icons style classes correspondingly, and let themes
5991/// determine the actual size to be used with the
5992/// `-gtk-icon-size` CSS property.
5993#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5994#[non_exhaustive]
5995#[doc(alias = "GtkIconSize")]
5996pub enum IconSize {
5997    /// Keep the size of the parent element
5998    #[doc(alias = "GTK_ICON_SIZE_INHERIT")]
5999    Inherit,
6000    /// Size similar to text size
6001    #[doc(alias = "GTK_ICON_SIZE_NORMAL")]
6002    Normal,
6003    /// Large size, for example in an icon view
6004    #[doc(alias = "GTK_ICON_SIZE_LARGE")]
6005    Large,
6006    #[doc(hidden)]
6007    __Unknown(i32),
6008}
6009
6010#[doc(hidden)]
6011impl IntoGlib for IconSize {
6012    type GlibType = ffi::GtkIconSize;
6013
6014    #[inline]
6015    fn into_glib(self) -> ffi::GtkIconSize {
6016        match self {
6017            Self::Inherit => ffi::GTK_ICON_SIZE_INHERIT,
6018            Self::Normal => ffi::GTK_ICON_SIZE_NORMAL,
6019            Self::Large => ffi::GTK_ICON_SIZE_LARGE,
6020            Self::__Unknown(value) => value,
6021        }
6022    }
6023}
6024
6025#[doc(hidden)]
6026impl FromGlib<ffi::GtkIconSize> for IconSize {
6027    #[inline]
6028    unsafe fn from_glib(value: ffi::GtkIconSize) -> Self {
6029        skip_assert_initialized!();
6030
6031        match value {
6032            ffi::GTK_ICON_SIZE_INHERIT => Self::Inherit,
6033            ffi::GTK_ICON_SIZE_NORMAL => Self::Normal,
6034            ffi::GTK_ICON_SIZE_LARGE => Self::Large,
6035            value => Self::__Unknown(value),
6036        }
6037    }
6038}
6039
6040impl StaticType for IconSize {
6041    #[inline]
6042    #[doc(alias = "gtk_icon_size_get_type")]
6043    fn static_type() -> glib::Type {
6044        unsafe { from_glib(ffi::gtk_icon_size_get_type()) }
6045    }
6046}
6047
6048impl glib::HasParamSpec for IconSize {
6049    type ParamSpec = glib::ParamSpecEnum;
6050    type SetValue = Self;
6051    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6052
6053    fn param_spec_builder() -> Self::BuilderFn {
6054        Self::ParamSpec::builder_with_default
6055    }
6056}
6057
6058impl glib::value::ValueType for IconSize {
6059    type Type = Self;
6060}
6061
6062unsafe impl<'a> glib::value::FromValue<'a> for IconSize {
6063    type Checker = glib::value::GenericValueTypeChecker<Self>;
6064
6065    #[inline]
6066    unsafe fn from_value(value: &'a glib::Value) -> Self {
6067        skip_assert_initialized!();
6068        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6069    }
6070}
6071
6072impl ToValue for IconSize {
6073    #[inline]
6074    fn to_value(&self) -> glib::Value {
6075        let mut value = glib::Value::for_value_type::<Self>();
6076        unsafe {
6077            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6078        }
6079        value
6080    }
6081
6082    #[inline]
6083    fn value_type(&self) -> glib::Type {
6084        Self::static_type()
6085    }
6086}
6087
6088impl From<IconSize> for glib::Value {
6089    #[inline]
6090    fn from(v: IconSize) -> Self {
6091        skip_assert_initialized!();
6092        ToValue::to_value(&v)
6093    }
6094}
6095
6096/// Error codes for [`IconTheme`][crate::IconTheme] operations.
6097#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6098#[non_exhaustive]
6099#[doc(alias = "GtkIconThemeError")]
6100pub enum IconThemeError {
6101    /// The icon specified does not exist in the theme
6102    #[doc(alias = "GTK_ICON_THEME_NOT_FOUND")]
6103    NotFound,
6104    /// An unspecified error occurred.
6105    #[doc(alias = "GTK_ICON_THEME_FAILED")]
6106    Failed,
6107    #[doc(hidden)]
6108    __Unknown(i32),
6109}
6110
6111#[doc(hidden)]
6112impl IntoGlib for IconThemeError {
6113    type GlibType = ffi::GtkIconThemeError;
6114
6115    #[inline]
6116    fn into_glib(self) -> ffi::GtkIconThemeError {
6117        match self {
6118            Self::NotFound => ffi::GTK_ICON_THEME_NOT_FOUND,
6119            Self::Failed => ffi::GTK_ICON_THEME_FAILED,
6120            Self::__Unknown(value) => value,
6121        }
6122    }
6123}
6124
6125#[doc(hidden)]
6126impl FromGlib<ffi::GtkIconThemeError> for IconThemeError {
6127    #[inline]
6128    unsafe fn from_glib(value: ffi::GtkIconThemeError) -> Self {
6129        skip_assert_initialized!();
6130
6131        match value {
6132            ffi::GTK_ICON_THEME_NOT_FOUND => Self::NotFound,
6133            ffi::GTK_ICON_THEME_FAILED => Self::Failed,
6134            value => Self::__Unknown(value),
6135        }
6136    }
6137}
6138
6139impl glib::error::ErrorDomain for IconThemeError {
6140    #[inline]
6141    fn domain() -> glib::Quark {
6142        skip_assert_initialized!();
6143
6144        unsafe { from_glib(ffi::gtk_icon_theme_error_quark()) }
6145    }
6146
6147    #[inline]
6148    fn code(self) -> i32 {
6149        self.into_glib()
6150    }
6151
6152    #[inline]
6153    #[allow(clippy::match_single_binding)]
6154    fn from(code: i32) -> Option<Self> {
6155        skip_assert_initialized!();
6156        match unsafe { from_glib(code) } {
6157            Self::__Unknown(_) => Some(Self::Failed),
6158            value => Some(value),
6159        }
6160    }
6161}
6162
6163impl StaticType for IconThemeError {
6164    #[inline]
6165    #[doc(alias = "gtk_icon_theme_error_get_type")]
6166    fn static_type() -> glib::Type {
6167        unsafe { from_glib(ffi::gtk_icon_theme_error_get_type()) }
6168    }
6169}
6170
6171impl glib::HasParamSpec for IconThemeError {
6172    type ParamSpec = glib::ParamSpecEnum;
6173    type SetValue = Self;
6174    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6175
6176    fn param_spec_builder() -> Self::BuilderFn {
6177        Self::ParamSpec::builder_with_default
6178    }
6179}
6180
6181impl glib::value::ValueType for IconThemeError {
6182    type Type = Self;
6183}
6184
6185unsafe impl<'a> glib::value::FromValue<'a> for IconThemeError {
6186    type Checker = glib::value::GenericValueTypeChecker<Self>;
6187
6188    #[inline]
6189    unsafe fn from_value(value: &'a glib::Value) -> Self {
6190        skip_assert_initialized!();
6191        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6192    }
6193}
6194
6195impl ToValue for IconThemeError {
6196    #[inline]
6197    fn to_value(&self) -> glib::Value {
6198        let mut value = glib::Value::for_value_type::<Self>();
6199        unsafe {
6200            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6201        }
6202        value
6203    }
6204
6205    #[inline]
6206    fn value_type(&self) -> glib::Type {
6207        Self::static_type()
6208    }
6209}
6210
6211impl From<IconThemeError> for glib::Value {
6212    #[inline]
6213    fn from(v: IconThemeError) -> Self {
6214        skip_assert_initialized!();
6215        ToValue::to_value(&v)
6216    }
6217}
6218
6219/// An enum for determining where a dropped item goes.
6220///
6221/// # Deprecated since 4.20
6222///
6223/// There is no replacement.
6224#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
6225#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6226#[non_exhaustive]
6227#[doc(alias = "GtkIconViewDropPosition")]
6228pub enum IconViewDropPosition {
6229    /// no drop possible
6230    #[doc(alias = "GTK_ICON_VIEW_NO_DROP")]
6231    NoDrop,
6232    /// dropped item replaces the item
6233    #[doc(alias = "GTK_ICON_VIEW_DROP_INTO")]
6234    DropInto,
6235    /// dropped item is inserted to the left
6236    #[doc(alias = "GTK_ICON_VIEW_DROP_LEFT")]
6237    DropLeft,
6238    /// dropped item is inserted to the right
6239    #[doc(alias = "GTK_ICON_VIEW_DROP_RIGHT")]
6240    DropRight,
6241    /// dropped item is inserted above
6242    #[doc(alias = "GTK_ICON_VIEW_DROP_ABOVE")]
6243    DropAbove,
6244    /// dropped item is inserted below
6245    #[doc(alias = "GTK_ICON_VIEW_DROP_BELOW")]
6246    DropBelow,
6247    #[doc(hidden)]
6248    __Unknown(i32),
6249}
6250
6251#[allow(deprecated)]
6252#[doc(hidden)]
6253impl IntoGlib for IconViewDropPosition {
6254    type GlibType = ffi::GtkIconViewDropPosition;
6255
6256    #[inline]
6257    fn into_glib(self) -> ffi::GtkIconViewDropPosition {
6258        match self {
6259            Self::NoDrop => ffi::GTK_ICON_VIEW_NO_DROP,
6260            Self::DropInto => ffi::GTK_ICON_VIEW_DROP_INTO,
6261            Self::DropLeft => ffi::GTK_ICON_VIEW_DROP_LEFT,
6262            Self::DropRight => ffi::GTK_ICON_VIEW_DROP_RIGHT,
6263            Self::DropAbove => ffi::GTK_ICON_VIEW_DROP_ABOVE,
6264            Self::DropBelow => ffi::GTK_ICON_VIEW_DROP_BELOW,
6265            Self::__Unknown(value) => value,
6266        }
6267    }
6268}
6269
6270#[allow(deprecated)]
6271#[doc(hidden)]
6272impl FromGlib<ffi::GtkIconViewDropPosition> for IconViewDropPosition {
6273    #[inline]
6274    unsafe fn from_glib(value: ffi::GtkIconViewDropPosition) -> Self {
6275        skip_assert_initialized!();
6276
6277        match value {
6278            ffi::GTK_ICON_VIEW_NO_DROP => Self::NoDrop,
6279            ffi::GTK_ICON_VIEW_DROP_INTO => Self::DropInto,
6280            ffi::GTK_ICON_VIEW_DROP_LEFT => Self::DropLeft,
6281            ffi::GTK_ICON_VIEW_DROP_RIGHT => Self::DropRight,
6282            ffi::GTK_ICON_VIEW_DROP_ABOVE => Self::DropAbove,
6283            ffi::GTK_ICON_VIEW_DROP_BELOW => Self::DropBelow,
6284            value => Self::__Unknown(value),
6285        }
6286    }
6287}
6288
6289#[allow(deprecated)]
6290impl StaticType for IconViewDropPosition {
6291    #[inline]
6292    #[doc(alias = "gtk_icon_view_drop_position_get_type")]
6293    fn static_type() -> glib::Type {
6294        unsafe { from_glib(ffi::gtk_icon_view_drop_position_get_type()) }
6295    }
6296}
6297
6298#[allow(deprecated)]
6299impl glib::HasParamSpec for IconViewDropPosition {
6300    type ParamSpec = glib::ParamSpecEnum;
6301    type SetValue = Self;
6302    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6303
6304    fn param_spec_builder() -> Self::BuilderFn {
6305        Self::ParamSpec::builder_with_default
6306    }
6307}
6308
6309#[allow(deprecated)]
6310impl glib::value::ValueType for IconViewDropPosition {
6311    type Type = Self;
6312}
6313
6314#[allow(deprecated)]
6315unsafe impl<'a> glib::value::FromValue<'a> for IconViewDropPosition {
6316    type Checker = glib::value::GenericValueTypeChecker<Self>;
6317
6318    #[inline]
6319    unsafe fn from_value(value: &'a glib::Value) -> Self {
6320        skip_assert_initialized!();
6321        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6322    }
6323}
6324
6325#[allow(deprecated)]
6326impl ToValue for IconViewDropPosition {
6327    #[inline]
6328    fn to_value(&self) -> glib::Value {
6329        let mut value = glib::Value::for_value_type::<Self>();
6330        unsafe {
6331            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6332        }
6333        value
6334    }
6335
6336    #[inline]
6337    fn value_type(&self) -> glib::Type {
6338        Self::static_type()
6339    }
6340}
6341
6342#[allow(deprecated)]
6343impl From<IconViewDropPosition> for glib::Value {
6344    #[inline]
6345    fn from(v: IconViewDropPosition) -> Self {
6346        skip_assert_initialized!();
6347        ToValue::to_value(&v)
6348    }
6349}
6350
6351/// Describes the image data representation used by a [`Image`][crate::Image].
6352///
6353/// If you want to get the image from the widget, you can only get the
6354/// currently-stored representation; for instance, if the gtk_image_get_storage_type()
6355/// returns [`Paintable`][Self::Paintable], then you can call gtk_image_get_paintable().
6356///
6357/// For empty images, you can request any storage type (call any of the "get"
6358/// functions), but they will all return [`None`] values.
6359#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6360#[non_exhaustive]
6361#[doc(alias = "GtkImageType")]
6362pub enum ImageType {
6363    /// there is no image displayed by the widget
6364    #[doc(alias = "GTK_IMAGE_EMPTY")]
6365    Empty,
6366    /// the widget contains a named icon
6367    #[doc(alias = "GTK_IMAGE_ICON_NAME")]
6368    IconName,
6369    /// the widget contains a `GIcon`
6370    #[doc(alias = "GTK_IMAGE_GICON")]
6371    Gicon,
6372    /// the widget contains a [`gdk::Paintable`][crate::gdk::Paintable]
6373    #[doc(alias = "GTK_IMAGE_PAINTABLE")]
6374    Paintable,
6375    #[doc(hidden)]
6376    __Unknown(i32),
6377}
6378
6379#[doc(hidden)]
6380impl IntoGlib for ImageType {
6381    type GlibType = ffi::GtkImageType;
6382
6383    #[inline]
6384    fn into_glib(self) -> ffi::GtkImageType {
6385        match self {
6386            Self::Empty => ffi::GTK_IMAGE_EMPTY,
6387            Self::IconName => ffi::GTK_IMAGE_ICON_NAME,
6388            Self::Gicon => ffi::GTK_IMAGE_GICON,
6389            Self::Paintable => ffi::GTK_IMAGE_PAINTABLE,
6390            Self::__Unknown(value) => value,
6391        }
6392    }
6393}
6394
6395#[doc(hidden)]
6396impl FromGlib<ffi::GtkImageType> for ImageType {
6397    #[inline]
6398    unsafe fn from_glib(value: ffi::GtkImageType) -> Self {
6399        skip_assert_initialized!();
6400
6401        match value {
6402            ffi::GTK_IMAGE_EMPTY => Self::Empty,
6403            ffi::GTK_IMAGE_ICON_NAME => Self::IconName,
6404            ffi::GTK_IMAGE_GICON => Self::Gicon,
6405            ffi::GTK_IMAGE_PAINTABLE => Self::Paintable,
6406            value => Self::__Unknown(value),
6407        }
6408    }
6409}
6410
6411impl StaticType for ImageType {
6412    #[inline]
6413    #[doc(alias = "gtk_image_type_get_type")]
6414    fn static_type() -> glib::Type {
6415        unsafe { from_glib(ffi::gtk_image_type_get_type()) }
6416    }
6417}
6418
6419impl glib::HasParamSpec for ImageType {
6420    type ParamSpec = glib::ParamSpecEnum;
6421    type SetValue = Self;
6422    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6423
6424    fn param_spec_builder() -> Self::BuilderFn {
6425        Self::ParamSpec::builder_with_default
6426    }
6427}
6428
6429impl glib::value::ValueType for ImageType {
6430    type Type = Self;
6431}
6432
6433unsafe impl<'a> glib::value::FromValue<'a> for ImageType {
6434    type Checker = glib::value::GenericValueTypeChecker<Self>;
6435
6436    #[inline]
6437    unsafe fn from_value(value: &'a glib::Value) -> Self {
6438        skip_assert_initialized!();
6439        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6440    }
6441}
6442
6443impl ToValue for ImageType {
6444    #[inline]
6445    fn to_value(&self) -> glib::Value {
6446        let mut value = glib::Value::for_value_type::<Self>();
6447        unsafe {
6448            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6449        }
6450        value
6451    }
6452
6453    #[inline]
6454    fn value_type(&self) -> glib::Type {
6455        Self::static_type()
6456    }
6457}
6458
6459impl From<ImageType> for glib::Value {
6460    #[inline]
6461    fn from(v: ImageType) -> Self {
6462        skip_assert_initialized!();
6463        ToValue::to_value(&v)
6464    }
6465}
6466
6467/// Describes primary purpose of the input widget.
6468///
6469/// This information is useful for on-screen keyboards and similar input
6470/// methods to decide which keys should be presented to the user.
6471///
6472/// Note that the purpose is not meant to impose a totally strict rule
6473/// about allowed characters, and does not replace input validation.
6474/// It is fine for an on-screen keyboard to let the user override the
6475/// character set restriction that is expressed by the purpose. The
6476/// application is expected to validate the entry contents, even if
6477/// it specified a purpose.
6478///
6479/// The difference between [`Digits`][Self::Digits] and
6480/// [`Number`][Self::Number] is that the former accepts only digits
6481/// while the latter also some punctuation (like commas or points, plus,
6482/// minus) and “e” or “E” as in 3.14E+000.
6483///
6484/// This enumeration may be extended in the future; input methods should
6485/// interpret unknown values as “free form”.
6486#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6487#[non_exhaustive]
6488#[doc(alias = "GtkInputPurpose")]
6489pub enum InputPurpose {
6490    /// Allow any character
6491    #[doc(alias = "GTK_INPUT_PURPOSE_FREE_FORM")]
6492    FreeForm,
6493    /// Allow only alphabetic characters
6494    #[doc(alias = "GTK_INPUT_PURPOSE_ALPHA")]
6495    Alpha,
6496    /// Allow only digits
6497    #[doc(alias = "GTK_INPUT_PURPOSE_DIGITS")]
6498    Digits,
6499    /// Edited field expects numbers
6500    #[doc(alias = "GTK_INPUT_PURPOSE_NUMBER")]
6501    Number,
6502    /// Edited field expects phone number
6503    #[doc(alias = "GTK_INPUT_PURPOSE_PHONE")]
6504    Phone,
6505    /// Edited field expects URL
6506    #[doc(alias = "GTK_INPUT_PURPOSE_URL")]
6507    Url,
6508    /// Edited field expects email address
6509    #[doc(alias = "GTK_INPUT_PURPOSE_EMAIL")]
6510    Email,
6511    /// Edited field expects the name of a person
6512    #[doc(alias = "GTK_INPUT_PURPOSE_NAME")]
6513    Name,
6514    /// Like [`FreeForm`][Self::FreeForm], but characters are hidden
6515    #[doc(alias = "GTK_INPUT_PURPOSE_PASSWORD")]
6516    Password,
6517    /// Like [`Digits`][Self::Digits], but characters are hidden
6518    #[doc(alias = "GTK_INPUT_PURPOSE_PIN")]
6519    Pin,
6520    /// Allow any character, in addition to control codes
6521    #[doc(alias = "GTK_INPUT_PURPOSE_TERMINAL")]
6522    Terminal,
6523    #[doc(hidden)]
6524    __Unknown(i32),
6525}
6526
6527#[doc(hidden)]
6528impl IntoGlib for InputPurpose {
6529    type GlibType = ffi::GtkInputPurpose;
6530
6531    #[inline]
6532    fn into_glib(self) -> ffi::GtkInputPurpose {
6533        match self {
6534            Self::FreeForm => ffi::GTK_INPUT_PURPOSE_FREE_FORM,
6535            Self::Alpha => ffi::GTK_INPUT_PURPOSE_ALPHA,
6536            Self::Digits => ffi::GTK_INPUT_PURPOSE_DIGITS,
6537            Self::Number => ffi::GTK_INPUT_PURPOSE_NUMBER,
6538            Self::Phone => ffi::GTK_INPUT_PURPOSE_PHONE,
6539            Self::Url => ffi::GTK_INPUT_PURPOSE_URL,
6540            Self::Email => ffi::GTK_INPUT_PURPOSE_EMAIL,
6541            Self::Name => ffi::GTK_INPUT_PURPOSE_NAME,
6542            Self::Password => ffi::GTK_INPUT_PURPOSE_PASSWORD,
6543            Self::Pin => ffi::GTK_INPUT_PURPOSE_PIN,
6544            Self::Terminal => ffi::GTK_INPUT_PURPOSE_TERMINAL,
6545            Self::__Unknown(value) => value,
6546        }
6547    }
6548}
6549
6550#[doc(hidden)]
6551impl FromGlib<ffi::GtkInputPurpose> for InputPurpose {
6552    #[inline]
6553    unsafe fn from_glib(value: ffi::GtkInputPurpose) -> Self {
6554        skip_assert_initialized!();
6555
6556        match value {
6557            ffi::GTK_INPUT_PURPOSE_FREE_FORM => Self::FreeForm,
6558            ffi::GTK_INPUT_PURPOSE_ALPHA => Self::Alpha,
6559            ffi::GTK_INPUT_PURPOSE_DIGITS => Self::Digits,
6560            ffi::GTK_INPUT_PURPOSE_NUMBER => Self::Number,
6561            ffi::GTK_INPUT_PURPOSE_PHONE => Self::Phone,
6562            ffi::GTK_INPUT_PURPOSE_URL => Self::Url,
6563            ffi::GTK_INPUT_PURPOSE_EMAIL => Self::Email,
6564            ffi::GTK_INPUT_PURPOSE_NAME => Self::Name,
6565            ffi::GTK_INPUT_PURPOSE_PASSWORD => Self::Password,
6566            ffi::GTK_INPUT_PURPOSE_PIN => Self::Pin,
6567            ffi::GTK_INPUT_PURPOSE_TERMINAL => Self::Terminal,
6568            value => Self::__Unknown(value),
6569        }
6570    }
6571}
6572
6573impl StaticType for InputPurpose {
6574    #[inline]
6575    #[doc(alias = "gtk_input_purpose_get_type")]
6576    fn static_type() -> glib::Type {
6577        unsafe { from_glib(ffi::gtk_input_purpose_get_type()) }
6578    }
6579}
6580
6581impl glib::HasParamSpec for InputPurpose {
6582    type ParamSpec = glib::ParamSpecEnum;
6583    type SetValue = Self;
6584    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6585
6586    fn param_spec_builder() -> Self::BuilderFn {
6587        Self::ParamSpec::builder_with_default
6588    }
6589}
6590
6591impl glib::value::ValueType for InputPurpose {
6592    type Type = Self;
6593}
6594
6595unsafe impl<'a> glib::value::FromValue<'a> for InputPurpose {
6596    type Checker = glib::value::GenericValueTypeChecker<Self>;
6597
6598    #[inline]
6599    unsafe fn from_value(value: &'a glib::Value) -> Self {
6600        skip_assert_initialized!();
6601        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6602    }
6603}
6604
6605impl ToValue for InputPurpose {
6606    #[inline]
6607    fn to_value(&self) -> glib::Value {
6608        let mut value = glib::Value::for_value_type::<Self>();
6609        unsafe {
6610            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6611        }
6612        value
6613    }
6614
6615    #[inline]
6616    fn value_type(&self) -> glib::Type {
6617        Self::static_type()
6618    }
6619}
6620
6621impl From<InputPurpose> for glib::Value {
6622    #[inline]
6623    fn from(v: InputPurpose) -> Self {
6624        skip_assert_initialized!();
6625        ToValue::to_value(&v)
6626    }
6627}
6628
6629/// The different methods to handle text in #GtkInscription when it doesn't
6630/// fit the available space.
6631#[cfg(feature = "v4_8")]
6632#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6633#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6634#[non_exhaustive]
6635#[doc(alias = "GtkInscriptionOverflow")]
6636pub enum InscriptionOverflow {
6637    /// Clip the remaining text
6638    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_CLIP")]
6639    Clip,
6640    /// Omit characters at the start of the text
6641    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_START")]
6642    EllipsizeStart,
6643    /// Omit characters at the middle of the text
6644    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_MIDDLE")]
6645    EllipsizeMiddle,
6646    /// Omit characters at the end of the text
6647    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_END")]
6648    EllipsizeEnd,
6649    #[doc(hidden)]
6650    __Unknown(i32),
6651}
6652
6653#[cfg(feature = "v4_8")]
6654#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6655#[doc(hidden)]
6656impl IntoGlib for InscriptionOverflow {
6657    type GlibType = ffi::GtkInscriptionOverflow;
6658
6659    #[inline]
6660    fn into_glib(self) -> ffi::GtkInscriptionOverflow {
6661        match self {
6662            Self::Clip => ffi::GTK_INSCRIPTION_OVERFLOW_CLIP,
6663            Self::EllipsizeStart => ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_START,
6664            Self::EllipsizeMiddle => ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_MIDDLE,
6665            Self::EllipsizeEnd => ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_END,
6666            Self::__Unknown(value) => value,
6667        }
6668    }
6669}
6670
6671#[cfg(feature = "v4_8")]
6672#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6673#[doc(hidden)]
6674impl FromGlib<ffi::GtkInscriptionOverflow> for InscriptionOverflow {
6675    #[inline]
6676    unsafe fn from_glib(value: ffi::GtkInscriptionOverflow) -> Self {
6677        skip_assert_initialized!();
6678
6679        match value {
6680            ffi::GTK_INSCRIPTION_OVERFLOW_CLIP => Self::Clip,
6681            ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_START => Self::EllipsizeStart,
6682            ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_MIDDLE => Self::EllipsizeMiddle,
6683            ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_END => Self::EllipsizeEnd,
6684            value => Self::__Unknown(value),
6685        }
6686    }
6687}
6688
6689#[cfg(feature = "v4_8")]
6690#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6691impl StaticType for InscriptionOverflow {
6692    #[inline]
6693    #[doc(alias = "gtk_inscription_overflow_get_type")]
6694    fn static_type() -> glib::Type {
6695        unsafe { from_glib(ffi::gtk_inscription_overflow_get_type()) }
6696    }
6697}
6698
6699#[cfg(feature = "v4_8")]
6700#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6701impl glib::HasParamSpec for InscriptionOverflow {
6702    type ParamSpec = glib::ParamSpecEnum;
6703    type SetValue = Self;
6704    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6705
6706    fn param_spec_builder() -> Self::BuilderFn {
6707        Self::ParamSpec::builder_with_default
6708    }
6709}
6710
6711#[cfg(feature = "v4_8")]
6712#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6713impl glib::value::ValueType for InscriptionOverflow {
6714    type Type = Self;
6715}
6716
6717#[cfg(feature = "v4_8")]
6718#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6719unsafe impl<'a> glib::value::FromValue<'a> for InscriptionOverflow {
6720    type Checker = glib::value::GenericValueTypeChecker<Self>;
6721
6722    #[inline]
6723    unsafe fn from_value(value: &'a glib::Value) -> Self {
6724        skip_assert_initialized!();
6725        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6726    }
6727}
6728
6729#[cfg(feature = "v4_8")]
6730#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6731impl ToValue for InscriptionOverflow {
6732    #[inline]
6733    fn to_value(&self) -> glib::Value {
6734        let mut value = glib::Value::for_value_type::<Self>();
6735        unsafe {
6736            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6737        }
6738        value
6739    }
6740
6741    #[inline]
6742    fn value_type(&self) -> glib::Type {
6743        Self::static_type()
6744    }
6745}
6746
6747#[cfg(feature = "v4_8")]
6748#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6749impl From<InscriptionOverflow> for glib::Value {
6750    #[inline]
6751    fn from(v: InscriptionOverflow) -> Self {
6752        skip_assert_initialized!();
6753        ToValue::to_value(&v)
6754    }
6755}
6756
6757/// Values for the [`gtk-interface-color-scheme`][struct@crate::Settings#gtk-interface-color-scheme]
6758/// and [`prefers-color-scheme`][struct@crate::CssProvider#prefers-color-scheme] properties
6759/// that indicates what color scheme is used.
6760///
6761/// This information can be used inside CSS via media queries.
6762///
6763/// More values may be added to this enumeration. Unknown values
6764/// should be treated the same as `GTK_INTERFACE_COLOR_SCHEME_DEFAULT`.
6765#[cfg(feature = "v4_20")]
6766#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6767#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6768#[non_exhaustive]
6769#[doc(alias = "GtkInterfaceColorScheme")]
6770pub enum InterfaceColorScheme {
6771    /// The system doesn't support color schemes
6772    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_UNSUPPORTED")]
6773    Unsupported,
6774    /// The default color scheme is used
6775    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_DEFAULT")]
6776    Default,
6777    /// A dark color scheme is used
6778    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_DARK")]
6779    Dark,
6780    /// A light color scheme is used
6781    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_LIGHT")]
6782    Light,
6783    #[doc(hidden)]
6784    __Unknown(i32),
6785}
6786
6787#[cfg(feature = "v4_20")]
6788#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6789#[doc(hidden)]
6790impl IntoGlib for InterfaceColorScheme {
6791    type GlibType = ffi::GtkInterfaceColorScheme;
6792
6793    #[inline]
6794    fn into_glib(self) -> ffi::GtkInterfaceColorScheme {
6795        match self {
6796            Self::Unsupported => ffi::GTK_INTERFACE_COLOR_SCHEME_UNSUPPORTED,
6797            Self::Default => ffi::GTK_INTERFACE_COLOR_SCHEME_DEFAULT,
6798            Self::Dark => ffi::GTK_INTERFACE_COLOR_SCHEME_DARK,
6799            Self::Light => ffi::GTK_INTERFACE_COLOR_SCHEME_LIGHT,
6800            Self::__Unknown(value) => value,
6801        }
6802    }
6803}
6804
6805#[cfg(feature = "v4_20")]
6806#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6807#[doc(hidden)]
6808impl FromGlib<ffi::GtkInterfaceColorScheme> for InterfaceColorScheme {
6809    #[inline]
6810    unsafe fn from_glib(value: ffi::GtkInterfaceColorScheme) -> Self {
6811        skip_assert_initialized!();
6812
6813        match value {
6814            ffi::GTK_INTERFACE_COLOR_SCHEME_UNSUPPORTED => Self::Unsupported,
6815            ffi::GTK_INTERFACE_COLOR_SCHEME_DEFAULT => Self::Default,
6816            ffi::GTK_INTERFACE_COLOR_SCHEME_DARK => Self::Dark,
6817            ffi::GTK_INTERFACE_COLOR_SCHEME_LIGHT => Self::Light,
6818            value => Self::__Unknown(value),
6819        }
6820    }
6821}
6822
6823#[cfg(feature = "v4_20")]
6824#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6825impl StaticType for InterfaceColorScheme {
6826    #[inline]
6827    #[doc(alias = "gtk_interface_color_scheme_get_type")]
6828    fn static_type() -> glib::Type {
6829        unsafe { from_glib(ffi::gtk_interface_color_scheme_get_type()) }
6830    }
6831}
6832
6833#[cfg(feature = "v4_20")]
6834#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6835impl glib::HasParamSpec for InterfaceColorScheme {
6836    type ParamSpec = glib::ParamSpecEnum;
6837    type SetValue = Self;
6838    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6839
6840    fn param_spec_builder() -> Self::BuilderFn {
6841        Self::ParamSpec::builder_with_default
6842    }
6843}
6844
6845#[cfg(feature = "v4_20")]
6846#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6847impl glib::value::ValueType for InterfaceColorScheme {
6848    type Type = Self;
6849}
6850
6851#[cfg(feature = "v4_20")]
6852#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6853unsafe impl<'a> glib::value::FromValue<'a> for InterfaceColorScheme {
6854    type Checker = glib::value::GenericValueTypeChecker<Self>;
6855
6856    #[inline]
6857    unsafe fn from_value(value: &'a glib::Value) -> Self {
6858        skip_assert_initialized!();
6859        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6860    }
6861}
6862
6863#[cfg(feature = "v4_20")]
6864#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6865impl ToValue for InterfaceColorScheme {
6866    #[inline]
6867    fn to_value(&self) -> glib::Value {
6868        let mut value = glib::Value::for_value_type::<Self>();
6869        unsafe {
6870            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6871        }
6872        value
6873    }
6874
6875    #[inline]
6876    fn value_type(&self) -> glib::Type {
6877        Self::static_type()
6878    }
6879}
6880
6881#[cfg(feature = "v4_20")]
6882#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6883impl From<InterfaceColorScheme> for glib::Value {
6884    #[inline]
6885    fn from(v: InterfaceColorScheme) -> Self {
6886        skip_assert_initialized!();
6887        ToValue::to_value(&v)
6888    }
6889}
6890
6891/// Values for the [`gtk-interface-contrast`][struct@crate::Settings#gtk-interface-contrast]
6892/// and [`prefers-contrast`][struct@crate::CssProvider#prefers-contrast] properties
6893/// that indicates the preferred level of contrast.
6894///
6895/// This information can be used inside CSS via media queries.
6896///
6897/// More values may be added to this enumeration. Unknown values
6898/// should be treated the same as `GTK_INTERFACE_CONTRAST_NO_PREFERENCE`.
6899#[cfg(feature = "v4_20")]
6900#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6901#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6902#[non_exhaustive]
6903#[doc(alias = "GtkInterfaceContrast")]
6904pub enum InterfaceContrast {
6905    /// The system doesn't support contrast levels
6906    #[doc(alias = "GTK_INTERFACE_CONTRAST_UNSUPPORTED")]
6907    Unsupported,
6908    /// No particular preference for contrast
6909    #[doc(alias = "GTK_INTERFACE_CONTRAST_NO_PREFERENCE")]
6910    NoPreference,
6911    /// More contrast is preferred
6912    #[doc(alias = "GTK_INTERFACE_CONTRAST_MORE")]
6913    More,
6914    /// Less contrast is preferred
6915    #[doc(alias = "GTK_INTERFACE_CONTRAST_LESS")]
6916    Less,
6917    #[doc(hidden)]
6918    __Unknown(i32),
6919}
6920
6921#[cfg(feature = "v4_20")]
6922#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6923#[doc(hidden)]
6924impl IntoGlib for InterfaceContrast {
6925    type GlibType = ffi::GtkInterfaceContrast;
6926
6927    #[inline]
6928    fn into_glib(self) -> ffi::GtkInterfaceContrast {
6929        match self {
6930            Self::Unsupported => ffi::GTK_INTERFACE_CONTRAST_UNSUPPORTED,
6931            Self::NoPreference => ffi::GTK_INTERFACE_CONTRAST_NO_PREFERENCE,
6932            Self::More => ffi::GTK_INTERFACE_CONTRAST_MORE,
6933            Self::Less => ffi::GTK_INTERFACE_CONTRAST_LESS,
6934            Self::__Unknown(value) => value,
6935        }
6936    }
6937}
6938
6939#[cfg(feature = "v4_20")]
6940#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6941#[doc(hidden)]
6942impl FromGlib<ffi::GtkInterfaceContrast> for InterfaceContrast {
6943    #[inline]
6944    unsafe fn from_glib(value: ffi::GtkInterfaceContrast) -> Self {
6945        skip_assert_initialized!();
6946
6947        match value {
6948            ffi::GTK_INTERFACE_CONTRAST_UNSUPPORTED => Self::Unsupported,
6949            ffi::GTK_INTERFACE_CONTRAST_NO_PREFERENCE => Self::NoPreference,
6950            ffi::GTK_INTERFACE_CONTRAST_MORE => Self::More,
6951            ffi::GTK_INTERFACE_CONTRAST_LESS => Self::Less,
6952            value => Self::__Unknown(value),
6953        }
6954    }
6955}
6956
6957#[cfg(feature = "v4_20")]
6958#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6959impl StaticType for InterfaceContrast {
6960    #[inline]
6961    #[doc(alias = "gtk_interface_contrast_get_type")]
6962    fn static_type() -> glib::Type {
6963        unsafe { from_glib(ffi::gtk_interface_contrast_get_type()) }
6964    }
6965}
6966
6967#[cfg(feature = "v4_20")]
6968#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6969impl glib::HasParamSpec for InterfaceContrast {
6970    type ParamSpec = glib::ParamSpecEnum;
6971    type SetValue = Self;
6972    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6973
6974    fn param_spec_builder() -> Self::BuilderFn {
6975        Self::ParamSpec::builder_with_default
6976    }
6977}
6978
6979#[cfg(feature = "v4_20")]
6980#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6981impl glib::value::ValueType for InterfaceContrast {
6982    type Type = Self;
6983}
6984
6985#[cfg(feature = "v4_20")]
6986#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6987unsafe impl<'a> glib::value::FromValue<'a> for InterfaceContrast {
6988    type Checker = glib::value::GenericValueTypeChecker<Self>;
6989
6990    #[inline]
6991    unsafe fn from_value(value: &'a glib::Value) -> Self {
6992        skip_assert_initialized!();
6993        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6994    }
6995}
6996
6997#[cfg(feature = "v4_20")]
6998#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6999impl ToValue for InterfaceContrast {
7000    #[inline]
7001    fn to_value(&self) -> glib::Value {
7002        let mut value = glib::Value::for_value_type::<Self>();
7003        unsafe {
7004            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7005        }
7006        value
7007    }
7008
7009    #[inline]
7010    fn value_type(&self) -> glib::Type {
7011        Self::static_type()
7012    }
7013}
7014
7015#[cfg(feature = "v4_20")]
7016#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
7017impl From<InterfaceContrast> for glib::Value {
7018    #[inline]
7019    fn from(v: InterfaceContrast) -> Self {
7020        skip_assert_initialized!();
7021        ToValue::to_value(&v)
7022    }
7023}
7024
7025/// Used for justifying the text inside a [`Label`][crate::Label] widget.
7026#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7027#[non_exhaustive]
7028#[doc(alias = "GtkJustification")]
7029pub enum Justification {
7030    /// The text is placed at the left edge of the label.
7031    #[doc(alias = "GTK_JUSTIFY_LEFT")]
7032    Left,
7033    /// The text is placed at the right edge of the label.
7034    #[doc(alias = "GTK_JUSTIFY_RIGHT")]
7035    Right,
7036    /// The text is placed in the center of the label.
7037    #[doc(alias = "GTK_JUSTIFY_CENTER")]
7038    Center,
7039    /// The text is placed is distributed across the label.
7040    #[doc(alias = "GTK_JUSTIFY_FILL")]
7041    Fill,
7042    #[doc(hidden)]
7043    __Unknown(i32),
7044}
7045
7046#[doc(hidden)]
7047impl IntoGlib for Justification {
7048    type GlibType = ffi::GtkJustification;
7049
7050    #[inline]
7051    fn into_glib(self) -> ffi::GtkJustification {
7052        match self {
7053            Self::Left => ffi::GTK_JUSTIFY_LEFT,
7054            Self::Right => ffi::GTK_JUSTIFY_RIGHT,
7055            Self::Center => ffi::GTK_JUSTIFY_CENTER,
7056            Self::Fill => ffi::GTK_JUSTIFY_FILL,
7057            Self::__Unknown(value) => value,
7058        }
7059    }
7060}
7061
7062#[doc(hidden)]
7063impl FromGlib<ffi::GtkJustification> for Justification {
7064    #[inline]
7065    unsafe fn from_glib(value: ffi::GtkJustification) -> Self {
7066        skip_assert_initialized!();
7067
7068        match value {
7069            ffi::GTK_JUSTIFY_LEFT => Self::Left,
7070            ffi::GTK_JUSTIFY_RIGHT => Self::Right,
7071            ffi::GTK_JUSTIFY_CENTER => Self::Center,
7072            ffi::GTK_JUSTIFY_FILL => Self::Fill,
7073            value => Self::__Unknown(value),
7074        }
7075    }
7076}
7077
7078impl StaticType for Justification {
7079    #[inline]
7080    #[doc(alias = "gtk_justification_get_type")]
7081    fn static_type() -> glib::Type {
7082        unsafe { from_glib(ffi::gtk_justification_get_type()) }
7083    }
7084}
7085
7086impl glib::HasParamSpec for Justification {
7087    type ParamSpec = glib::ParamSpecEnum;
7088    type SetValue = Self;
7089    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7090
7091    fn param_spec_builder() -> Self::BuilderFn {
7092        Self::ParamSpec::builder_with_default
7093    }
7094}
7095
7096impl glib::value::ValueType for Justification {
7097    type Type = Self;
7098}
7099
7100unsafe impl<'a> glib::value::FromValue<'a> for Justification {
7101    type Checker = glib::value::GenericValueTypeChecker<Self>;
7102
7103    #[inline]
7104    unsafe fn from_value(value: &'a glib::Value) -> Self {
7105        skip_assert_initialized!();
7106        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7107    }
7108}
7109
7110impl ToValue for Justification {
7111    #[inline]
7112    fn to_value(&self) -> glib::Value {
7113        let mut value = glib::Value::for_value_type::<Self>();
7114        unsafe {
7115            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7116        }
7117        value
7118    }
7119
7120    #[inline]
7121    fn value_type(&self) -> glib::Type {
7122        Self::static_type()
7123    }
7124}
7125
7126impl From<Justification> for glib::Value {
7127    #[inline]
7128    fn from(v: Justification) -> Self {
7129        skip_assert_initialized!();
7130        ToValue::to_value(&v)
7131    }
7132}
7133
7134/// Describes how [`LevelBar`][crate::LevelBar] contents should be rendered.
7135///
7136/// Note that this enumeration could be extended with additional modes
7137/// in the future.
7138#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7139#[non_exhaustive]
7140#[doc(alias = "GtkLevelBarMode")]
7141pub enum LevelBarMode {
7142    /// the bar has a continuous mode
7143    #[doc(alias = "GTK_LEVEL_BAR_MODE_CONTINUOUS")]
7144    Continuous,
7145    /// the bar has a discrete mode
7146    #[doc(alias = "GTK_LEVEL_BAR_MODE_DISCRETE")]
7147    Discrete,
7148    #[doc(hidden)]
7149    __Unknown(i32),
7150}
7151
7152#[doc(hidden)]
7153impl IntoGlib for LevelBarMode {
7154    type GlibType = ffi::GtkLevelBarMode;
7155
7156    #[inline]
7157    fn into_glib(self) -> ffi::GtkLevelBarMode {
7158        match self {
7159            Self::Continuous => ffi::GTK_LEVEL_BAR_MODE_CONTINUOUS,
7160            Self::Discrete => ffi::GTK_LEVEL_BAR_MODE_DISCRETE,
7161            Self::__Unknown(value) => value,
7162        }
7163    }
7164}
7165
7166#[doc(hidden)]
7167impl FromGlib<ffi::GtkLevelBarMode> for LevelBarMode {
7168    #[inline]
7169    unsafe fn from_glib(value: ffi::GtkLevelBarMode) -> Self {
7170        skip_assert_initialized!();
7171
7172        match value {
7173            ffi::GTK_LEVEL_BAR_MODE_CONTINUOUS => Self::Continuous,
7174            ffi::GTK_LEVEL_BAR_MODE_DISCRETE => Self::Discrete,
7175            value => Self::__Unknown(value),
7176        }
7177    }
7178}
7179
7180impl StaticType for LevelBarMode {
7181    #[inline]
7182    #[doc(alias = "gtk_level_bar_mode_get_type")]
7183    fn static_type() -> glib::Type {
7184        unsafe { from_glib(ffi::gtk_level_bar_mode_get_type()) }
7185    }
7186}
7187
7188impl glib::HasParamSpec for LevelBarMode {
7189    type ParamSpec = glib::ParamSpecEnum;
7190    type SetValue = Self;
7191    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7192
7193    fn param_spec_builder() -> Self::BuilderFn {
7194        Self::ParamSpec::builder_with_default
7195    }
7196}
7197
7198impl glib::value::ValueType for LevelBarMode {
7199    type Type = Self;
7200}
7201
7202unsafe impl<'a> glib::value::FromValue<'a> for LevelBarMode {
7203    type Checker = glib::value::GenericValueTypeChecker<Self>;
7204
7205    #[inline]
7206    unsafe fn from_value(value: &'a glib::Value) -> Self {
7207        skip_assert_initialized!();
7208        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7209    }
7210}
7211
7212impl ToValue for LevelBarMode {
7213    #[inline]
7214    fn to_value(&self) -> glib::Value {
7215        let mut value = glib::Value::for_value_type::<Self>();
7216        unsafe {
7217            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7218        }
7219        value
7220    }
7221
7222    #[inline]
7223    fn value_type(&self) -> glib::Type {
7224        Self::static_type()
7225    }
7226}
7227
7228impl From<LevelBarMode> for glib::Value {
7229    #[inline]
7230    fn from(v: LevelBarMode) -> Self {
7231        skip_assert_initialized!();
7232        ToValue::to_value(&v)
7233    }
7234}
7235
7236/// The type of license for an application.
7237///
7238/// This enumeration can be expanded at later date.
7239#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7240#[non_exhaustive]
7241#[doc(alias = "GtkLicense")]
7242pub enum License {
7243    /// No license specified
7244    #[doc(alias = "GTK_LICENSE_UNKNOWN")]
7245    Unknown,
7246    /// A license text is going to be specified by the
7247    ///   developer
7248    #[doc(alias = "GTK_LICENSE_CUSTOM")]
7249    Custom,
7250    /// The GNU General Public License, version 2.0 or later
7251    #[doc(alias = "GTK_LICENSE_GPL_2_0")]
7252    Gpl20,
7253    /// The GNU General Public License, version 3.0 or later
7254    #[doc(alias = "GTK_LICENSE_GPL_3_0")]
7255    Gpl30,
7256    /// The GNU Lesser General Public License, version 2.1 or later
7257    #[doc(alias = "GTK_LICENSE_LGPL_2_1")]
7258    Lgpl21,
7259    /// The GNU Lesser General Public License, version 3.0 or later
7260    #[doc(alias = "GTK_LICENSE_LGPL_3_0")]
7261    Lgpl30,
7262    /// The BSD standard license
7263    #[doc(alias = "GTK_LICENSE_BSD")]
7264    Bsd,
7265    /// The MIT/X11 standard license
7266    #[doc(alias = "GTK_LICENSE_MIT_X11")]
7267    MitX11,
7268    /// The Artistic License, version 2.0
7269    #[doc(alias = "GTK_LICENSE_ARTISTIC")]
7270    Artistic,
7271    /// The GNU General Public License, version 2.0 only
7272    #[doc(alias = "GTK_LICENSE_GPL_2_0_ONLY")]
7273    Gpl20Only,
7274    /// The GNU General Public License, version 3.0 only
7275    #[doc(alias = "GTK_LICENSE_GPL_3_0_ONLY")]
7276    Gpl30Only,
7277    /// The GNU Lesser General Public License, version 2.1 only
7278    #[doc(alias = "GTK_LICENSE_LGPL_2_1_ONLY")]
7279    Lgpl21Only,
7280    /// The GNU Lesser General Public License, version 3.0 only
7281    #[doc(alias = "GTK_LICENSE_LGPL_3_0_ONLY")]
7282    Lgpl30Only,
7283    /// The GNU Affero General Public License, version 3.0 or later
7284    #[doc(alias = "GTK_LICENSE_AGPL_3_0")]
7285    Agpl30,
7286    /// The GNU Affero General Public License, version 3.0 only
7287    #[doc(alias = "GTK_LICENSE_AGPL_3_0_ONLY")]
7288    Agpl30Only,
7289    /// The 3-clause BSD licence
7290    #[doc(alias = "GTK_LICENSE_BSD_3")]
7291    Bsd3,
7292    /// The Apache License, version 2.0
7293    #[doc(alias = "GTK_LICENSE_APACHE_2_0")]
7294    Apache20,
7295    /// The Mozilla Public License, version 2.0
7296    #[doc(alias = "GTK_LICENSE_MPL_2_0")]
7297    Mpl20,
7298    /// Zero-Clause BSD license
7299    #[cfg(feature = "v4_14")]
7300    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
7301    #[doc(alias = "GTK_LICENSE_0BSD")]
7302    _0bsd,
7303    #[doc(hidden)]
7304    __Unknown(i32),
7305}
7306
7307#[doc(hidden)]
7308impl IntoGlib for License {
7309    type GlibType = ffi::GtkLicense;
7310
7311    fn into_glib(self) -> ffi::GtkLicense {
7312        match self {
7313            Self::Unknown => ffi::GTK_LICENSE_UNKNOWN,
7314            Self::Custom => ffi::GTK_LICENSE_CUSTOM,
7315            Self::Gpl20 => ffi::GTK_LICENSE_GPL_2_0,
7316            Self::Gpl30 => ffi::GTK_LICENSE_GPL_3_0,
7317            Self::Lgpl21 => ffi::GTK_LICENSE_LGPL_2_1,
7318            Self::Lgpl30 => ffi::GTK_LICENSE_LGPL_3_0,
7319            Self::Bsd => ffi::GTK_LICENSE_BSD,
7320            Self::MitX11 => ffi::GTK_LICENSE_MIT_X11,
7321            Self::Artistic => ffi::GTK_LICENSE_ARTISTIC,
7322            Self::Gpl20Only => ffi::GTK_LICENSE_GPL_2_0_ONLY,
7323            Self::Gpl30Only => ffi::GTK_LICENSE_GPL_3_0_ONLY,
7324            Self::Lgpl21Only => ffi::GTK_LICENSE_LGPL_2_1_ONLY,
7325            Self::Lgpl30Only => ffi::GTK_LICENSE_LGPL_3_0_ONLY,
7326            Self::Agpl30 => ffi::GTK_LICENSE_AGPL_3_0,
7327            Self::Agpl30Only => ffi::GTK_LICENSE_AGPL_3_0_ONLY,
7328            Self::Bsd3 => ffi::GTK_LICENSE_BSD_3,
7329            Self::Apache20 => ffi::GTK_LICENSE_APACHE_2_0,
7330            Self::Mpl20 => ffi::GTK_LICENSE_MPL_2_0,
7331            #[cfg(feature = "v4_14")]
7332            Self::_0bsd => ffi::GTK_LICENSE_0BSD,
7333            Self::__Unknown(value) => value,
7334        }
7335    }
7336}
7337
7338#[doc(hidden)]
7339impl FromGlib<ffi::GtkLicense> for License {
7340    unsafe fn from_glib(value: ffi::GtkLicense) -> Self {
7341        skip_assert_initialized!();
7342
7343        match value {
7344            ffi::GTK_LICENSE_UNKNOWN => Self::Unknown,
7345            ffi::GTK_LICENSE_CUSTOM => Self::Custom,
7346            ffi::GTK_LICENSE_GPL_2_0 => Self::Gpl20,
7347            ffi::GTK_LICENSE_GPL_3_0 => Self::Gpl30,
7348            ffi::GTK_LICENSE_LGPL_2_1 => Self::Lgpl21,
7349            ffi::GTK_LICENSE_LGPL_3_0 => Self::Lgpl30,
7350            ffi::GTK_LICENSE_BSD => Self::Bsd,
7351            ffi::GTK_LICENSE_MIT_X11 => Self::MitX11,
7352            ffi::GTK_LICENSE_ARTISTIC => Self::Artistic,
7353            ffi::GTK_LICENSE_GPL_2_0_ONLY => Self::Gpl20Only,
7354            ffi::GTK_LICENSE_GPL_3_0_ONLY => Self::Gpl30Only,
7355            ffi::GTK_LICENSE_LGPL_2_1_ONLY => Self::Lgpl21Only,
7356            ffi::GTK_LICENSE_LGPL_3_0_ONLY => Self::Lgpl30Only,
7357            ffi::GTK_LICENSE_AGPL_3_0 => Self::Agpl30,
7358            ffi::GTK_LICENSE_AGPL_3_0_ONLY => Self::Agpl30Only,
7359            ffi::GTK_LICENSE_BSD_3 => Self::Bsd3,
7360            ffi::GTK_LICENSE_APACHE_2_0 => Self::Apache20,
7361            ffi::GTK_LICENSE_MPL_2_0 => Self::Mpl20,
7362            #[cfg(feature = "v4_14")]
7363            ffi::GTK_LICENSE_0BSD => Self::_0bsd,
7364            value => Self::__Unknown(value),
7365        }
7366    }
7367}
7368
7369impl StaticType for License {
7370    #[inline]
7371    #[doc(alias = "gtk_license_get_type")]
7372    fn static_type() -> glib::Type {
7373        unsafe { from_glib(ffi::gtk_license_get_type()) }
7374    }
7375}
7376
7377impl glib::HasParamSpec for License {
7378    type ParamSpec = glib::ParamSpecEnum;
7379    type SetValue = Self;
7380    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7381
7382    fn param_spec_builder() -> Self::BuilderFn {
7383        Self::ParamSpec::builder_with_default
7384    }
7385}
7386
7387impl glib::value::ValueType for License {
7388    type Type = Self;
7389}
7390
7391unsafe impl<'a> glib::value::FromValue<'a> for License {
7392    type Checker = glib::value::GenericValueTypeChecker<Self>;
7393
7394    #[inline]
7395    unsafe fn from_value(value: &'a glib::Value) -> Self {
7396        skip_assert_initialized!();
7397        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7398    }
7399}
7400
7401impl ToValue for License {
7402    #[inline]
7403    fn to_value(&self) -> glib::Value {
7404        let mut value = glib::Value::for_value_type::<Self>();
7405        unsafe {
7406            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7407        }
7408        value
7409    }
7410
7411    #[inline]
7412    fn value_type(&self) -> glib::Type {
7413        Self::static_type()
7414    }
7415}
7416
7417impl From<License> for glib::Value {
7418    #[inline]
7419    fn from(v: License) -> Self {
7420        skip_assert_initialized!();
7421        ToValue::to_value(&v)
7422    }
7423}
7424
7425/// Used to configure the focus behavior in the `GTK_DIR_TAB_FORWARD`
7426/// and `GTK_DIR_TAB_BACKWARD` direction, like the <kbd>Tab</kbd> key
7427/// in a [`ListView`][crate::ListView].
7428#[cfg(feature = "v4_12")]
7429#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7430#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7431#[non_exhaustive]
7432#[doc(alias = "GtkListTabBehavior")]
7433pub enum ListTabBehavior {
7434    /// Cycle through all focusable items of the list
7435    #[doc(alias = "GTK_LIST_TAB_ALL")]
7436    All,
7437    /// Cycle through a single list element, then move
7438    ///   focus out of the list. Moving focus between items needs to be
7439    ///   done with the arrow keys.
7440    #[doc(alias = "GTK_LIST_TAB_ITEM")]
7441    Item,
7442    /// Cycle only through a single cell, then
7443    ///   move focus out of the list. Moving focus between cells needs to
7444    ///   be done with the arrow keys. This is only relevant for
7445    ///   cell-based widgets like #GtkColumnView, otherwise it behaves
7446    ///   like `GTK_LIST_TAB_ITEM`.
7447    #[doc(alias = "GTK_LIST_TAB_CELL")]
7448    Cell,
7449    #[doc(hidden)]
7450    __Unknown(i32),
7451}
7452
7453#[cfg(feature = "v4_12")]
7454#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7455#[doc(hidden)]
7456impl IntoGlib for ListTabBehavior {
7457    type GlibType = ffi::GtkListTabBehavior;
7458
7459    #[inline]
7460    fn into_glib(self) -> ffi::GtkListTabBehavior {
7461        match self {
7462            Self::All => ffi::GTK_LIST_TAB_ALL,
7463            Self::Item => ffi::GTK_LIST_TAB_ITEM,
7464            Self::Cell => ffi::GTK_LIST_TAB_CELL,
7465            Self::__Unknown(value) => value,
7466        }
7467    }
7468}
7469
7470#[cfg(feature = "v4_12")]
7471#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7472#[doc(hidden)]
7473impl FromGlib<ffi::GtkListTabBehavior> for ListTabBehavior {
7474    #[inline]
7475    unsafe fn from_glib(value: ffi::GtkListTabBehavior) -> Self {
7476        skip_assert_initialized!();
7477
7478        match value {
7479            ffi::GTK_LIST_TAB_ALL => Self::All,
7480            ffi::GTK_LIST_TAB_ITEM => Self::Item,
7481            ffi::GTK_LIST_TAB_CELL => Self::Cell,
7482            value => Self::__Unknown(value),
7483        }
7484    }
7485}
7486
7487#[cfg(feature = "v4_12")]
7488#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7489impl StaticType for ListTabBehavior {
7490    #[inline]
7491    #[doc(alias = "gtk_list_tab_behavior_get_type")]
7492    fn static_type() -> glib::Type {
7493        unsafe { from_glib(ffi::gtk_list_tab_behavior_get_type()) }
7494    }
7495}
7496
7497#[cfg(feature = "v4_12")]
7498#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7499impl glib::HasParamSpec for ListTabBehavior {
7500    type ParamSpec = glib::ParamSpecEnum;
7501    type SetValue = Self;
7502    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7503
7504    fn param_spec_builder() -> Self::BuilderFn {
7505        Self::ParamSpec::builder_with_default
7506    }
7507}
7508
7509#[cfg(feature = "v4_12")]
7510#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7511impl glib::value::ValueType for ListTabBehavior {
7512    type Type = Self;
7513}
7514
7515#[cfg(feature = "v4_12")]
7516#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7517unsafe impl<'a> glib::value::FromValue<'a> for ListTabBehavior {
7518    type Checker = glib::value::GenericValueTypeChecker<Self>;
7519
7520    #[inline]
7521    unsafe fn from_value(value: &'a glib::Value) -> Self {
7522        skip_assert_initialized!();
7523        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7524    }
7525}
7526
7527#[cfg(feature = "v4_12")]
7528#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7529impl ToValue for ListTabBehavior {
7530    #[inline]
7531    fn to_value(&self) -> glib::Value {
7532        let mut value = glib::Value::for_value_type::<Self>();
7533        unsafe {
7534            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7535        }
7536        value
7537    }
7538
7539    #[inline]
7540    fn value_type(&self) -> glib::Type {
7541        Self::static_type()
7542    }
7543}
7544
7545#[cfg(feature = "v4_12")]
7546#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7547impl From<ListTabBehavior> for glib::Value {
7548    #[inline]
7549    fn from(v: ListTabBehavior) -> Self {
7550        skip_assert_initialized!();
7551        ToValue::to_value(&v)
7552    }
7553}
7554
7555/// The type of message being displayed in a [`MessageDialog`][crate::MessageDialog].
7556#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7557#[non_exhaustive]
7558#[doc(alias = "GtkMessageType")]
7559pub enum MessageType {
7560    /// Informational message
7561    #[doc(alias = "GTK_MESSAGE_INFO")]
7562    Info,
7563    /// Non-fatal warning message
7564    #[doc(alias = "GTK_MESSAGE_WARNING")]
7565    Warning,
7566    /// Question requiring a choice
7567    #[doc(alias = "GTK_MESSAGE_QUESTION")]
7568    Question,
7569    /// Fatal error message
7570    #[doc(alias = "GTK_MESSAGE_ERROR")]
7571    Error,
7572    /// None of the above
7573    #[doc(alias = "GTK_MESSAGE_OTHER")]
7574    Other,
7575    #[doc(hidden)]
7576    __Unknown(i32),
7577}
7578
7579#[doc(hidden)]
7580impl IntoGlib for MessageType {
7581    type GlibType = ffi::GtkMessageType;
7582
7583    #[inline]
7584    fn into_glib(self) -> ffi::GtkMessageType {
7585        match self {
7586            Self::Info => ffi::GTK_MESSAGE_INFO,
7587            Self::Warning => ffi::GTK_MESSAGE_WARNING,
7588            Self::Question => ffi::GTK_MESSAGE_QUESTION,
7589            Self::Error => ffi::GTK_MESSAGE_ERROR,
7590            Self::Other => ffi::GTK_MESSAGE_OTHER,
7591            Self::__Unknown(value) => value,
7592        }
7593    }
7594}
7595
7596#[doc(hidden)]
7597impl FromGlib<ffi::GtkMessageType> for MessageType {
7598    #[inline]
7599    unsafe fn from_glib(value: ffi::GtkMessageType) -> Self {
7600        skip_assert_initialized!();
7601
7602        match value {
7603            ffi::GTK_MESSAGE_INFO => Self::Info,
7604            ffi::GTK_MESSAGE_WARNING => Self::Warning,
7605            ffi::GTK_MESSAGE_QUESTION => Self::Question,
7606            ffi::GTK_MESSAGE_ERROR => Self::Error,
7607            ffi::GTK_MESSAGE_OTHER => Self::Other,
7608            value => Self::__Unknown(value),
7609        }
7610    }
7611}
7612
7613impl StaticType for MessageType {
7614    #[inline]
7615    #[doc(alias = "gtk_message_type_get_type")]
7616    fn static_type() -> glib::Type {
7617        unsafe { from_glib(ffi::gtk_message_type_get_type()) }
7618    }
7619}
7620
7621impl glib::HasParamSpec for MessageType {
7622    type ParamSpec = glib::ParamSpecEnum;
7623    type SetValue = Self;
7624    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7625
7626    fn param_spec_builder() -> Self::BuilderFn {
7627        Self::ParamSpec::builder_with_default
7628    }
7629}
7630
7631impl glib::value::ValueType for MessageType {
7632    type Type = Self;
7633}
7634
7635unsafe impl<'a> glib::value::FromValue<'a> for MessageType {
7636    type Checker = glib::value::GenericValueTypeChecker<Self>;
7637
7638    #[inline]
7639    unsafe fn from_value(value: &'a glib::Value) -> Self {
7640        skip_assert_initialized!();
7641        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7642    }
7643}
7644
7645impl ToValue for MessageType {
7646    #[inline]
7647    fn to_value(&self) -> glib::Value {
7648        let mut value = glib::Value::for_value_type::<Self>();
7649        unsafe {
7650            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7651        }
7652        value
7653    }
7654
7655    #[inline]
7656    fn value_type(&self) -> glib::Type {
7657        Self::static_type()
7658    }
7659}
7660
7661impl From<MessageType> for glib::Value {
7662    #[inline]
7663    fn from(v: MessageType) -> Self {
7664        skip_assert_initialized!();
7665        ToValue::to_value(&v)
7666    }
7667}
7668
7669/// Passed as argument to various keybinding signals for moving the
7670/// cursor position.
7671#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7672#[non_exhaustive]
7673#[doc(alias = "GtkMovementStep")]
7674pub enum MovementStep {
7675    /// Move forward or back by graphemes
7676    #[doc(alias = "GTK_MOVEMENT_LOGICAL_POSITIONS")]
7677    LogicalPositions,
7678    /// Move left or right by graphemes
7679    #[doc(alias = "GTK_MOVEMENT_VISUAL_POSITIONS")]
7680    VisualPositions,
7681    /// Move forward or back by words
7682    #[doc(alias = "GTK_MOVEMENT_WORDS")]
7683    Words,
7684    /// Move up or down lines (wrapped lines)
7685    #[doc(alias = "GTK_MOVEMENT_DISPLAY_LINES")]
7686    DisplayLines,
7687    /// Move to either end of a line
7688    #[doc(alias = "GTK_MOVEMENT_DISPLAY_LINE_ENDS")]
7689    DisplayLineEnds,
7690    /// Move up or down paragraphs (newline-ended lines)
7691    #[doc(alias = "GTK_MOVEMENT_PARAGRAPHS")]
7692    Paragraphs,
7693    /// Move to either end of a paragraph
7694    #[doc(alias = "GTK_MOVEMENT_PARAGRAPH_ENDS")]
7695    ParagraphEnds,
7696    /// Move by pages
7697    #[doc(alias = "GTK_MOVEMENT_PAGES")]
7698    Pages,
7699    /// Move to ends of the buffer
7700    #[doc(alias = "GTK_MOVEMENT_BUFFER_ENDS")]
7701    BufferEnds,
7702    /// Move horizontally by pages
7703    #[doc(alias = "GTK_MOVEMENT_HORIZONTAL_PAGES")]
7704    HorizontalPages,
7705    #[doc(hidden)]
7706    __Unknown(i32),
7707}
7708
7709#[doc(hidden)]
7710impl IntoGlib for MovementStep {
7711    type GlibType = ffi::GtkMovementStep;
7712
7713    #[inline]
7714    fn into_glib(self) -> ffi::GtkMovementStep {
7715        match self {
7716            Self::LogicalPositions => ffi::GTK_MOVEMENT_LOGICAL_POSITIONS,
7717            Self::VisualPositions => ffi::GTK_MOVEMENT_VISUAL_POSITIONS,
7718            Self::Words => ffi::GTK_MOVEMENT_WORDS,
7719            Self::DisplayLines => ffi::GTK_MOVEMENT_DISPLAY_LINES,
7720            Self::DisplayLineEnds => ffi::GTK_MOVEMENT_DISPLAY_LINE_ENDS,
7721            Self::Paragraphs => ffi::GTK_MOVEMENT_PARAGRAPHS,
7722            Self::ParagraphEnds => ffi::GTK_MOVEMENT_PARAGRAPH_ENDS,
7723            Self::Pages => ffi::GTK_MOVEMENT_PAGES,
7724            Self::BufferEnds => ffi::GTK_MOVEMENT_BUFFER_ENDS,
7725            Self::HorizontalPages => ffi::GTK_MOVEMENT_HORIZONTAL_PAGES,
7726            Self::__Unknown(value) => value,
7727        }
7728    }
7729}
7730
7731#[doc(hidden)]
7732impl FromGlib<ffi::GtkMovementStep> for MovementStep {
7733    #[inline]
7734    unsafe fn from_glib(value: ffi::GtkMovementStep) -> Self {
7735        skip_assert_initialized!();
7736
7737        match value {
7738            ffi::GTK_MOVEMENT_LOGICAL_POSITIONS => Self::LogicalPositions,
7739            ffi::GTK_MOVEMENT_VISUAL_POSITIONS => Self::VisualPositions,
7740            ffi::GTK_MOVEMENT_WORDS => Self::Words,
7741            ffi::GTK_MOVEMENT_DISPLAY_LINES => Self::DisplayLines,
7742            ffi::GTK_MOVEMENT_DISPLAY_LINE_ENDS => Self::DisplayLineEnds,
7743            ffi::GTK_MOVEMENT_PARAGRAPHS => Self::Paragraphs,
7744            ffi::GTK_MOVEMENT_PARAGRAPH_ENDS => Self::ParagraphEnds,
7745            ffi::GTK_MOVEMENT_PAGES => Self::Pages,
7746            ffi::GTK_MOVEMENT_BUFFER_ENDS => Self::BufferEnds,
7747            ffi::GTK_MOVEMENT_HORIZONTAL_PAGES => Self::HorizontalPages,
7748            value => Self::__Unknown(value),
7749        }
7750    }
7751}
7752
7753impl StaticType for MovementStep {
7754    #[inline]
7755    #[doc(alias = "gtk_movement_step_get_type")]
7756    fn static_type() -> glib::Type {
7757        unsafe { from_glib(ffi::gtk_movement_step_get_type()) }
7758    }
7759}
7760
7761impl glib::HasParamSpec for MovementStep {
7762    type ParamSpec = glib::ParamSpecEnum;
7763    type SetValue = Self;
7764    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7765
7766    fn param_spec_builder() -> Self::BuilderFn {
7767        Self::ParamSpec::builder_with_default
7768    }
7769}
7770
7771impl glib::value::ValueType for MovementStep {
7772    type Type = Self;
7773}
7774
7775unsafe impl<'a> glib::value::FromValue<'a> for MovementStep {
7776    type Checker = glib::value::GenericValueTypeChecker<Self>;
7777
7778    #[inline]
7779    unsafe fn from_value(value: &'a glib::Value) -> Self {
7780        skip_assert_initialized!();
7781        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7782    }
7783}
7784
7785impl ToValue for MovementStep {
7786    #[inline]
7787    fn to_value(&self) -> glib::Value {
7788        let mut value = glib::Value::for_value_type::<Self>();
7789        unsafe {
7790            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7791        }
7792        value
7793    }
7794
7795    #[inline]
7796    fn value_type(&self) -> glib::Type {
7797        Self::static_type()
7798    }
7799}
7800
7801impl From<MovementStep> for glib::Value {
7802    #[inline]
7803    fn from(v: MovementStep) -> Self {
7804        skip_assert_initialized!();
7805        ToValue::to_value(&v)
7806    }
7807}
7808
7809/// Options for selecting a different wrap mode for natural size
7810/// requests.
7811///
7812/// See for example the [`natural-wrap-mode`][struct@crate::Label#natural-wrap-mode] property.
7813#[cfg(feature = "v4_6")]
7814#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7815#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7816#[non_exhaustive]
7817#[doc(alias = "GtkNaturalWrapMode")]
7818pub enum NaturalWrapMode {
7819    /// Inherit the minimum size request.
7820    ///   In particular, this should be used with [`pango::WrapMode::Char`][crate::pango::WrapMode::Char].
7821    #[doc(alias = "GTK_NATURAL_WRAP_INHERIT")]
7822    Inherit,
7823    /// Try not to wrap the text. This mode is the
7824    ///   closest to GTK3's behavior but can lead to a wide label leaving
7825    ///   lots of empty space below the text.
7826    #[doc(alias = "GTK_NATURAL_WRAP_NONE")]
7827    None,
7828    /// Attempt to wrap at word boundaries. This
7829    ///   is useful in particular when using [`pango::WrapMode::WordChar`][crate::pango::WrapMode::WordChar] as the
7830    ///   wrap mode.
7831    #[doc(alias = "GTK_NATURAL_WRAP_WORD")]
7832    Word,
7833    #[doc(hidden)]
7834    __Unknown(i32),
7835}
7836
7837#[cfg(feature = "v4_6")]
7838#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7839#[doc(hidden)]
7840impl IntoGlib for NaturalWrapMode {
7841    type GlibType = ffi::GtkNaturalWrapMode;
7842
7843    #[inline]
7844    fn into_glib(self) -> ffi::GtkNaturalWrapMode {
7845        match self {
7846            Self::Inherit => ffi::GTK_NATURAL_WRAP_INHERIT,
7847            Self::None => ffi::GTK_NATURAL_WRAP_NONE,
7848            Self::Word => ffi::GTK_NATURAL_WRAP_WORD,
7849            Self::__Unknown(value) => value,
7850        }
7851    }
7852}
7853
7854#[cfg(feature = "v4_6")]
7855#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7856#[doc(hidden)]
7857impl FromGlib<ffi::GtkNaturalWrapMode> for NaturalWrapMode {
7858    #[inline]
7859    unsafe fn from_glib(value: ffi::GtkNaturalWrapMode) -> Self {
7860        skip_assert_initialized!();
7861
7862        match value {
7863            ffi::GTK_NATURAL_WRAP_INHERIT => Self::Inherit,
7864            ffi::GTK_NATURAL_WRAP_NONE => Self::None,
7865            ffi::GTK_NATURAL_WRAP_WORD => Self::Word,
7866            value => Self::__Unknown(value),
7867        }
7868    }
7869}
7870
7871#[cfg(feature = "v4_6")]
7872#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7873impl StaticType for NaturalWrapMode {
7874    #[inline]
7875    #[doc(alias = "gtk_natural_wrap_mode_get_type")]
7876    fn static_type() -> glib::Type {
7877        unsafe { from_glib(ffi::gtk_natural_wrap_mode_get_type()) }
7878    }
7879}
7880
7881#[cfg(feature = "v4_6")]
7882#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7883impl glib::HasParamSpec for NaturalWrapMode {
7884    type ParamSpec = glib::ParamSpecEnum;
7885    type SetValue = Self;
7886    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7887
7888    fn param_spec_builder() -> Self::BuilderFn {
7889        Self::ParamSpec::builder_with_default
7890    }
7891}
7892
7893#[cfg(feature = "v4_6")]
7894#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7895impl glib::value::ValueType for NaturalWrapMode {
7896    type Type = Self;
7897}
7898
7899#[cfg(feature = "v4_6")]
7900#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7901unsafe impl<'a> glib::value::FromValue<'a> for NaturalWrapMode {
7902    type Checker = glib::value::GenericValueTypeChecker<Self>;
7903
7904    #[inline]
7905    unsafe fn from_value(value: &'a glib::Value) -> Self {
7906        skip_assert_initialized!();
7907        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7908    }
7909}
7910
7911#[cfg(feature = "v4_6")]
7912#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7913impl ToValue for NaturalWrapMode {
7914    #[inline]
7915    fn to_value(&self) -> glib::Value {
7916        let mut value = glib::Value::for_value_type::<Self>();
7917        unsafe {
7918            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7919        }
7920        value
7921    }
7922
7923    #[inline]
7924    fn value_type(&self) -> glib::Type {
7925        Self::static_type()
7926    }
7927}
7928
7929#[cfg(feature = "v4_6")]
7930#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7931impl From<NaturalWrapMode> for glib::Value {
7932    #[inline]
7933    fn from(v: NaturalWrapMode) -> Self {
7934        skip_assert_initialized!();
7935        ToValue::to_value(&v)
7936    }
7937}
7938
7939/// The parameter used in the action signals of [`Notebook`][crate::Notebook].
7940#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7941#[non_exhaustive]
7942#[doc(alias = "GtkNotebookTab")]
7943pub enum NotebookTab {
7944    /// the first tab in the notebook
7945    #[doc(alias = "GTK_NOTEBOOK_TAB_FIRST")]
7946    First,
7947    /// the last tab in the notebook
7948    #[doc(alias = "GTK_NOTEBOOK_TAB_LAST")]
7949    Last,
7950    #[doc(hidden)]
7951    __Unknown(i32),
7952}
7953
7954#[doc(hidden)]
7955impl IntoGlib for NotebookTab {
7956    type GlibType = ffi::GtkNotebookTab;
7957
7958    #[inline]
7959    fn into_glib(self) -> ffi::GtkNotebookTab {
7960        match self {
7961            Self::First => ffi::GTK_NOTEBOOK_TAB_FIRST,
7962            Self::Last => ffi::GTK_NOTEBOOK_TAB_LAST,
7963            Self::__Unknown(value) => value,
7964        }
7965    }
7966}
7967
7968#[doc(hidden)]
7969impl FromGlib<ffi::GtkNotebookTab> for NotebookTab {
7970    #[inline]
7971    unsafe fn from_glib(value: ffi::GtkNotebookTab) -> Self {
7972        skip_assert_initialized!();
7973
7974        match value {
7975            ffi::GTK_NOTEBOOK_TAB_FIRST => Self::First,
7976            ffi::GTK_NOTEBOOK_TAB_LAST => Self::Last,
7977            value => Self::__Unknown(value),
7978        }
7979    }
7980}
7981
7982impl StaticType for NotebookTab {
7983    #[inline]
7984    #[doc(alias = "gtk_notebook_tab_get_type")]
7985    fn static_type() -> glib::Type {
7986        unsafe { from_glib(ffi::gtk_notebook_tab_get_type()) }
7987    }
7988}
7989
7990impl glib::HasParamSpec for NotebookTab {
7991    type ParamSpec = glib::ParamSpecEnum;
7992    type SetValue = Self;
7993    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7994
7995    fn param_spec_builder() -> Self::BuilderFn {
7996        Self::ParamSpec::builder_with_default
7997    }
7998}
7999
8000impl glib::value::ValueType for NotebookTab {
8001    type Type = Self;
8002}
8003
8004unsafe impl<'a> glib::value::FromValue<'a> for NotebookTab {
8005    type Checker = glib::value::GenericValueTypeChecker<Self>;
8006
8007    #[inline]
8008    unsafe fn from_value(value: &'a glib::Value) -> Self {
8009        skip_assert_initialized!();
8010        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8011    }
8012}
8013
8014impl ToValue for NotebookTab {
8015    #[inline]
8016    fn to_value(&self) -> glib::Value {
8017        let mut value = glib::Value::for_value_type::<Self>();
8018        unsafe {
8019            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8020        }
8021        value
8022    }
8023
8024    #[inline]
8025    fn value_type(&self) -> glib::Type {
8026        Self::static_type()
8027    }
8028}
8029
8030impl From<NotebookTab> for glib::Value {
8031    #[inline]
8032    fn from(v: NotebookTab) -> Self {
8033        skip_assert_initialized!();
8034        ToValue::to_value(&v)
8035    }
8036}
8037
8038/// Used to determine the layout of pages on a sheet when printing
8039/// multiple pages per sheet.
8040#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8041#[non_exhaustive]
8042#[doc(alias = "GtkNumberUpLayout")]
8043pub enum NumberUpLayout {
8044    /// ![](layout-lrtb.png)
8045    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM")]
8046    Lrtb,
8047    /// ![](layout-lrbt.png)
8048    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP")]
8049    Lrbt,
8050    /// ![](layout-rltb.png)
8051    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM")]
8052    Rltb,
8053    /// ![](layout-rlbt.png)
8054    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP")]
8055    Rlbt,
8056    /// ![](layout-tblr.png)
8057    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT")]
8058    Tblr,
8059    /// ![](layout-tbrl.png)
8060    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT")]
8061    Tbrl,
8062    /// ![](layout-btlr.png)
8063    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT")]
8064    Btlr,
8065    /// ![](layout-btrl.png)
8066    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT")]
8067    Btrl,
8068    #[doc(hidden)]
8069    __Unknown(i32),
8070}
8071
8072#[doc(hidden)]
8073impl IntoGlib for NumberUpLayout {
8074    type GlibType = ffi::GtkNumberUpLayout;
8075
8076    #[inline]
8077    fn into_glib(self) -> ffi::GtkNumberUpLayout {
8078        match self {
8079            Self::Lrtb => ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM,
8080            Self::Lrbt => ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP,
8081            Self::Rltb => ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM,
8082            Self::Rlbt => ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP,
8083            Self::Tblr => ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT,
8084            Self::Tbrl => ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT,
8085            Self::Btlr => ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT,
8086            Self::Btrl => ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT,
8087            Self::__Unknown(value) => value,
8088        }
8089    }
8090}
8091
8092#[doc(hidden)]
8093impl FromGlib<ffi::GtkNumberUpLayout> for NumberUpLayout {
8094    #[inline]
8095    unsafe fn from_glib(value: ffi::GtkNumberUpLayout) -> Self {
8096        skip_assert_initialized!();
8097
8098        match value {
8099            ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM => Self::Lrtb,
8100            ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP => Self::Lrbt,
8101            ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM => Self::Rltb,
8102            ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP => Self::Rlbt,
8103            ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT => Self::Tblr,
8104            ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT => Self::Tbrl,
8105            ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT => Self::Btlr,
8106            ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT => Self::Btrl,
8107            value => Self::__Unknown(value),
8108        }
8109    }
8110}
8111
8112impl StaticType for NumberUpLayout {
8113    #[inline]
8114    #[doc(alias = "gtk_number_up_layout_get_type")]
8115    fn static_type() -> glib::Type {
8116        unsafe { from_glib(ffi::gtk_number_up_layout_get_type()) }
8117    }
8118}
8119
8120impl glib::HasParamSpec for NumberUpLayout {
8121    type ParamSpec = glib::ParamSpecEnum;
8122    type SetValue = Self;
8123    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8124
8125    fn param_spec_builder() -> Self::BuilderFn {
8126        Self::ParamSpec::builder_with_default
8127    }
8128}
8129
8130impl glib::value::ValueType for NumberUpLayout {
8131    type Type = Self;
8132}
8133
8134unsafe impl<'a> glib::value::FromValue<'a> for NumberUpLayout {
8135    type Checker = glib::value::GenericValueTypeChecker<Self>;
8136
8137    #[inline]
8138    unsafe fn from_value(value: &'a glib::Value) -> Self {
8139        skip_assert_initialized!();
8140        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8141    }
8142}
8143
8144impl ToValue for NumberUpLayout {
8145    #[inline]
8146    fn to_value(&self) -> glib::Value {
8147        let mut value = glib::Value::for_value_type::<Self>();
8148        unsafe {
8149            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8150        }
8151        value
8152    }
8153
8154    #[inline]
8155    fn value_type(&self) -> glib::Type {
8156        Self::static_type()
8157    }
8158}
8159
8160impl From<NumberUpLayout> for glib::Value {
8161    #[inline]
8162    fn from(v: NumberUpLayout) -> Self {
8163        skip_assert_initialized!();
8164        ToValue::to_value(&v)
8165    }
8166}
8167
8168/// Describes the way two values can be compared.
8169///
8170/// These values can be used with a `callback::GLib::CompareFunc. However,
8171/// a `GCompareFunc` is allowed to return any integer values.
8172/// For converting such a value to a [`Ordering`][crate::Ordering] value, use
8173/// `Gtk::Ordering::from_cmpfunc()`.
8174#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8175#[non_exhaustive]
8176#[doc(alias = "GtkOrdering")]
8177pub enum Ordering {
8178    /// the first value is smaller than the second
8179    #[doc(alias = "GTK_ORDERING_SMALLER")]
8180    Smaller,
8181    /// the two values are equal
8182    #[doc(alias = "GTK_ORDERING_EQUAL")]
8183    Equal,
8184    /// the first value is larger than the second
8185    #[doc(alias = "GTK_ORDERING_LARGER")]
8186    Larger,
8187    #[doc(hidden)]
8188    __Unknown(i32),
8189}
8190
8191#[doc(hidden)]
8192impl IntoGlib for Ordering {
8193    type GlibType = ffi::GtkOrdering;
8194
8195    #[inline]
8196    fn into_glib(self) -> ffi::GtkOrdering {
8197        match self {
8198            Self::Smaller => ffi::GTK_ORDERING_SMALLER,
8199            Self::Equal => ffi::GTK_ORDERING_EQUAL,
8200            Self::Larger => ffi::GTK_ORDERING_LARGER,
8201            Self::__Unknown(value) => value,
8202        }
8203    }
8204}
8205
8206#[doc(hidden)]
8207impl FromGlib<ffi::GtkOrdering> for Ordering {
8208    #[inline]
8209    unsafe fn from_glib(value: ffi::GtkOrdering) -> Self {
8210        skip_assert_initialized!();
8211
8212        match value {
8213            ffi::GTK_ORDERING_SMALLER => Self::Smaller,
8214            ffi::GTK_ORDERING_EQUAL => Self::Equal,
8215            ffi::GTK_ORDERING_LARGER => Self::Larger,
8216            value => Self::__Unknown(value),
8217        }
8218    }
8219}
8220
8221impl StaticType for Ordering {
8222    #[inline]
8223    #[doc(alias = "gtk_ordering_get_type")]
8224    fn static_type() -> glib::Type {
8225        unsafe { from_glib(ffi::gtk_ordering_get_type()) }
8226    }
8227}
8228
8229impl glib::HasParamSpec for Ordering {
8230    type ParamSpec = glib::ParamSpecEnum;
8231    type SetValue = Self;
8232    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8233
8234    fn param_spec_builder() -> Self::BuilderFn {
8235        Self::ParamSpec::builder_with_default
8236    }
8237}
8238
8239impl glib::value::ValueType for Ordering {
8240    type Type = Self;
8241}
8242
8243unsafe impl<'a> glib::value::FromValue<'a> for Ordering {
8244    type Checker = glib::value::GenericValueTypeChecker<Self>;
8245
8246    #[inline]
8247    unsafe fn from_value(value: &'a glib::Value) -> Self {
8248        skip_assert_initialized!();
8249        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8250    }
8251}
8252
8253impl ToValue for Ordering {
8254    #[inline]
8255    fn to_value(&self) -> glib::Value {
8256        let mut value = glib::Value::for_value_type::<Self>();
8257        unsafe {
8258            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8259        }
8260        value
8261    }
8262
8263    #[inline]
8264    fn value_type(&self) -> glib::Type {
8265        Self::static_type()
8266    }
8267}
8268
8269impl From<Ordering> for glib::Value {
8270    #[inline]
8271    fn from(v: Ordering) -> Self {
8272        skip_assert_initialized!();
8273        ToValue::to_value(&v)
8274    }
8275}
8276
8277/// Represents the orientation of widgets and other objects.
8278///
8279/// Typical examples are [`Box`][crate::Box] or [`GesturePan`][crate::GesturePan].
8280#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8281#[non_exhaustive]
8282#[doc(alias = "GtkOrientation")]
8283pub enum Orientation {
8284    /// The element is in horizontal orientation.
8285    #[doc(alias = "GTK_ORIENTATION_HORIZONTAL")]
8286    Horizontal,
8287    /// The element is in vertical orientation.
8288    #[doc(alias = "GTK_ORIENTATION_VERTICAL")]
8289    Vertical,
8290    #[doc(hidden)]
8291    __Unknown(i32),
8292}
8293
8294#[doc(hidden)]
8295impl IntoGlib for Orientation {
8296    type GlibType = ffi::GtkOrientation;
8297
8298    #[inline]
8299    fn into_glib(self) -> ffi::GtkOrientation {
8300        match self {
8301            Self::Horizontal => ffi::GTK_ORIENTATION_HORIZONTAL,
8302            Self::Vertical => ffi::GTK_ORIENTATION_VERTICAL,
8303            Self::__Unknown(value) => value,
8304        }
8305    }
8306}
8307
8308#[doc(hidden)]
8309impl FromGlib<ffi::GtkOrientation> for Orientation {
8310    #[inline]
8311    unsafe fn from_glib(value: ffi::GtkOrientation) -> Self {
8312        skip_assert_initialized!();
8313
8314        match value {
8315            ffi::GTK_ORIENTATION_HORIZONTAL => Self::Horizontal,
8316            ffi::GTK_ORIENTATION_VERTICAL => Self::Vertical,
8317            value => Self::__Unknown(value),
8318        }
8319    }
8320}
8321
8322impl StaticType for Orientation {
8323    #[inline]
8324    #[doc(alias = "gtk_orientation_get_type")]
8325    fn static_type() -> glib::Type {
8326        unsafe { from_glib(ffi::gtk_orientation_get_type()) }
8327    }
8328}
8329
8330impl glib::HasParamSpec for Orientation {
8331    type ParamSpec = glib::ParamSpecEnum;
8332    type SetValue = Self;
8333    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8334
8335    fn param_spec_builder() -> Self::BuilderFn {
8336        Self::ParamSpec::builder_with_default
8337    }
8338}
8339
8340impl glib::value::ValueType for Orientation {
8341    type Type = Self;
8342}
8343
8344unsafe impl<'a> glib::value::FromValue<'a> for Orientation {
8345    type Checker = glib::value::GenericValueTypeChecker<Self>;
8346
8347    #[inline]
8348    unsafe fn from_value(value: &'a glib::Value) -> Self {
8349        skip_assert_initialized!();
8350        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8351    }
8352}
8353
8354impl ToValue for Orientation {
8355    #[inline]
8356    fn to_value(&self) -> glib::Value {
8357        let mut value = glib::Value::for_value_type::<Self>();
8358        unsafe {
8359            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8360        }
8361        value
8362    }
8363
8364    #[inline]
8365    fn value_type(&self) -> glib::Type {
8366        Self::static_type()
8367    }
8368}
8369
8370impl From<Orientation> for glib::Value {
8371    #[inline]
8372    fn from(v: Orientation) -> Self {
8373        skip_assert_initialized!();
8374        ToValue::to_value(&v)
8375    }
8376}
8377
8378/// Defines how content overflowing a given area should be handled.
8379///
8380/// This is used in [`WidgetExt::set_overflow()`][crate::prelude::WidgetExt::set_overflow()]. The
8381/// [`overflow`][struct@crate::Widget#overflow] property is modeled after the
8382/// CSS overflow property, but implements it only partially.
8383#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8384#[non_exhaustive]
8385#[doc(alias = "GtkOverflow")]
8386pub enum Overflow {
8387    /// No change is applied. Content is drawn at the specified
8388    ///   position.
8389    #[doc(alias = "GTK_OVERFLOW_VISIBLE")]
8390    Visible,
8391    /// Content is clipped to the bounds of the area. Content
8392    ///   outside the area is not drawn and cannot be interacted with.
8393    #[doc(alias = "GTK_OVERFLOW_HIDDEN")]
8394    Hidden,
8395    #[doc(hidden)]
8396    __Unknown(i32),
8397}
8398
8399#[doc(hidden)]
8400impl IntoGlib for Overflow {
8401    type GlibType = ffi::GtkOverflow;
8402
8403    #[inline]
8404    fn into_glib(self) -> ffi::GtkOverflow {
8405        match self {
8406            Self::Visible => ffi::GTK_OVERFLOW_VISIBLE,
8407            Self::Hidden => ffi::GTK_OVERFLOW_HIDDEN,
8408            Self::__Unknown(value) => value,
8409        }
8410    }
8411}
8412
8413#[doc(hidden)]
8414impl FromGlib<ffi::GtkOverflow> for Overflow {
8415    #[inline]
8416    unsafe fn from_glib(value: ffi::GtkOverflow) -> Self {
8417        skip_assert_initialized!();
8418
8419        match value {
8420            ffi::GTK_OVERFLOW_VISIBLE => Self::Visible,
8421            ffi::GTK_OVERFLOW_HIDDEN => Self::Hidden,
8422            value => Self::__Unknown(value),
8423        }
8424    }
8425}
8426
8427impl StaticType for Overflow {
8428    #[inline]
8429    #[doc(alias = "gtk_overflow_get_type")]
8430    fn static_type() -> glib::Type {
8431        unsafe { from_glib(ffi::gtk_overflow_get_type()) }
8432    }
8433}
8434
8435impl glib::HasParamSpec for Overflow {
8436    type ParamSpec = glib::ParamSpecEnum;
8437    type SetValue = Self;
8438    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8439
8440    fn param_spec_builder() -> Self::BuilderFn {
8441        Self::ParamSpec::builder_with_default
8442    }
8443}
8444
8445impl glib::value::ValueType for Overflow {
8446    type Type = Self;
8447}
8448
8449unsafe impl<'a> glib::value::FromValue<'a> for Overflow {
8450    type Checker = glib::value::GenericValueTypeChecker<Self>;
8451
8452    #[inline]
8453    unsafe fn from_value(value: &'a glib::Value) -> Self {
8454        skip_assert_initialized!();
8455        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8456    }
8457}
8458
8459impl ToValue for Overflow {
8460    #[inline]
8461    fn to_value(&self) -> glib::Value {
8462        let mut value = glib::Value::for_value_type::<Self>();
8463        unsafe {
8464            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8465        }
8466        value
8467    }
8468
8469    #[inline]
8470    fn value_type(&self) -> glib::Type {
8471        Self::static_type()
8472    }
8473}
8474
8475impl From<Overflow> for glib::Value {
8476    #[inline]
8477    fn from(v: Overflow) -> Self {
8478        skip_assert_initialized!();
8479        ToValue::to_value(&v)
8480    }
8481}
8482
8483/// Represents the packing location of a children in its parent.
8484///
8485/// See [`WindowControls`][crate::WindowControls] for example.
8486#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8487#[non_exhaustive]
8488#[doc(alias = "GtkPackType")]
8489pub enum PackType {
8490    /// The child is packed into the start of the widget
8491    #[doc(alias = "GTK_PACK_START")]
8492    Start,
8493    /// The child is packed into the end of the widget
8494    #[doc(alias = "GTK_PACK_END")]
8495    End,
8496    #[doc(hidden)]
8497    __Unknown(i32),
8498}
8499
8500#[doc(hidden)]
8501impl IntoGlib for PackType {
8502    type GlibType = ffi::GtkPackType;
8503
8504    #[inline]
8505    fn into_glib(self) -> ffi::GtkPackType {
8506        match self {
8507            Self::Start => ffi::GTK_PACK_START,
8508            Self::End => ffi::GTK_PACK_END,
8509            Self::__Unknown(value) => value,
8510        }
8511    }
8512}
8513
8514#[doc(hidden)]
8515impl FromGlib<ffi::GtkPackType> for PackType {
8516    #[inline]
8517    unsafe fn from_glib(value: ffi::GtkPackType) -> Self {
8518        skip_assert_initialized!();
8519
8520        match value {
8521            ffi::GTK_PACK_START => Self::Start,
8522            ffi::GTK_PACK_END => Self::End,
8523            value => Self::__Unknown(value),
8524        }
8525    }
8526}
8527
8528impl StaticType for PackType {
8529    #[inline]
8530    #[doc(alias = "gtk_pack_type_get_type")]
8531    fn static_type() -> glib::Type {
8532        unsafe { from_glib(ffi::gtk_pack_type_get_type()) }
8533    }
8534}
8535
8536impl glib::HasParamSpec for PackType {
8537    type ParamSpec = glib::ParamSpecEnum;
8538    type SetValue = Self;
8539    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8540
8541    fn param_spec_builder() -> Self::BuilderFn {
8542        Self::ParamSpec::builder_with_default
8543    }
8544}
8545
8546impl glib::value::ValueType for PackType {
8547    type Type = Self;
8548}
8549
8550unsafe impl<'a> glib::value::FromValue<'a> for PackType {
8551    type Checker = glib::value::GenericValueTypeChecker<Self>;
8552
8553    #[inline]
8554    unsafe fn from_value(value: &'a glib::Value) -> Self {
8555        skip_assert_initialized!();
8556        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8557    }
8558}
8559
8560impl ToValue for PackType {
8561    #[inline]
8562    fn to_value(&self) -> glib::Value {
8563        let mut value = glib::Value::for_value_type::<Self>();
8564        unsafe {
8565            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8566        }
8567        value
8568    }
8569
8570    #[inline]
8571    fn value_type(&self) -> glib::Type {
8572        Self::static_type()
8573    }
8574}
8575
8576impl From<PackType> for glib::Value {
8577    #[inline]
8578    fn from(v: PackType) -> Self {
8579        skip_assert_initialized!();
8580        ToValue::to_value(&v)
8581    }
8582}
8583
8584/// The type of a pad action.
8585#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8586#[non_exhaustive]
8587#[doc(alias = "GtkPadActionType")]
8588pub enum PadActionType {
8589    /// Action is triggered by a pad button
8590    #[doc(alias = "GTK_PAD_ACTION_BUTTON")]
8591    Button,
8592    /// Action is triggered by a pad ring
8593    #[doc(alias = "GTK_PAD_ACTION_RING")]
8594    Ring,
8595    /// Action is triggered by a pad strip
8596    #[doc(alias = "GTK_PAD_ACTION_STRIP")]
8597    Strip,
8598    /// Action is triggered by a pad dial
8599    #[doc(alias = "GTK_PAD_ACTION_DIAL")]
8600    Dial,
8601    #[doc(hidden)]
8602    __Unknown(i32),
8603}
8604
8605#[doc(hidden)]
8606impl IntoGlib for PadActionType {
8607    type GlibType = ffi::GtkPadActionType;
8608
8609    #[inline]
8610    fn into_glib(self) -> ffi::GtkPadActionType {
8611        match self {
8612            Self::Button => ffi::GTK_PAD_ACTION_BUTTON,
8613            Self::Ring => ffi::GTK_PAD_ACTION_RING,
8614            Self::Strip => ffi::GTK_PAD_ACTION_STRIP,
8615            Self::Dial => ffi::GTK_PAD_ACTION_DIAL,
8616            Self::__Unknown(value) => value,
8617        }
8618    }
8619}
8620
8621#[doc(hidden)]
8622impl FromGlib<ffi::GtkPadActionType> for PadActionType {
8623    #[inline]
8624    unsafe fn from_glib(value: ffi::GtkPadActionType) -> Self {
8625        skip_assert_initialized!();
8626
8627        match value {
8628            ffi::GTK_PAD_ACTION_BUTTON => Self::Button,
8629            ffi::GTK_PAD_ACTION_RING => Self::Ring,
8630            ffi::GTK_PAD_ACTION_STRIP => Self::Strip,
8631            ffi::GTK_PAD_ACTION_DIAL => Self::Dial,
8632            value => Self::__Unknown(value),
8633        }
8634    }
8635}
8636
8637impl StaticType for PadActionType {
8638    #[inline]
8639    #[doc(alias = "gtk_pad_action_type_get_type")]
8640    fn static_type() -> glib::Type {
8641        unsafe { from_glib(ffi::gtk_pad_action_type_get_type()) }
8642    }
8643}
8644
8645impl glib::HasParamSpec for PadActionType {
8646    type ParamSpec = glib::ParamSpecEnum;
8647    type SetValue = Self;
8648    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8649
8650    fn param_spec_builder() -> Self::BuilderFn {
8651        Self::ParamSpec::builder_with_default
8652    }
8653}
8654
8655impl glib::value::ValueType for PadActionType {
8656    type Type = Self;
8657}
8658
8659unsafe impl<'a> glib::value::FromValue<'a> for PadActionType {
8660    type Checker = glib::value::GenericValueTypeChecker<Self>;
8661
8662    #[inline]
8663    unsafe fn from_value(value: &'a glib::Value) -> Self {
8664        skip_assert_initialized!();
8665        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8666    }
8667}
8668
8669impl ToValue for PadActionType {
8670    #[inline]
8671    fn to_value(&self) -> glib::Value {
8672        let mut value = glib::Value::for_value_type::<Self>();
8673        unsafe {
8674            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8675        }
8676        value
8677    }
8678
8679    #[inline]
8680    fn value_type(&self) -> glib::Type {
8681        Self::static_type()
8682    }
8683}
8684
8685impl From<PadActionType> for glib::Value {
8686    #[inline]
8687    fn from(v: PadActionType) -> Self {
8688        skip_assert_initialized!();
8689        ToValue::to_value(&v)
8690    }
8691}
8692
8693/// See also gtk_print_settings_set_orientation().
8694#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8695#[non_exhaustive]
8696#[doc(alias = "GtkPageOrientation")]
8697pub enum PageOrientation {
8698    /// Portrait mode.
8699    #[doc(alias = "GTK_PAGE_ORIENTATION_PORTRAIT")]
8700    Portrait,
8701    /// Landscape mode.
8702    #[doc(alias = "GTK_PAGE_ORIENTATION_LANDSCAPE")]
8703    Landscape,
8704    /// Reverse portrait mode.
8705    #[doc(alias = "GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT")]
8706    ReversePortrait,
8707    /// Reverse landscape mode.
8708    #[doc(alias = "GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE")]
8709    ReverseLandscape,
8710    #[doc(hidden)]
8711    __Unknown(i32),
8712}
8713
8714#[doc(hidden)]
8715impl IntoGlib for PageOrientation {
8716    type GlibType = ffi::GtkPageOrientation;
8717
8718    #[inline]
8719    fn into_glib(self) -> ffi::GtkPageOrientation {
8720        match self {
8721            Self::Portrait => ffi::GTK_PAGE_ORIENTATION_PORTRAIT,
8722            Self::Landscape => ffi::GTK_PAGE_ORIENTATION_LANDSCAPE,
8723            Self::ReversePortrait => ffi::GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT,
8724            Self::ReverseLandscape => ffi::GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE,
8725            Self::__Unknown(value) => value,
8726        }
8727    }
8728}
8729
8730#[doc(hidden)]
8731impl FromGlib<ffi::GtkPageOrientation> for PageOrientation {
8732    #[inline]
8733    unsafe fn from_glib(value: ffi::GtkPageOrientation) -> Self {
8734        skip_assert_initialized!();
8735
8736        match value {
8737            ffi::GTK_PAGE_ORIENTATION_PORTRAIT => Self::Portrait,
8738            ffi::GTK_PAGE_ORIENTATION_LANDSCAPE => Self::Landscape,
8739            ffi::GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT => Self::ReversePortrait,
8740            ffi::GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE => Self::ReverseLandscape,
8741            value => Self::__Unknown(value),
8742        }
8743    }
8744}
8745
8746impl StaticType for PageOrientation {
8747    #[inline]
8748    #[doc(alias = "gtk_page_orientation_get_type")]
8749    fn static_type() -> glib::Type {
8750        unsafe { from_glib(ffi::gtk_page_orientation_get_type()) }
8751    }
8752}
8753
8754impl glib::HasParamSpec for PageOrientation {
8755    type ParamSpec = glib::ParamSpecEnum;
8756    type SetValue = Self;
8757    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8758
8759    fn param_spec_builder() -> Self::BuilderFn {
8760        Self::ParamSpec::builder_with_default
8761    }
8762}
8763
8764impl glib::value::ValueType for PageOrientation {
8765    type Type = Self;
8766}
8767
8768unsafe impl<'a> glib::value::FromValue<'a> for PageOrientation {
8769    type Checker = glib::value::GenericValueTypeChecker<Self>;
8770
8771    #[inline]
8772    unsafe fn from_value(value: &'a glib::Value) -> Self {
8773        skip_assert_initialized!();
8774        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8775    }
8776}
8777
8778impl ToValue for PageOrientation {
8779    #[inline]
8780    fn to_value(&self) -> glib::Value {
8781        let mut value = glib::Value::for_value_type::<Self>();
8782        unsafe {
8783            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8784        }
8785        value
8786    }
8787
8788    #[inline]
8789    fn value_type(&self) -> glib::Type {
8790        Self::static_type()
8791    }
8792}
8793
8794impl From<PageOrientation> for glib::Value {
8795    #[inline]
8796    fn from(v: PageOrientation) -> Self {
8797        skip_assert_initialized!();
8798        ToValue::to_value(&v)
8799    }
8800}
8801
8802/// See also gtk_print_job_set_page_set().
8803#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8804#[non_exhaustive]
8805#[doc(alias = "GtkPageSet")]
8806pub enum PageSet {
8807    /// All pages.
8808    #[doc(alias = "GTK_PAGE_SET_ALL")]
8809    All,
8810    /// Even pages.
8811    #[doc(alias = "GTK_PAGE_SET_EVEN")]
8812    Even,
8813    /// Odd pages.
8814    #[doc(alias = "GTK_PAGE_SET_ODD")]
8815    Odd,
8816    #[doc(hidden)]
8817    __Unknown(i32),
8818}
8819
8820#[doc(hidden)]
8821impl IntoGlib for PageSet {
8822    type GlibType = ffi::GtkPageSet;
8823
8824    #[inline]
8825    fn into_glib(self) -> ffi::GtkPageSet {
8826        match self {
8827            Self::All => ffi::GTK_PAGE_SET_ALL,
8828            Self::Even => ffi::GTK_PAGE_SET_EVEN,
8829            Self::Odd => ffi::GTK_PAGE_SET_ODD,
8830            Self::__Unknown(value) => value,
8831        }
8832    }
8833}
8834
8835#[doc(hidden)]
8836impl FromGlib<ffi::GtkPageSet> for PageSet {
8837    #[inline]
8838    unsafe fn from_glib(value: ffi::GtkPageSet) -> Self {
8839        skip_assert_initialized!();
8840
8841        match value {
8842            ffi::GTK_PAGE_SET_ALL => Self::All,
8843            ffi::GTK_PAGE_SET_EVEN => Self::Even,
8844            ffi::GTK_PAGE_SET_ODD => Self::Odd,
8845            value => Self::__Unknown(value),
8846        }
8847    }
8848}
8849
8850impl StaticType for PageSet {
8851    #[inline]
8852    #[doc(alias = "gtk_page_set_get_type")]
8853    fn static_type() -> glib::Type {
8854        unsafe { from_glib(ffi::gtk_page_set_get_type()) }
8855    }
8856}
8857
8858impl glib::HasParamSpec for PageSet {
8859    type ParamSpec = glib::ParamSpecEnum;
8860    type SetValue = Self;
8861    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8862
8863    fn param_spec_builder() -> Self::BuilderFn {
8864        Self::ParamSpec::builder_with_default
8865    }
8866}
8867
8868impl glib::value::ValueType for PageSet {
8869    type Type = Self;
8870}
8871
8872unsafe impl<'a> glib::value::FromValue<'a> for PageSet {
8873    type Checker = glib::value::GenericValueTypeChecker<Self>;
8874
8875    #[inline]
8876    unsafe fn from_value(value: &'a glib::Value) -> Self {
8877        skip_assert_initialized!();
8878        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8879    }
8880}
8881
8882impl ToValue for PageSet {
8883    #[inline]
8884    fn to_value(&self) -> glib::Value {
8885        let mut value = glib::Value::for_value_type::<Self>();
8886        unsafe {
8887            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8888        }
8889        value
8890    }
8891
8892    #[inline]
8893    fn value_type(&self) -> glib::Type {
8894        Self::static_type()
8895    }
8896}
8897
8898impl From<PageSet> for glib::Value {
8899    #[inline]
8900    fn from(v: PageSet) -> Self {
8901        skip_assert_initialized!();
8902        ToValue::to_value(&v)
8903    }
8904}
8905
8906/// Describes the panning direction of a [`GesturePan`][crate::GesturePan].
8907#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8908#[non_exhaustive]
8909#[doc(alias = "GtkPanDirection")]
8910pub enum PanDirection {
8911    /// panned towards the left
8912    #[doc(alias = "GTK_PAN_DIRECTION_LEFT")]
8913    Left,
8914    /// panned towards the right
8915    #[doc(alias = "GTK_PAN_DIRECTION_RIGHT")]
8916    Right,
8917    /// panned upwards
8918    #[doc(alias = "GTK_PAN_DIRECTION_UP")]
8919    Up,
8920    /// panned downwards
8921    #[doc(alias = "GTK_PAN_DIRECTION_DOWN")]
8922    Down,
8923    #[doc(hidden)]
8924    __Unknown(i32),
8925}
8926
8927#[doc(hidden)]
8928impl IntoGlib for PanDirection {
8929    type GlibType = ffi::GtkPanDirection;
8930
8931    #[inline]
8932    fn into_glib(self) -> ffi::GtkPanDirection {
8933        match self {
8934            Self::Left => ffi::GTK_PAN_DIRECTION_LEFT,
8935            Self::Right => ffi::GTK_PAN_DIRECTION_RIGHT,
8936            Self::Up => ffi::GTK_PAN_DIRECTION_UP,
8937            Self::Down => ffi::GTK_PAN_DIRECTION_DOWN,
8938            Self::__Unknown(value) => value,
8939        }
8940    }
8941}
8942
8943#[doc(hidden)]
8944impl FromGlib<ffi::GtkPanDirection> for PanDirection {
8945    #[inline]
8946    unsafe fn from_glib(value: ffi::GtkPanDirection) -> Self {
8947        skip_assert_initialized!();
8948
8949        match value {
8950            ffi::GTK_PAN_DIRECTION_LEFT => Self::Left,
8951            ffi::GTK_PAN_DIRECTION_RIGHT => Self::Right,
8952            ffi::GTK_PAN_DIRECTION_UP => Self::Up,
8953            ffi::GTK_PAN_DIRECTION_DOWN => Self::Down,
8954            value => Self::__Unknown(value),
8955        }
8956    }
8957}
8958
8959impl StaticType for PanDirection {
8960    #[inline]
8961    #[doc(alias = "gtk_pan_direction_get_type")]
8962    fn static_type() -> glib::Type {
8963        unsafe { from_glib(ffi::gtk_pan_direction_get_type()) }
8964    }
8965}
8966
8967impl glib::HasParamSpec for PanDirection {
8968    type ParamSpec = glib::ParamSpecEnum;
8969    type SetValue = Self;
8970    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8971
8972    fn param_spec_builder() -> Self::BuilderFn {
8973        Self::ParamSpec::builder_with_default
8974    }
8975}
8976
8977impl glib::value::ValueType for PanDirection {
8978    type Type = Self;
8979}
8980
8981unsafe impl<'a> glib::value::FromValue<'a> for PanDirection {
8982    type Checker = glib::value::GenericValueTypeChecker<Self>;
8983
8984    #[inline]
8985    unsafe fn from_value(value: &'a glib::Value) -> Self {
8986        skip_assert_initialized!();
8987        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8988    }
8989}
8990
8991impl ToValue for PanDirection {
8992    #[inline]
8993    fn to_value(&self) -> glib::Value {
8994        let mut value = glib::Value::for_value_type::<Self>();
8995        unsafe {
8996            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8997        }
8998        value
8999    }
9000
9001    #[inline]
9002    fn value_type(&self) -> glib::Type {
9003        Self::static_type()
9004    }
9005}
9006
9007impl From<PanDirection> for glib::Value {
9008    #[inline]
9009    fn from(v: PanDirection) -> Self {
9010        skip_assert_initialized!();
9011        ToValue::to_value(&v)
9012    }
9013}
9014
9015/// Determines how the size should be computed to achieve the one of the
9016/// visibility mode for the scrollbars.
9017#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9018#[non_exhaustive]
9019#[doc(alias = "GtkPolicyType")]
9020pub enum PolicyType {
9021    /// The scrollbar is always visible. The view size is
9022    ///   independent of the content.
9023    #[doc(alias = "GTK_POLICY_ALWAYS")]
9024    Always,
9025    /// The scrollbar will appear and disappear as necessary.
9026    ///   For example, when all of a [`TreeView`][crate::TreeView] can not be seen.
9027    #[doc(alias = "GTK_POLICY_AUTOMATIC")]
9028    Automatic,
9029    /// The scrollbar should never appear. In this mode the
9030    ///   content determines the size.
9031    #[doc(alias = "GTK_POLICY_NEVER")]
9032    Never,
9033    /// Don't show a scrollbar, but don't force the
9034    ///   size to follow the content. This can be used e.g. to make multiple
9035    ///   scrolled windows share a scrollbar.
9036    #[doc(alias = "GTK_POLICY_EXTERNAL")]
9037    External,
9038    #[doc(hidden)]
9039    __Unknown(i32),
9040}
9041
9042#[doc(hidden)]
9043impl IntoGlib for PolicyType {
9044    type GlibType = ffi::GtkPolicyType;
9045
9046    #[inline]
9047    fn into_glib(self) -> ffi::GtkPolicyType {
9048        match self {
9049            Self::Always => ffi::GTK_POLICY_ALWAYS,
9050            Self::Automatic => ffi::GTK_POLICY_AUTOMATIC,
9051            Self::Never => ffi::GTK_POLICY_NEVER,
9052            Self::External => ffi::GTK_POLICY_EXTERNAL,
9053            Self::__Unknown(value) => value,
9054        }
9055    }
9056}
9057
9058#[doc(hidden)]
9059impl FromGlib<ffi::GtkPolicyType> for PolicyType {
9060    #[inline]
9061    unsafe fn from_glib(value: ffi::GtkPolicyType) -> Self {
9062        skip_assert_initialized!();
9063
9064        match value {
9065            ffi::GTK_POLICY_ALWAYS => Self::Always,
9066            ffi::GTK_POLICY_AUTOMATIC => Self::Automatic,
9067            ffi::GTK_POLICY_NEVER => Self::Never,
9068            ffi::GTK_POLICY_EXTERNAL => Self::External,
9069            value => Self::__Unknown(value),
9070        }
9071    }
9072}
9073
9074impl StaticType for PolicyType {
9075    #[inline]
9076    #[doc(alias = "gtk_policy_type_get_type")]
9077    fn static_type() -> glib::Type {
9078        unsafe { from_glib(ffi::gtk_policy_type_get_type()) }
9079    }
9080}
9081
9082impl glib::HasParamSpec for PolicyType {
9083    type ParamSpec = glib::ParamSpecEnum;
9084    type SetValue = Self;
9085    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9086
9087    fn param_spec_builder() -> Self::BuilderFn {
9088        Self::ParamSpec::builder_with_default
9089    }
9090}
9091
9092impl glib::value::ValueType for PolicyType {
9093    type Type = Self;
9094}
9095
9096unsafe impl<'a> glib::value::FromValue<'a> for PolicyType {
9097    type Checker = glib::value::GenericValueTypeChecker<Self>;
9098
9099    #[inline]
9100    unsafe fn from_value(value: &'a glib::Value) -> Self {
9101        skip_assert_initialized!();
9102        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9103    }
9104}
9105
9106impl ToValue for PolicyType {
9107    #[inline]
9108    fn to_value(&self) -> glib::Value {
9109        let mut value = glib::Value::for_value_type::<Self>();
9110        unsafe {
9111            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9112        }
9113        value
9114    }
9115
9116    #[inline]
9117    fn value_type(&self) -> glib::Type {
9118        Self::static_type()
9119    }
9120}
9121
9122impl From<PolicyType> for glib::Value {
9123    #[inline]
9124    fn from(v: PolicyType) -> Self {
9125        skip_assert_initialized!();
9126        ToValue::to_value(&v)
9127    }
9128}
9129
9130/// Describes which edge of a widget a certain feature is positioned at.
9131///
9132/// For examples, see the tabs of a [`Notebook`][crate::Notebook], or the label
9133/// of a [`Scale`][crate::Scale].
9134#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9135#[non_exhaustive]
9136#[doc(alias = "GtkPositionType")]
9137pub enum PositionType {
9138    /// The feature is at the left edge.
9139    #[doc(alias = "GTK_POS_LEFT")]
9140    Left,
9141    /// The feature is at the right edge.
9142    #[doc(alias = "GTK_POS_RIGHT")]
9143    Right,
9144    /// The feature is at the top edge.
9145    #[doc(alias = "GTK_POS_TOP")]
9146    Top,
9147    /// The feature is at the bottom edge.
9148    #[doc(alias = "GTK_POS_BOTTOM")]
9149    Bottom,
9150    #[doc(hidden)]
9151    __Unknown(i32),
9152}
9153
9154#[doc(hidden)]
9155impl IntoGlib for PositionType {
9156    type GlibType = ffi::GtkPositionType;
9157
9158    #[inline]
9159    fn into_glib(self) -> ffi::GtkPositionType {
9160        match self {
9161            Self::Left => ffi::GTK_POS_LEFT,
9162            Self::Right => ffi::GTK_POS_RIGHT,
9163            Self::Top => ffi::GTK_POS_TOP,
9164            Self::Bottom => ffi::GTK_POS_BOTTOM,
9165            Self::__Unknown(value) => value,
9166        }
9167    }
9168}
9169
9170#[doc(hidden)]
9171impl FromGlib<ffi::GtkPositionType> for PositionType {
9172    #[inline]
9173    unsafe fn from_glib(value: ffi::GtkPositionType) -> Self {
9174        skip_assert_initialized!();
9175
9176        match value {
9177            ffi::GTK_POS_LEFT => Self::Left,
9178            ffi::GTK_POS_RIGHT => Self::Right,
9179            ffi::GTK_POS_TOP => Self::Top,
9180            ffi::GTK_POS_BOTTOM => Self::Bottom,
9181            value => Self::__Unknown(value),
9182        }
9183    }
9184}
9185
9186impl StaticType for PositionType {
9187    #[inline]
9188    #[doc(alias = "gtk_position_type_get_type")]
9189    fn static_type() -> glib::Type {
9190        unsafe { from_glib(ffi::gtk_position_type_get_type()) }
9191    }
9192}
9193
9194impl glib::HasParamSpec for PositionType {
9195    type ParamSpec = glib::ParamSpecEnum;
9196    type SetValue = Self;
9197    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9198
9199    fn param_spec_builder() -> Self::BuilderFn {
9200        Self::ParamSpec::builder_with_default
9201    }
9202}
9203
9204impl glib::value::ValueType for PositionType {
9205    type Type = Self;
9206}
9207
9208unsafe impl<'a> glib::value::FromValue<'a> for PositionType {
9209    type Checker = glib::value::GenericValueTypeChecker<Self>;
9210
9211    #[inline]
9212    unsafe fn from_value(value: &'a glib::Value) -> Self {
9213        skip_assert_initialized!();
9214        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9215    }
9216}
9217
9218impl ToValue for PositionType {
9219    #[inline]
9220    fn to_value(&self) -> glib::Value {
9221        let mut value = glib::Value::for_value_type::<Self>();
9222        unsafe {
9223            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9224        }
9225        value
9226    }
9227
9228    #[inline]
9229    fn value_type(&self) -> glib::Type {
9230        Self::static_type()
9231    }
9232}
9233
9234impl From<PositionType> for glib::Value {
9235    #[inline]
9236    fn from(v: PositionType) -> Self {
9237        skip_assert_initialized!();
9238        ToValue::to_value(&v)
9239    }
9240}
9241
9242/// See also gtk_print_settings_set_duplex().
9243#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9244#[non_exhaustive]
9245#[doc(alias = "GtkPrintDuplex")]
9246pub enum PrintDuplex {
9247    /// No duplex.
9248    #[doc(alias = "GTK_PRINT_DUPLEX_SIMPLEX")]
9249    Simplex,
9250    /// Horizontal duplex.
9251    #[doc(alias = "GTK_PRINT_DUPLEX_HORIZONTAL")]
9252    Horizontal,
9253    /// Vertical duplex.
9254    #[doc(alias = "GTK_PRINT_DUPLEX_VERTICAL")]
9255    Vertical,
9256    #[doc(hidden)]
9257    __Unknown(i32),
9258}
9259
9260#[doc(hidden)]
9261impl IntoGlib for PrintDuplex {
9262    type GlibType = ffi::GtkPrintDuplex;
9263
9264    #[inline]
9265    fn into_glib(self) -> ffi::GtkPrintDuplex {
9266        match self {
9267            Self::Simplex => ffi::GTK_PRINT_DUPLEX_SIMPLEX,
9268            Self::Horizontal => ffi::GTK_PRINT_DUPLEX_HORIZONTAL,
9269            Self::Vertical => ffi::GTK_PRINT_DUPLEX_VERTICAL,
9270            Self::__Unknown(value) => value,
9271        }
9272    }
9273}
9274
9275#[doc(hidden)]
9276impl FromGlib<ffi::GtkPrintDuplex> for PrintDuplex {
9277    #[inline]
9278    unsafe fn from_glib(value: ffi::GtkPrintDuplex) -> Self {
9279        skip_assert_initialized!();
9280
9281        match value {
9282            ffi::GTK_PRINT_DUPLEX_SIMPLEX => Self::Simplex,
9283            ffi::GTK_PRINT_DUPLEX_HORIZONTAL => Self::Horizontal,
9284            ffi::GTK_PRINT_DUPLEX_VERTICAL => Self::Vertical,
9285            value => Self::__Unknown(value),
9286        }
9287    }
9288}
9289
9290impl StaticType for PrintDuplex {
9291    #[inline]
9292    #[doc(alias = "gtk_print_duplex_get_type")]
9293    fn static_type() -> glib::Type {
9294        unsafe { from_glib(ffi::gtk_print_duplex_get_type()) }
9295    }
9296}
9297
9298impl glib::HasParamSpec for PrintDuplex {
9299    type ParamSpec = glib::ParamSpecEnum;
9300    type SetValue = Self;
9301    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9302
9303    fn param_spec_builder() -> Self::BuilderFn {
9304        Self::ParamSpec::builder_with_default
9305    }
9306}
9307
9308impl glib::value::ValueType for PrintDuplex {
9309    type Type = Self;
9310}
9311
9312unsafe impl<'a> glib::value::FromValue<'a> for PrintDuplex {
9313    type Checker = glib::value::GenericValueTypeChecker<Self>;
9314
9315    #[inline]
9316    unsafe fn from_value(value: &'a glib::Value) -> Self {
9317        skip_assert_initialized!();
9318        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9319    }
9320}
9321
9322impl ToValue for PrintDuplex {
9323    #[inline]
9324    fn to_value(&self) -> glib::Value {
9325        let mut value = glib::Value::for_value_type::<Self>();
9326        unsafe {
9327            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9328        }
9329        value
9330    }
9331
9332    #[inline]
9333    fn value_type(&self) -> glib::Type {
9334        Self::static_type()
9335    }
9336}
9337
9338impl From<PrintDuplex> for glib::Value {
9339    #[inline]
9340    fn from(v: PrintDuplex) -> Self {
9341        skip_assert_initialized!();
9342        ToValue::to_value(&v)
9343    }
9344}
9345
9346/// Error codes that identify various errors that can occur while
9347/// using the GTK printing support.
9348#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9349#[non_exhaustive]
9350#[doc(alias = "GtkPrintError")]
9351pub enum PrintError {
9352    /// An unspecified error occurred.
9353    #[doc(alias = "GTK_PRINT_ERROR_GENERAL")]
9354    General,
9355    /// An internal error occurred.
9356    #[doc(alias = "GTK_PRINT_ERROR_INTERNAL_ERROR")]
9357    InternalError,
9358    /// A memory allocation failed.
9359    #[doc(alias = "GTK_PRINT_ERROR_NOMEM")]
9360    Nomem,
9361    /// An error occurred while loading a page setup
9362    ///   or paper size from a key file.
9363    #[doc(alias = "GTK_PRINT_ERROR_INVALID_FILE")]
9364    InvalidFile,
9365    #[doc(hidden)]
9366    __Unknown(i32),
9367}
9368
9369#[doc(hidden)]
9370impl IntoGlib for PrintError {
9371    type GlibType = ffi::GtkPrintError;
9372
9373    #[inline]
9374    fn into_glib(self) -> ffi::GtkPrintError {
9375        match self {
9376            Self::General => ffi::GTK_PRINT_ERROR_GENERAL,
9377            Self::InternalError => ffi::GTK_PRINT_ERROR_INTERNAL_ERROR,
9378            Self::Nomem => ffi::GTK_PRINT_ERROR_NOMEM,
9379            Self::InvalidFile => ffi::GTK_PRINT_ERROR_INVALID_FILE,
9380            Self::__Unknown(value) => value,
9381        }
9382    }
9383}
9384
9385#[doc(hidden)]
9386impl FromGlib<ffi::GtkPrintError> for PrintError {
9387    #[inline]
9388    unsafe fn from_glib(value: ffi::GtkPrintError) -> Self {
9389        skip_assert_initialized!();
9390
9391        match value {
9392            ffi::GTK_PRINT_ERROR_GENERAL => Self::General,
9393            ffi::GTK_PRINT_ERROR_INTERNAL_ERROR => Self::InternalError,
9394            ffi::GTK_PRINT_ERROR_NOMEM => Self::Nomem,
9395            ffi::GTK_PRINT_ERROR_INVALID_FILE => Self::InvalidFile,
9396            value => Self::__Unknown(value),
9397        }
9398    }
9399}
9400
9401impl glib::error::ErrorDomain for PrintError {
9402    #[inline]
9403    fn domain() -> glib::Quark {
9404        skip_assert_initialized!();
9405
9406        unsafe { from_glib(ffi::gtk_print_error_quark()) }
9407    }
9408
9409    #[inline]
9410    fn code(self) -> i32 {
9411        self.into_glib()
9412    }
9413
9414    #[inline]
9415    #[allow(clippy::match_single_binding)]
9416    fn from(code: i32) -> Option<Self> {
9417        skip_assert_initialized!();
9418        match unsafe { from_glib(code) } {
9419            value => Some(value),
9420        }
9421    }
9422}
9423
9424impl StaticType for PrintError {
9425    #[inline]
9426    #[doc(alias = "gtk_print_error_get_type")]
9427    fn static_type() -> glib::Type {
9428        unsafe { from_glib(ffi::gtk_print_error_get_type()) }
9429    }
9430}
9431
9432impl glib::HasParamSpec for PrintError {
9433    type ParamSpec = glib::ParamSpecEnum;
9434    type SetValue = Self;
9435    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9436
9437    fn param_spec_builder() -> Self::BuilderFn {
9438        Self::ParamSpec::builder_with_default
9439    }
9440}
9441
9442impl glib::value::ValueType for PrintError {
9443    type Type = Self;
9444}
9445
9446unsafe impl<'a> glib::value::FromValue<'a> for PrintError {
9447    type Checker = glib::value::GenericValueTypeChecker<Self>;
9448
9449    #[inline]
9450    unsafe fn from_value(value: &'a glib::Value) -> Self {
9451        skip_assert_initialized!();
9452        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9453    }
9454}
9455
9456impl ToValue for PrintError {
9457    #[inline]
9458    fn to_value(&self) -> glib::Value {
9459        let mut value = glib::Value::for_value_type::<Self>();
9460        unsafe {
9461            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9462        }
9463        value
9464    }
9465
9466    #[inline]
9467    fn value_type(&self) -> glib::Type {
9468        Self::static_type()
9469    }
9470}
9471
9472impl From<PrintError> for glib::Value {
9473    #[inline]
9474    fn from(v: PrintError) -> Self {
9475        skip_assert_initialized!();
9476        ToValue::to_value(&v)
9477    }
9478}
9479
9480/// Determines what action the print operation should perform.
9481///
9482/// A parameter of this typs is passed to [`PrintOperationExt::run()`][crate::prelude::PrintOperationExt::run()].
9483#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9484#[non_exhaustive]
9485#[doc(alias = "GtkPrintOperationAction")]
9486pub enum PrintOperationAction {
9487    /// Show the print dialog.
9488    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG")]
9489    PrintDialog,
9490    /// Start to print without showing
9491    ///   the print dialog, based on the current print settings, if possible.
9492    ///   Depending on the platform, a print dialog might appear anyway.
9493    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_PRINT")]
9494    Print,
9495    /// Show the print preview.
9496    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_PREVIEW")]
9497    Preview,
9498    /// Export to a file. This requires
9499    ///   the export-filename property to be set.
9500    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_EXPORT")]
9501    Export,
9502    #[doc(hidden)]
9503    __Unknown(i32),
9504}
9505
9506#[doc(hidden)]
9507impl IntoGlib for PrintOperationAction {
9508    type GlibType = ffi::GtkPrintOperationAction;
9509
9510    #[inline]
9511    fn into_glib(self) -> ffi::GtkPrintOperationAction {
9512        match self {
9513            Self::PrintDialog => ffi::GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
9514            Self::Print => ffi::GTK_PRINT_OPERATION_ACTION_PRINT,
9515            Self::Preview => ffi::GTK_PRINT_OPERATION_ACTION_PREVIEW,
9516            Self::Export => ffi::GTK_PRINT_OPERATION_ACTION_EXPORT,
9517            Self::__Unknown(value) => value,
9518        }
9519    }
9520}
9521
9522#[doc(hidden)]
9523impl FromGlib<ffi::GtkPrintOperationAction> for PrintOperationAction {
9524    #[inline]
9525    unsafe fn from_glib(value: ffi::GtkPrintOperationAction) -> Self {
9526        skip_assert_initialized!();
9527
9528        match value {
9529            ffi::GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG => Self::PrintDialog,
9530            ffi::GTK_PRINT_OPERATION_ACTION_PRINT => Self::Print,
9531            ffi::GTK_PRINT_OPERATION_ACTION_PREVIEW => Self::Preview,
9532            ffi::GTK_PRINT_OPERATION_ACTION_EXPORT => Self::Export,
9533            value => Self::__Unknown(value),
9534        }
9535    }
9536}
9537
9538impl StaticType for PrintOperationAction {
9539    #[inline]
9540    #[doc(alias = "gtk_print_operation_action_get_type")]
9541    fn static_type() -> glib::Type {
9542        unsafe { from_glib(ffi::gtk_print_operation_action_get_type()) }
9543    }
9544}
9545
9546impl glib::HasParamSpec for PrintOperationAction {
9547    type ParamSpec = glib::ParamSpecEnum;
9548    type SetValue = Self;
9549    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9550
9551    fn param_spec_builder() -> Self::BuilderFn {
9552        Self::ParamSpec::builder_with_default
9553    }
9554}
9555
9556impl glib::value::ValueType for PrintOperationAction {
9557    type Type = Self;
9558}
9559
9560unsafe impl<'a> glib::value::FromValue<'a> for PrintOperationAction {
9561    type Checker = glib::value::GenericValueTypeChecker<Self>;
9562
9563    #[inline]
9564    unsafe fn from_value(value: &'a glib::Value) -> Self {
9565        skip_assert_initialized!();
9566        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9567    }
9568}
9569
9570impl ToValue for PrintOperationAction {
9571    #[inline]
9572    fn to_value(&self) -> glib::Value {
9573        let mut value = glib::Value::for_value_type::<Self>();
9574        unsafe {
9575            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9576        }
9577        value
9578    }
9579
9580    #[inline]
9581    fn value_type(&self) -> glib::Type {
9582        Self::static_type()
9583    }
9584}
9585
9586impl From<PrintOperationAction> for glib::Value {
9587    #[inline]
9588    fn from(v: PrintOperationAction) -> Self {
9589        skip_assert_initialized!();
9590        ToValue::to_value(&v)
9591    }
9592}
9593
9594/// The result of a print operation.
9595///
9596/// A value of this type is returned by [`PrintOperationExt::run()`][crate::prelude::PrintOperationExt::run()].
9597#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9598#[non_exhaustive]
9599#[doc(alias = "GtkPrintOperationResult")]
9600pub enum PrintOperationResult {
9601    /// An error has occurred.
9602    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_ERROR")]
9603    Error,
9604    /// The print settings should be stored.
9605    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_APPLY")]
9606    Apply,
9607    /// The print operation has been canceled,
9608    ///   the print settings should not be stored.
9609    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_CANCEL")]
9610    Cancel,
9611    /// The print operation is not complete
9612    ///   yet. This value will only be returned when running asynchronously.
9613    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_IN_PROGRESS")]
9614    InProgress,
9615    #[doc(hidden)]
9616    __Unknown(i32),
9617}
9618
9619#[doc(hidden)]
9620impl IntoGlib for PrintOperationResult {
9621    type GlibType = ffi::GtkPrintOperationResult;
9622
9623    #[inline]
9624    fn into_glib(self) -> ffi::GtkPrintOperationResult {
9625        match self {
9626            Self::Error => ffi::GTK_PRINT_OPERATION_RESULT_ERROR,
9627            Self::Apply => ffi::GTK_PRINT_OPERATION_RESULT_APPLY,
9628            Self::Cancel => ffi::GTK_PRINT_OPERATION_RESULT_CANCEL,
9629            Self::InProgress => ffi::GTK_PRINT_OPERATION_RESULT_IN_PROGRESS,
9630            Self::__Unknown(value) => value,
9631        }
9632    }
9633}
9634
9635#[doc(hidden)]
9636impl FromGlib<ffi::GtkPrintOperationResult> for PrintOperationResult {
9637    #[inline]
9638    unsafe fn from_glib(value: ffi::GtkPrintOperationResult) -> Self {
9639        skip_assert_initialized!();
9640
9641        match value {
9642            ffi::GTK_PRINT_OPERATION_RESULT_ERROR => Self::Error,
9643            ffi::GTK_PRINT_OPERATION_RESULT_APPLY => Self::Apply,
9644            ffi::GTK_PRINT_OPERATION_RESULT_CANCEL => Self::Cancel,
9645            ffi::GTK_PRINT_OPERATION_RESULT_IN_PROGRESS => Self::InProgress,
9646            value => Self::__Unknown(value),
9647        }
9648    }
9649}
9650
9651impl StaticType for PrintOperationResult {
9652    #[inline]
9653    #[doc(alias = "gtk_print_operation_result_get_type")]
9654    fn static_type() -> glib::Type {
9655        unsafe { from_glib(ffi::gtk_print_operation_result_get_type()) }
9656    }
9657}
9658
9659impl glib::HasParamSpec for PrintOperationResult {
9660    type ParamSpec = glib::ParamSpecEnum;
9661    type SetValue = Self;
9662    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9663
9664    fn param_spec_builder() -> Self::BuilderFn {
9665        Self::ParamSpec::builder_with_default
9666    }
9667}
9668
9669impl glib::value::ValueType for PrintOperationResult {
9670    type Type = Self;
9671}
9672
9673unsafe impl<'a> glib::value::FromValue<'a> for PrintOperationResult {
9674    type Checker = glib::value::GenericValueTypeChecker<Self>;
9675
9676    #[inline]
9677    unsafe fn from_value(value: &'a glib::Value) -> Self {
9678        skip_assert_initialized!();
9679        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9680    }
9681}
9682
9683impl ToValue for PrintOperationResult {
9684    #[inline]
9685    fn to_value(&self) -> glib::Value {
9686        let mut value = glib::Value::for_value_type::<Self>();
9687        unsafe {
9688            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9689        }
9690        value
9691    }
9692
9693    #[inline]
9694    fn value_type(&self) -> glib::Type {
9695        Self::static_type()
9696    }
9697}
9698
9699impl From<PrintOperationResult> for glib::Value {
9700    #[inline]
9701    fn from(v: PrintOperationResult) -> Self {
9702        skip_assert_initialized!();
9703        ToValue::to_value(&v)
9704    }
9705}
9706
9707/// See also gtk_print_job_set_pages()
9708#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9709#[non_exhaustive]
9710#[doc(alias = "GtkPrintPages")]
9711pub enum PrintPages {
9712    /// All pages.
9713    #[doc(alias = "GTK_PRINT_PAGES_ALL")]
9714    All,
9715    /// Current page.
9716    #[doc(alias = "GTK_PRINT_PAGES_CURRENT")]
9717    Current,
9718    /// Range of pages.
9719    #[doc(alias = "GTK_PRINT_PAGES_RANGES")]
9720    Ranges,
9721    /// Selected pages.
9722    #[doc(alias = "GTK_PRINT_PAGES_SELECTION")]
9723    Selection,
9724    #[doc(hidden)]
9725    __Unknown(i32),
9726}
9727
9728#[doc(hidden)]
9729impl IntoGlib for PrintPages {
9730    type GlibType = ffi::GtkPrintPages;
9731
9732    #[inline]
9733    fn into_glib(self) -> ffi::GtkPrintPages {
9734        match self {
9735            Self::All => ffi::GTK_PRINT_PAGES_ALL,
9736            Self::Current => ffi::GTK_PRINT_PAGES_CURRENT,
9737            Self::Ranges => ffi::GTK_PRINT_PAGES_RANGES,
9738            Self::Selection => ffi::GTK_PRINT_PAGES_SELECTION,
9739            Self::__Unknown(value) => value,
9740        }
9741    }
9742}
9743
9744#[doc(hidden)]
9745impl FromGlib<ffi::GtkPrintPages> for PrintPages {
9746    #[inline]
9747    unsafe fn from_glib(value: ffi::GtkPrintPages) -> Self {
9748        skip_assert_initialized!();
9749
9750        match value {
9751            ffi::GTK_PRINT_PAGES_ALL => Self::All,
9752            ffi::GTK_PRINT_PAGES_CURRENT => Self::Current,
9753            ffi::GTK_PRINT_PAGES_RANGES => Self::Ranges,
9754            ffi::GTK_PRINT_PAGES_SELECTION => Self::Selection,
9755            value => Self::__Unknown(value),
9756        }
9757    }
9758}
9759
9760impl StaticType for PrintPages {
9761    #[inline]
9762    #[doc(alias = "gtk_print_pages_get_type")]
9763    fn static_type() -> glib::Type {
9764        unsafe { from_glib(ffi::gtk_print_pages_get_type()) }
9765    }
9766}
9767
9768impl glib::HasParamSpec for PrintPages {
9769    type ParamSpec = glib::ParamSpecEnum;
9770    type SetValue = Self;
9771    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9772
9773    fn param_spec_builder() -> Self::BuilderFn {
9774        Self::ParamSpec::builder_with_default
9775    }
9776}
9777
9778impl glib::value::ValueType for PrintPages {
9779    type Type = Self;
9780}
9781
9782unsafe impl<'a> glib::value::FromValue<'a> for PrintPages {
9783    type Checker = glib::value::GenericValueTypeChecker<Self>;
9784
9785    #[inline]
9786    unsafe fn from_value(value: &'a glib::Value) -> Self {
9787        skip_assert_initialized!();
9788        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9789    }
9790}
9791
9792impl ToValue for PrintPages {
9793    #[inline]
9794    fn to_value(&self) -> glib::Value {
9795        let mut value = glib::Value::for_value_type::<Self>();
9796        unsafe {
9797            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9798        }
9799        value
9800    }
9801
9802    #[inline]
9803    fn value_type(&self) -> glib::Type {
9804        Self::static_type()
9805    }
9806}
9807
9808impl From<PrintPages> for glib::Value {
9809    #[inline]
9810    fn from(v: PrintPages) -> Self {
9811        skip_assert_initialized!();
9812        ToValue::to_value(&v)
9813    }
9814}
9815
9816/// See also gtk_print_settings_set_quality().
9817#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9818#[non_exhaustive]
9819#[doc(alias = "GtkPrintQuality")]
9820pub enum PrintQuality {
9821    /// Low quality.
9822    #[doc(alias = "GTK_PRINT_QUALITY_LOW")]
9823    Low,
9824    /// Normal quality.
9825    #[doc(alias = "GTK_PRINT_QUALITY_NORMAL")]
9826    Normal,
9827    /// High quality.
9828    #[doc(alias = "GTK_PRINT_QUALITY_HIGH")]
9829    High,
9830    /// Draft quality.
9831    #[doc(alias = "GTK_PRINT_QUALITY_DRAFT")]
9832    Draft,
9833    #[doc(hidden)]
9834    __Unknown(i32),
9835}
9836
9837#[doc(hidden)]
9838impl IntoGlib for PrintQuality {
9839    type GlibType = ffi::GtkPrintQuality;
9840
9841    #[inline]
9842    fn into_glib(self) -> ffi::GtkPrintQuality {
9843        match self {
9844            Self::Low => ffi::GTK_PRINT_QUALITY_LOW,
9845            Self::Normal => ffi::GTK_PRINT_QUALITY_NORMAL,
9846            Self::High => ffi::GTK_PRINT_QUALITY_HIGH,
9847            Self::Draft => ffi::GTK_PRINT_QUALITY_DRAFT,
9848            Self::__Unknown(value) => value,
9849        }
9850    }
9851}
9852
9853#[doc(hidden)]
9854impl FromGlib<ffi::GtkPrintQuality> for PrintQuality {
9855    #[inline]
9856    unsafe fn from_glib(value: ffi::GtkPrintQuality) -> Self {
9857        skip_assert_initialized!();
9858
9859        match value {
9860            ffi::GTK_PRINT_QUALITY_LOW => Self::Low,
9861            ffi::GTK_PRINT_QUALITY_NORMAL => Self::Normal,
9862            ffi::GTK_PRINT_QUALITY_HIGH => Self::High,
9863            ffi::GTK_PRINT_QUALITY_DRAFT => Self::Draft,
9864            value => Self::__Unknown(value),
9865        }
9866    }
9867}
9868
9869impl StaticType for PrintQuality {
9870    #[inline]
9871    #[doc(alias = "gtk_print_quality_get_type")]
9872    fn static_type() -> glib::Type {
9873        unsafe { from_glib(ffi::gtk_print_quality_get_type()) }
9874    }
9875}
9876
9877impl glib::HasParamSpec for PrintQuality {
9878    type ParamSpec = glib::ParamSpecEnum;
9879    type SetValue = Self;
9880    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9881
9882    fn param_spec_builder() -> Self::BuilderFn {
9883        Self::ParamSpec::builder_with_default
9884    }
9885}
9886
9887impl glib::value::ValueType for PrintQuality {
9888    type Type = Self;
9889}
9890
9891unsafe impl<'a> glib::value::FromValue<'a> for PrintQuality {
9892    type Checker = glib::value::GenericValueTypeChecker<Self>;
9893
9894    #[inline]
9895    unsafe fn from_value(value: &'a glib::Value) -> Self {
9896        skip_assert_initialized!();
9897        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9898    }
9899}
9900
9901impl ToValue for PrintQuality {
9902    #[inline]
9903    fn to_value(&self) -> glib::Value {
9904        let mut value = glib::Value::for_value_type::<Self>();
9905        unsafe {
9906            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9907        }
9908        value
9909    }
9910
9911    #[inline]
9912    fn value_type(&self) -> glib::Type {
9913        Self::static_type()
9914    }
9915}
9916
9917impl From<PrintQuality> for glib::Value {
9918    #[inline]
9919    fn from(v: PrintQuality) -> Self {
9920        skip_assert_initialized!();
9921        ToValue::to_value(&v)
9922    }
9923}
9924
9925/// The status gives a rough indication of the completion of a running
9926/// print operation.
9927#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9928#[non_exhaustive]
9929#[doc(alias = "GtkPrintStatus")]
9930pub enum PrintStatus {
9931    /// The printing has not started yet; this
9932    ///   status is set initially, and while the print dialog is shown.
9933    #[doc(alias = "GTK_PRINT_STATUS_INITIAL")]
9934    Initial,
9935    /// This status is set while the begin-print
9936    ///   signal is emitted and during pagination.
9937    #[doc(alias = "GTK_PRINT_STATUS_PREPARING")]
9938    Preparing,
9939    /// This status is set while the
9940    ///   pages are being rendered.
9941    #[doc(alias = "GTK_PRINT_STATUS_GENERATING_DATA")]
9942    GeneratingData,
9943    /// The print job is being sent off to the
9944    ///   printer.
9945    #[doc(alias = "GTK_PRINT_STATUS_SENDING_DATA")]
9946    SendingData,
9947    /// The print job has been sent to the printer,
9948    ///   but is not printed for some reason, e.g. the printer may be stopped.
9949    #[doc(alias = "GTK_PRINT_STATUS_PENDING")]
9950    Pending,
9951    /// Some problem has occurred during
9952    ///   printing, e.g. a paper jam.
9953    #[doc(alias = "GTK_PRINT_STATUS_PENDING_ISSUE")]
9954    PendingIssue,
9955    /// The printer is processing the print job.
9956    #[doc(alias = "GTK_PRINT_STATUS_PRINTING")]
9957    Printing,
9958    /// The printing has been completed successfully.
9959    #[doc(alias = "GTK_PRINT_STATUS_FINISHED")]
9960    Finished,
9961    /// The printing has been aborted.
9962    #[doc(alias = "GTK_PRINT_STATUS_FINISHED_ABORTED")]
9963    FinishedAborted,
9964    #[doc(hidden)]
9965    __Unknown(i32),
9966}
9967
9968#[doc(hidden)]
9969impl IntoGlib for PrintStatus {
9970    type GlibType = ffi::GtkPrintStatus;
9971
9972    #[inline]
9973    fn into_glib(self) -> ffi::GtkPrintStatus {
9974        match self {
9975            Self::Initial => ffi::GTK_PRINT_STATUS_INITIAL,
9976            Self::Preparing => ffi::GTK_PRINT_STATUS_PREPARING,
9977            Self::GeneratingData => ffi::GTK_PRINT_STATUS_GENERATING_DATA,
9978            Self::SendingData => ffi::GTK_PRINT_STATUS_SENDING_DATA,
9979            Self::Pending => ffi::GTK_PRINT_STATUS_PENDING,
9980            Self::PendingIssue => ffi::GTK_PRINT_STATUS_PENDING_ISSUE,
9981            Self::Printing => ffi::GTK_PRINT_STATUS_PRINTING,
9982            Self::Finished => ffi::GTK_PRINT_STATUS_FINISHED,
9983            Self::FinishedAborted => ffi::GTK_PRINT_STATUS_FINISHED_ABORTED,
9984            Self::__Unknown(value) => value,
9985        }
9986    }
9987}
9988
9989#[doc(hidden)]
9990impl FromGlib<ffi::GtkPrintStatus> for PrintStatus {
9991    #[inline]
9992    unsafe fn from_glib(value: ffi::GtkPrintStatus) -> Self {
9993        skip_assert_initialized!();
9994
9995        match value {
9996            ffi::GTK_PRINT_STATUS_INITIAL => Self::Initial,
9997            ffi::GTK_PRINT_STATUS_PREPARING => Self::Preparing,
9998            ffi::GTK_PRINT_STATUS_GENERATING_DATA => Self::GeneratingData,
9999            ffi::GTK_PRINT_STATUS_SENDING_DATA => Self::SendingData,
10000            ffi::GTK_PRINT_STATUS_PENDING => Self::Pending,
10001            ffi::GTK_PRINT_STATUS_PENDING_ISSUE => Self::PendingIssue,
10002            ffi::GTK_PRINT_STATUS_PRINTING => Self::Printing,
10003            ffi::GTK_PRINT_STATUS_FINISHED => Self::Finished,
10004            ffi::GTK_PRINT_STATUS_FINISHED_ABORTED => Self::FinishedAborted,
10005            value => Self::__Unknown(value),
10006        }
10007    }
10008}
10009
10010impl StaticType for PrintStatus {
10011    #[inline]
10012    #[doc(alias = "gtk_print_status_get_type")]
10013    fn static_type() -> glib::Type {
10014        unsafe { from_glib(ffi::gtk_print_status_get_type()) }
10015    }
10016}
10017
10018impl glib::HasParamSpec for PrintStatus {
10019    type ParamSpec = glib::ParamSpecEnum;
10020    type SetValue = Self;
10021    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10022
10023    fn param_spec_builder() -> Self::BuilderFn {
10024        Self::ParamSpec::builder_with_default
10025    }
10026}
10027
10028impl glib::value::ValueType for PrintStatus {
10029    type Type = Self;
10030}
10031
10032unsafe impl<'a> glib::value::FromValue<'a> for PrintStatus {
10033    type Checker = glib::value::GenericValueTypeChecker<Self>;
10034
10035    #[inline]
10036    unsafe fn from_value(value: &'a glib::Value) -> Self {
10037        skip_assert_initialized!();
10038        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10039    }
10040}
10041
10042impl ToValue for PrintStatus {
10043    #[inline]
10044    fn to_value(&self) -> glib::Value {
10045        let mut value = glib::Value::for_value_type::<Self>();
10046        unsafe {
10047            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10048        }
10049        value
10050    }
10051
10052    #[inline]
10053    fn value_type(&self) -> glib::Type {
10054        Self::static_type()
10055    }
10056}
10057
10058impl From<PrintStatus> for glib::Value {
10059    #[inline]
10060    fn from(v: PrintStatus) -> Self {
10061        skip_assert_initialized!();
10062        ToValue::to_value(&v)
10063    }
10064}
10065
10066/// Describes limits of a [`EventController`][crate::EventController] for handling events
10067/// targeting other widgets.
10068#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10069#[non_exhaustive]
10070#[doc(alias = "GtkPropagationLimit")]
10071pub enum PropagationLimit {
10072    /// Events are handled regardless of what their
10073    ///   target is.
10074    #[doc(alias = "GTK_LIMIT_NONE")]
10075    None,
10076    /// Events are only handled if their target is in
10077    ///   the same [`Native`][crate::Native] (or widget with [`limit-events`][struct@crate::Widget#limit-events]
10078    ///   set) as the event controllers widget.
10079    ///   Note that some event types have two targets (origin and destination).
10080    #[doc(alias = "GTK_LIMIT_SAME_NATIVE")]
10081    SameNative,
10082    #[doc(hidden)]
10083    __Unknown(i32),
10084}
10085
10086#[doc(hidden)]
10087impl IntoGlib for PropagationLimit {
10088    type GlibType = ffi::GtkPropagationLimit;
10089
10090    #[inline]
10091    fn into_glib(self) -> ffi::GtkPropagationLimit {
10092        match self {
10093            Self::None => ffi::GTK_LIMIT_NONE,
10094            Self::SameNative => ffi::GTK_LIMIT_SAME_NATIVE,
10095            Self::__Unknown(value) => value,
10096        }
10097    }
10098}
10099
10100#[doc(hidden)]
10101impl FromGlib<ffi::GtkPropagationLimit> for PropagationLimit {
10102    #[inline]
10103    unsafe fn from_glib(value: ffi::GtkPropagationLimit) -> Self {
10104        skip_assert_initialized!();
10105
10106        match value {
10107            ffi::GTK_LIMIT_NONE => Self::None,
10108            ffi::GTK_LIMIT_SAME_NATIVE => Self::SameNative,
10109            value => Self::__Unknown(value),
10110        }
10111    }
10112}
10113
10114impl StaticType for PropagationLimit {
10115    #[inline]
10116    #[doc(alias = "gtk_propagation_limit_get_type")]
10117    fn static_type() -> glib::Type {
10118        unsafe { from_glib(ffi::gtk_propagation_limit_get_type()) }
10119    }
10120}
10121
10122impl glib::HasParamSpec for PropagationLimit {
10123    type ParamSpec = glib::ParamSpecEnum;
10124    type SetValue = Self;
10125    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10126
10127    fn param_spec_builder() -> Self::BuilderFn {
10128        Self::ParamSpec::builder_with_default
10129    }
10130}
10131
10132impl glib::value::ValueType for PropagationLimit {
10133    type Type = Self;
10134}
10135
10136unsafe impl<'a> glib::value::FromValue<'a> for PropagationLimit {
10137    type Checker = glib::value::GenericValueTypeChecker<Self>;
10138
10139    #[inline]
10140    unsafe fn from_value(value: &'a glib::Value) -> Self {
10141        skip_assert_initialized!();
10142        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10143    }
10144}
10145
10146impl ToValue for PropagationLimit {
10147    #[inline]
10148    fn to_value(&self) -> glib::Value {
10149        let mut value = glib::Value::for_value_type::<Self>();
10150        unsafe {
10151            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10152        }
10153        value
10154    }
10155
10156    #[inline]
10157    fn value_type(&self) -> glib::Type {
10158        Self::static_type()
10159    }
10160}
10161
10162impl From<PropagationLimit> for glib::Value {
10163    #[inline]
10164    fn from(v: PropagationLimit) -> Self {
10165        skip_assert_initialized!();
10166        ToValue::to_value(&v)
10167    }
10168}
10169
10170/// Describes the stage at which events are fed into a [`EventController`][crate::EventController].
10171#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10172#[non_exhaustive]
10173#[doc(alias = "GtkPropagationPhase")]
10174pub enum PropagationPhase {
10175    /// Events are not delivered.
10176    #[doc(alias = "GTK_PHASE_NONE")]
10177    None,
10178    /// Events are delivered in the capture phase. The
10179    ///   capture phase happens before the bubble phase, runs from the toplevel down
10180    ///   to the event widget. This option should only be used on containers that
10181    ///   might possibly handle events before their children do.
10182    #[doc(alias = "GTK_PHASE_CAPTURE")]
10183    Capture,
10184    /// Events are delivered in the bubble phase. The bubble
10185    ///   phase happens after the capture phase, and before the default handlers
10186    ///   are run. This phase runs from the event widget, up to the toplevel.
10187    #[doc(alias = "GTK_PHASE_BUBBLE")]
10188    Bubble,
10189    /// Events are delivered in the default widget event handlers,
10190    ///   note that widget implementations must chain up on button, motion, touch and
10191    ///   grab broken handlers for controllers in this phase to be run.
10192    #[doc(alias = "GTK_PHASE_TARGET")]
10193    Target,
10194    #[doc(hidden)]
10195    __Unknown(i32),
10196}
10197
10198#[doc(hidden)]
10199impl IntoGlib for PropagationPhase {
10200    type GlibType = ffi::GtkPropagationPhase;
10201
10202    #[inline]
10203    fn into_glib(self) -> ffi::GtkPropagationPhase {
10204        match self {
10205            Self::None => ffi::GTK_PHASE_NONE,
10206            Self::Capture => ffi::GTK_PHASE_CAPTURE,
10207            Self::Bubble => ffi::GTK_PHASE_BUBBLE,
10208            Self::Target => ffi::GTK_PHASE_TARGET,
10209            Self::__Unknown(value) => value,
10210        }
10211    }
10212}
10213
10214#[doc(hidden)]
10215impl FromGlib<ffi::GtkPropagationPhase> for PropagationPhase {
10216    #[inline]
10217    unsafe fn from_glib(value: ffi::GtkPropagationPhase) -> Self {
10218        skip_assert_initialized!();
10219
10220        match value {
10221            ffi::GTK_PHASE_NONE => Self::None,
10222            ffi::GTK_PHASE_CAPTURE => Self::Capture,
10223            ffi::GTK_PHASE_BUBBLE => Self::Bubble,
10224            ffi::GTK_PHASE_TARGET => Self::Target,
10225            value => Self::__Unknown(value),
10226        }
10227    }
10228}
10229
10230impl StaticType for PropagationPhase {
10231    #[inline]
10232    #[doc(alias = "gtk_propagation_phase_get_type")]
10233    fn static_type() -> glib::Type {
10234        unsafe { from_glib(ffi::gtk_propagation_phase_get_type()) }
10235    }
10236}
10237
10238impl glib::HasParamSpec for PropagationPhase {
10239    type ParamSpec = glib::ParamSpecEnum;
10240    type SetValue = Self;
10241    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10242
10243    fn param_spec_builder() -> Self::BuilderFn {
10244        Self::ParamSpec::builder_with_default
10245    }
10246}
10247
10248impl glib::value::ValueType for PropagationPhase {
10249    type Type = Self;
10250}
10251
10252unsafe impl<'a> glib::value::FromValue<'a> for PropagationPhase {
10253    type Checker = glib::value::GenericValueTypeChecker<Self>;
10254
10255    #[inline]
10256    unsafe fn from_value(value: &'a glib::Value) -> Self {
10257        skip_assert_initialized!();
10258        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10259    }
10260}
10261
10262impl ToValue for PropagationPhase {
10263    #[inline]
10264    fn to_value(&self) -> glib::Value {
10265        let mut value = glib::Value::for_value_type::<Self>();
10266        unsafe {
10267            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10268        }
10269        value
10270    }
10271
10272    #[inline]
10273    fn value_type(&self) -> glib::Type {
10274        Self::static_type()
10275    }
10276}
10277
10278impl From<PropagationPhase> for glib::Value {
10279    #[inline]
10280    fn from(v: PropagationPhase) -> Self {
10281        skip_assert_initialized!();
10282        ToValue::to_value(&v)
10283    }
10284}
10285
10286/// Error codes for [`RecentManager`][crate::RecentManager] operations
10287#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10288#[non_exhaustive]
10289#[doc(alias = "GtkRecentManagerError")]
10290pub enum RecentManagerError {
10291    /// the URI specified does not exists in
10292    ///   the recently used resources list.
10293    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_NOT_FOUND")]
10294    NotFound,
10295    /// the URI specified is not valid.
10296    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_INVALID_URI")]
10297    InvalidUri,
10298    /// the supplied string is not
10299    ///   UTF-8 encoded.
10300    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING")]
10301    InvalidEncoding,
10302    /// no application has registered
10303    ///   the specified item.
10304    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED")]
10305    NotRegistered,
10306    /// failure while reading the recently used
10307    ///   resources file.
10308    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_READ")]
10309    Read,
10310    /// failure while writing the recently used
10311    ///   resources file.
10312    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_WRITE")]
10313    Write,
10314    /// unspecified error.
10315    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_UNKNOWN")]
10316    Unknown,
10317    #[doc(hidden)]
10318    __Unknown(i32),
10319}
10320
10321#[doc(hidden)]
10322impl IntoGlib for RecentManagerError {
10323    type GlibType = ffi::GtkRecentManagerError;
10324
10325    #[inline]
10326    fn into_glib(self) -> ffi::GtkRecentManagerError {
10327        match self {
10328            Self::NotFound => ffi::GTK_RECENT_MANAGER_ERROR_NOT_FOUND,
10329            Self::InvalidUri => ffi::GTK_RECENT_MANAGER_ERROR_INVALID_URI,
10330            Self::InvalidEncoding => ffi::GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING,
10331            Self::NotRegistered => ffi::GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED,
10332            Self::Read => ffi::GTK_RECENT_MANAGER_ERROR_READ,
10333            Self::Write => ffi::GTK_RECENT_MANAGER_ERROR_WRITE,
10334            Self::Unknown => ffi::GTK_RECENT_MANAGER_ERROR_UNKNOWN,
10335            Self::__Unknown(value) => value,
10336        }
10337    }
10338}
10339
10340#[doc(hidden)]
10341impl FromGlib<ffi::GtkRecentManagerError> for RecentManagerError {
10342    #[inline]
10343    unsafe fn from_glib(value: ffi::GtkRecentManagerError) -> Self {
10344        skip_assert_initialized!();
10345
10346        match value {
10347            ffi::GTK_RECENT_MANAGER_ERROR_NOT_FOUND => Self::NotFound,
10348            ffi::GTK_RECENT_MANAGER_ERROR_INVALID_URI => Self::InvalidUri,
10349            ffi::GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING => Self::InvalidEncoding,
10350            ffi::GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED => Self::NotRegistered,
10351            ffi::GTK_RECENT_MANAGER_ERROR_READ => Self::Read,
10352            ffi::GTK_RECENT_MANAGER_ERROR_WRITE => Self::Write,
10353            ffi::GTK_RECENT_MANAGER_ERROR_UNKNOWN => Self::Unknown,
10354            value => Self::__Unknown(value),
10355        }
10356    }
10357}
10358
10359impl glib::error::ErrorDomain for RecentManagerError {
10360    #[inline]
10361    fn domain() -> glib::Quark {
10362        skip_assert_initialized!();
10363
10364        unsafe { from_glib(ffi::gtk_recent_manager_error_quark()) }
10365    }
10366
10367    #[inline]
10368    fn code(self) -> i32 {
10369        self.into_glib()
10370    }
10371
10372    #[inline]
10373    #[allow(clippy::match_single_binding)]
10374    fn from(code: i32) -> Option<Self> {
10375        skip_assert_initialized!();
10376        match unsafe { from_glib(code) } {
10377            value => Some(value),
10378        }
10379    }
10380}
10381
10382impl StaticType for RecentManagerError {
10383    #[inline]
10384    #[doc(alias = "gtk_recent_manager_error_get_type")]
10385    fn static_type() -> glib::Type {
10386        unsafe { from_glib(ffi::gtk_recent_manager_error_get_type()) }
10387    }
10388}
10389
10390impl glib::HasParamSpec for RecentManagerError {
10391    type ParamSpec = glib::ParamSpecEnum;
10392    type SetValue = Self;
10393    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10394
10395    fn param_spec_builder() -> Self::BuilderFn {
10396        Self::ParamSpec::builder_with_default
10397    }
10398}
10399
10400impl glib::value::ValueType for RecentManagerError {
10401    type Type = Self;
10402}
10403
10404unsafe impl<'a> glib::value::FromValue<'a> for RecentManagerError {
10405    type Checker = glib::value::GenericValueTypeChecker<Self>;
10406
10407    #[inline]
10408    unsafe fn from_value(value: &'a glib::Value) -> Self {
10409        skip_assert_initialized!();
10410        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10411    }
10412}
10413
10414impl ToValue for RecentManagerError {
10415    #[inline]
10416    fn to_value(&self) -> glib::Value {
10417        let mut value = glib::Value::for_value_type::<Self>();
10418        unsafe {
10419            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10420        }
10421        value
10422    }
10423
10424    #[inline]
10425    fn value_type(&self) -> glib::Type {
10426        Self::static_type()
10427    }
10428}
10429
10430impl From<RecentManagerError> for glib::Value {
10431    #[inline]
10432    fn from(v: RecentManagerError) -> Self {
10433        skip_assert_initialized!();
10434        ToValue::to_value(&v)
10435    }
10436}
10437
10438/// Values for the [`gtk-interface-reduced-motion`][struct@crate::Settings#gtk-interface-reduced-motion]
10439/// and [`prefers-reduced-motion`][struct@crate::CssProvider#prefers-reduced-motion] properties
10440/// that indicates the preferred level of motion animations.
10441///
10442/// This information can be used inside CSS via media queries.
10443#[cfg(feature = "v4_22")]
10444#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10445#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10446#[non_exhaustive]
10447#[doc(alias = "GtkReducedMotion")]
10448pub enum ReducedMotion {
10449    /// The user has made no preference known to the system
10450    #[doc(alias = "GTK_REDUCED_MOTION_NO_PREFERENCE")]
10451    NoPreference,
10452    /// The user has notified the system that they
10453    ///   prefer an interface that removes or replaces the types of motion-based
10454    ///   animation that either trigger discomfort for those with vestibular
10455    ///   motion sensitivity, or distraction for those with attention deficits
10456    #[doc(alias = "GTK_REDUCED_MOTION_REDUCE")]
10457    Reduce,
10458    #[doc(hidden)]
10459    __Unknown(i32),
10460}
10461
10462#[cfg(feature = "v4_22")]
10463#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10464#[doc(hidden)]
10465impl IntoGlib for ReducedMotion {
10466    type GlibType = ffi::GtkReducedMotion;
10467
10468    #[inline]
10469    fn into_glib(self) -> ffi::GtkReducedMotion {
10470        match self {
10471            Self::NoPreference => ffi::GTK_REDUCED_MOTION_NO_PREFERENCE,
10472            Self::Reduce => ffi::GTK_REDUCED_MOTION_REDUCE,
10473            Self::__Unknown(value) => value,
10474        }
10475    }
10476}
10477
10478#[cfg(feature = "v4_22")]
10479#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10480#[doc(hidden)]
10481impl FromGlib<ffi::GtkReducedMotion> for ReducedMotion {
10482    #[inline]
10483    unsafe fn from_glib(value: ffi::GtkReducedMotion) -> Self {
10484        skip_assert_initialized!();
10485
10486        match value {
10487            ffi::GTK_REDUCED_MOTION_NO_PREFERENCE => Self::NoPreference,
10488            ffi::GTK_REDUCED_MOTION_REDUCE => Self::Reduce,
10489            value => Self::__Unknown(value),
10490        }
10491    }
10492}
10493
10494#[cfg(feature = "v4_22")]
10495#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10496impl StaticType for ReducedMotion {
10497    #[inline]
10498    #[doc(alias = "gtk_reduced_motion_get_type")]
10499    fn static_type() -> glib::Type {
10500        unsafe { from_glib(ffi::gtk_reduced_motion_get_type()) }
10501    }
10502}
10503
10504#[cfg(feature = "v4_22")]
10505#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10506impl glib::HasParamSpec for ReducedMotion {
10507    type ParamSpec = glib::ParamSpecEnum;
10508    type SetValue = Self;
10509    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10510
10511    fn param_spec_builder() -> Self::BuilderFn {
10512        Self::ParamSpec::builder_with_default
10513    }
10514}
10515
10516#[cfg(feature = "v4_22")]
10517#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10518impl glib::value::ValueType for ReducedMotion {
10519    type Type = Self;
10520}
10521
10522#[cfg(feature = "v4_22")]
10523#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10524unsafe impl<'a> glib::value::FromValue<'a> for ReducedMotion {
10525    type Checker = glib::value::GenericValueTypeChecker<Self>;
10526
10527    #[inline]
10528    unsafe fn from_value(value: &'a glib::Value) -> Self {
10529        skip_assert_initialized!();
10530        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10531    }
10532}
10533
10534#[cfg(feature = "v4_22")]
10535#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10536impl ToValue for ReducedMotion {
10537    #[inline]
10538    fn to_value(&self) -> glib::Value {
10539        let mut value = glib::Value::for_value_type::<Self>();
10540        unsafe {
10541            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10542        }
10543        value
10544    }
10545
10546    #[inline]
10547    fn value_type(&self) -> glib::Type {
10548        Self::static_type()
10549    }
10550}
10551
10552#[cfg(feature = "v4_22")]
10553#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10554impl From<ReducedMotion> for glib::Value {
10555    #[inline]
10556    fn from(v: ReducedMotion) -> Self {
10557        skip_assert_initialized!();
10558        ToValue::to_value(&v)
10559    }
10560}
10561
10562/// These enumeration values describe the possible transitions
10563/// when the child of a [`Revealer`][crate::Revealer] widget is shown or hidden.
10564#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10565#[non_exhaustive]
10566#[doc(alias = "GtkRevealerTransitionType")]
10567pub enum RevealerTransitionType {
10568    /// No transition
10569    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_NONE")]
10570    None,
10571    /// Fade in
10572    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_CROSSFADE")]
10573    Crossfade,
10574    /// Slide in from the left
10575    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT")]
10576    SlideRight,
10577    /// Slide in from the right
10578    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT")]
10579    SlideLeft,
10580    /// Slide in from the bottom
10581    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP")]
10582    SlideUp,
10583    /// Slide in from the top
10584    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN")]
10585    SlideDown,
10586    /// Floop in from the left
10587    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_RIGHT")]
10588    SwingRight,
10589    /// Floop in from the right
10590    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_LEFT")]
10591    SwingLeft,
10592    /// Floop in from the bottom
10593    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_UP")]
10594    SwingUp,
10595    /// Floop in from the top
10596    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_DOWN")]
10597    SwingDown,
10598    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10599    /// and [enum@Gtk.RevealerTransitionType.SLIDE_RIGHT].
10600    #[cfg(feature = "v4_22")]
10601    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10602    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_RIGHT")]
10603    FadeSlideRight,
10604    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10605    /// and [enum@Gtk.RevealerTransitionType.SLIDE_LEFT].
10606    #[cfg(feature = "v4_22")]
10607    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10608    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_LEFT")]
10609    FadeSlideLeft,
10610    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10611    /// and [enum@Gtk.RevealerTransitionType.SLIDE_UP].
10612    #[cfg(feature = "v4_22")]
10613    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10614    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_UP")]
10615    FadeSlideUp,
10616    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10617    /// and [enum@Gtk.RevealerTransitionType.SLIDE_DOWN].
10618    #[cfg(feature = "v4_22")]
10619    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10620    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_DOWN")]
10621    FadeSlideDown,
10622    #[doc(hidden)]
10623    __Unknown(i32),
10624}
10625
10626#[doc(hidden)]
10627impl IntoGlib for RevealerTransitionType {
10628    type GlibType = ffi::GtkRevealerTransitionType;
10629
10630    fn into_glib(self) -> ffi::GtkRevealerTransitionType {
10631        match self {
10632            Self::None => ffi::GTK_REVEALER_TRANSITION_TYPE_NONE,
10633            Self::Crossfade => ffi::GTK_REVEALER_TRANSITION_TYPE_CROSSFADE,
10634            Self::SlideRight => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT,
10635            Self::SlideLeft => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT,
10636            Self::SlideUp => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP,
10637            Self::SlideDown => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN,
10638            Self::SwingRight => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_RIGHT,
10639            Self::SwingLeft => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_LEFT,
10640            Self::SwingUp => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_UP,
10641            Self::SwingDown => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_DOWN,
10642            #[cfg(feature = "v4_22")]
10643            Self::FadeSlideRight => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_RIGHT,
10644            #[cfg(feature = "v4_22")]
10645            Self::FadeSlideLeft => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_LEFT,
10646            #[cfg(feature = "v4_22")]
10647            Self::FadeSlideUp => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_UP,
10648            #[cfg(feature = "v4_22")]
10649            Self::FadeSlideDown => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_DOWN,
10650            Self::__Unknown(value) => value,
10651        }
10652    }
10653}
10654
10655#[doc(hidden)]
10656impl FromGlib<ffi::GtkRevealerTransitionType> for RevealerTransitionType {
10657    unsafe fn from_glib(value: ffi::GtkRevealerTransitionType) -> Self {
10658        skip_assert_initialized!();
10659
10660        match value {
10661            ffi::GTK_REVEALER_TRANSITION_TYPE_NONE => Self::None,
10662            ffi::GTK_REVEALER_TRANSITION_TYPE_CROSSFADE => Self::Crossfade,
10663            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT => Self::SlideRight,
10664            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT => Self::SlideLeft,
10665            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP => Self::SlideUp,
10666            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN => Self::SlideDown,
10667            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_RIGHT => Self::SwingRight,
10668            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_LEFT => Self::SwingLeft,
10669            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_UP => Self::SwingUp,
10670            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_DOWN => Self::SwingDown,
10671            #[cfg(feature = "v4_22")]
10672            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_RIGHT => Self::FadeSlideRight,
10673            #[cfg(feature = "v4_22")]
10674            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_LEFT => Self::FadeSlideLeft,
10675            #[cfg(feature = "v4_22")]
10676            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_UP => Self::FadeSlideUp,
10677            #[cfg(feature = "v4_22")]
10678            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_DOWN => Self::FadeSlideDown,
10679            value => Self::__Unknown(value),
10680        }
10681    }
10682}
10683
10684impl StaticType for RevealerTransitionType {
10685    #[inline]
10686    #[doc(alias = "gtk_revealer_transition_type_get_type")]
10687    fn static_type() -> glib::Type {
10688        unsafe { from_glib(ffi::gtk_revealer_transition_type_get_type()) }
10689    }
10690}
10691
10692impl glib::HasParamSpec for RevealerTransitionType {
10693    type ParamSpec = glib::ParamSpecEnum;
10694    type SetValue = Self;
10695    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10696
10697    fn param_spec_builder() -> Self::BuilderFn {
10698        Self::ParamSpec::builder_with_default
10699    }
10700}
10701
10702impl glib::value::ValueType for RevealerTransitionType {
10703    type Type = Self;
10704}
10705
10706unsafe impl<'a> glib::value::FromValue<'a> for RevealerTransitionType {
10707    type Checker = glib::value::GenericValueTypeChecker<Self>;
10708
10709    #[inline]
10710    unsafe fn from_value(value: &'a glib::Value) -> Self {
10711        skip_assert_initialized!();
10712        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10713    }
10714}
10715
10716impl ToValue for RevealerTransitionType {
10717    #[inline]
10718    fn to_value(&self) -> glib::Value {
10719        let mut value = glib::Value::for_value_type::<Self>();
10720        unsafe {
10721            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10722        }
10723        value
10724    }
10725
10726    #[inline]
10727    fn value_type(&self) -> glib::Type {
10728        Self::static_type()
10729    }
10730}
10731
10732impl From<RevealerTransitionType> for glib::Value {
10733    #[inline]
10734    fn from(v: RevealerTransitionType) -> Self {
10735        skip_assert_initialized!();
10736        ToValue::to_value(&v)
10737    }
10738}
10739
10740/// Passed as argument to various keybinding signals.
10741#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10742#[non_exhaustive]
10743#[doc(alias = "GtkScrollStep")]
10744pub enum ScrollStep {
10745    /// Scroll in steps.
10746    #[doc(alias = "GTK_SCROLL_STEPS")]
10747    Steps,
10748    /// Scroll by pages.
10749    #[doc(alias = "GTK_SCROLL_PAGES")]
10750    Pages,
10751    /// Scroll to ends.
10752    #[doc(alias = "GTK_SCROLL_ENDS")]
10753    Ends,
10754    /// Scroll in horizontal steps.
10755    #[doc(alias = "GTK_SCROLL_HORIZONTAL_STEPS")]
10756    HorizontalSteps,
10757    /// Scroll by horizontal pages.
10758    #[doc(alias = "GTK_SCROLL_HORIZONTAL_PAGES")]
10759    HorizontalPages,
10760    /// Scroll to the horizontal ends.
10761    #[doc(alias = "GTK_SCROLL_HORIZONTAL_ENDS")]
10762    HorizontalEnds,
10763    #[doc(hidden)]
10764    __Unknown(i32),
10765}
10766
10767#[doc(hidden)]
10768impl IntoGlib for ScrollStep {
10769    type GlibType = ffi::GtkScrollStep;
10770
10771    #[inline]
10772    fn into_glib(self) -> ffi::GtkScrollStep {
10773        match self {
10774            Self::Steps => ffi::GTK_SCROLL_STEPS,
10775            Self::Pages => ffi::GTK_SCROLL_PAGES,
10776            Self::Ends => ffi::GTK_SCROLL_ENDS,
10777            Self::HorizontalSteps => ffi::GTK_SCROLL_HORIZONTAL_STEPS,
10778            Self::HorizontalPages => ffi::GTK_SCROLL_HORIZONTAL_PAGES,
10779            Self::HorizontalEnds => ffi::GTK_SCROLL_HORIZONTAL_ENDS,
10780            Self::__Unknown(value) => value,
10781        }
10782    }
10783}
10784
10785#[doc(hidden)]
10786impl FromGlib<ffi::GtkScrollStep> for ScrollStep {
10787    #[inline]
10788    unsafe fn from_glib(value: ffi::GtkScrollStep) -> Self {
10789        skip_assert_initialized!();
10790
10791        match value {
10792            ffi::GTK_SCROLL_STEPS => Self::Steps,
10793            ffi::GTK_SCROLL_PAGES => Self::Pages,
10794            ffi::GTK_SCROLL_ENDS => Self::Ends,
10795            ffi::GTK_SCROLL_HORIZONTAL_STEPS => Self::HorizontalSteps,
10796            ffi::GTK_SCROLL_HORIZONTAL_PAGES => Self::HorizontalPages,
10797            ffi::GTK_SCROLL_HORIZONTAL_ENDS => Self::HorizontalEnds,
10798            value => Self::__Unknown(value),
10799        }
10800    }
10801}
10802
10803impl StaticType for ScrollStep {
10804    #[inline]
10805    #[doc(alias = "gtk_scroll_step_get_type")]
10806    fn static_type() -> glib::Type {
10807        unsafe { from_glib(ffi::gtk_scroll_step_get_type()) }
10808    }
10809}
10810
10811impl glib::HasParamSpec for ScrollStep {
10812    type ParamSpec = glib::ParamSpecEnum;
10813    type SetValue = Self;
10814    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10815
10816    fn param_spec_builder() -> Self::BuilderFn {
10817        Self::ParamSpec::builder_with_default
10818    }
10819}
10820
10821impl glib::value::ValueType for ScrollStep {
10822    type Type = Self;
10823}
10824
10825unsafe impl<'a> glib::value::FromValue<'a> for ScrollStep {
10826    type Checker = glib::value::GenericValueTypeChecker<Self>;
10827
10828    #[inline]
10829    unsafe fn from_value(value: &'a glib::Value) -> Self {
10830        skip_assert_initialized!();
10831        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10832    }
10833}
10834
10835impl ToValue for ScrollStep {
10836    #[inline]
10837    fn to_value(&self) -> glib::Value {
10838        let mut value = glib::Value::for_value_type::<Self>();
10839        unsafe {
10840            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10841        }
10842        value
10843    }
10844
10845    #[inline]
10846    fn value_type(&self) -> glib::Type {
10847        Self::static_type()
10848    }
10849}
10850
10851impl From<ScrollStep> for glib::Value {
10852    #[inline]
10853    fn from(v: ScrollStep) -> Self {
10854        skip_assert_initialized!();
10855        ToValue::to_value(&v)
10856    }
10857}
10858
10859/// Scrolling types.
10860#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10861#[non_exhaustive]
10862#[doc(alias = "GtkScrollType")]
10863pub enum ScrollType {
10864    /// No scrolling.
10865    #[doc(alias = "GTK_SCROLL_NONE")]
10866    None,
10867    /// Jump to new location.
10868    #[doc(alias = "GTK_SCROLL_JUMP")]
10869    Jump,
10870    /// Step backward.
10871    #[doc(alias = "GTK_SCROLL_STEP_BACKWARD")]
10872    StepBackward,
10873    /// Step forward.
10874    #[doc(alias = "GTK_SCROLL_STEP_FORWARD")]
10875    StepForward,
10876    /// Page backward.
10877    #[doc(alias = "GTK_SCROLL_PAGE_BACKWARD")]
10878    PageBackward,
10879    /// Page forward.
10880    #[doc(alias = "GTK_SCROLL_PAGE_FORWARD")]
10881    PageForward,
10882    /// Step up.
10883    #[doc(alias = "GTK_SCROLL_STEP_UP")]
10884    StepUp,
10885    /// Step down.
10886    #[doc(alias = "GTK_SCROLL_STEP_DOWN")]
10887    StepDown,
10888    /// Page up.
10889    #[doc(alias = "GTK_SCROLL_PAGE_UP")]
10890    PageUp,
10891    /// Page down.
10892    #[doc(alias = "GTK_SCROLL_PAGE_DOWN")]
10893    PageDown,
10894    /// Step to the left.
10895    #[doc(alias = "GTK_SCROLL_STEP_LEFT")]
10896    StepLeft,
10897    /// Step to the right.
10898    #[doc(alias = "GTK_SCROLL_STEP_RIGHT")]
10899    StepRight,
10900    /// Page to the left.
10901    #[doc(alias = "GTK_SCROLL_PAGE_LEFT")]
10902    PageLeft,
10903    /// Page to the right.
10904    #[doc(alias = "GTK_SCROLL_PAGE_RIGHT")]
10905    PageRight,
10906    /// Scroll to start.
10907    #[doc(alias = "GTK_SCROLL_START")]
10908    Start,
10909    /// Scroll to end.
10910    #[doc(alias = "GTK_SCROLL_END")]
10911    End,
10912    #[doc(hidden)]
10913    __Unknown(i32),
10914}
10915
10916#[doc(hidden)]
10917impl IntoGlib for ScrollType {
10918    type GlibType = ffi::GtkScrollType;
10919
10920    fn into_glib(self) -> ffi::GtkScrollType {
10921        match self {
10922            Self::None => ffi::GTK_SCROLL_NONE,
10923            Self::Jump => ffi::GTK_SCROLL_JUMP,
10924            Self::StepBackward => ffi::GTK_SCROLL_STEP_BACKWARD,
10925            Self::StepForward => ffi::GTK_SCROLL_STEP_FORWARD,
10926            Self::PageBackward => ffi::GTK_SCROLL_PAGE_BACKWARD,
10927            Self::PageForward => ffi::GTK_SCROLL_PAGE_FORWARD,
10928            Self::StepUp => ffi::GTK_SCROLL_STEP_UP,
10929            Self::StepDown => ffi::GTK_SCROLL_STEP_DOWN,
10930            Self::PageUp => ffi::GTK_SCROLL_PAGE_UP,
10931            Self::PageDown => ffi::GTK_SCROLL_PAGE_DOWN,
10932            Self::StepLeft => ffi::GTK_SCROLL_STEP_LEFT,
10933            Self::StepRight => ffi::GTK_SCROLL_STEP_RIGHT,
10934            Self::PageLeft => ffi::GTK_SCROLL_PAGE_LEFT,
10935            Self::PageRight => ffi::GTK_SCROLL_PAGE_RIGHT,
10936            Self::Start => ffi::GTK_SCROLL_START,
10937            Self::End => ffi::GTK_SCROLL_END,
10938            Self::__Unknown(value) => value,
10939        }
10940    }
10941}
10942
10943#[doc(hidden)]
10944impl FromGlib<ffi::GtkScrollType> for ScrollType {
10945    unsafe fn from_glib(value: ffi::GtkScrollType) -> Self {
10946        skip_assert_initialized!();
10947
10948        match value {
10949            ffi::GTK_SCROLL_NONE => Self::None,
10950            ffi::GTK_SCROLL_JUMP => Self::Jump,
10951            ffi::GTK_SCROLL_STEP_BACKWARD => Self::StepBackward,
10952            ffi::GTK_SCROLL_STEP_FORWARD => Self::StepForward,
10953            ffi::GTK_SCROLL_PAGE_BACKWARD => Self::PageBackward,
10954            ffi::GTK_SCROLL_PAGE_FORWARD => Self::PageForward,
10955            ffi::GTK_SCROLL_STEP_UP => Self::StepUp,
10956            ffi::GTK_SCROLL_STEP_DOWN => Self::StepDown,
10957            ffi::GTK_SCROLL_PAGE_UP => Self::PageUp,
10958            ffi::GTK_SCROLL_PAGE_DOWN => Self::PageDown,
10959            ffi::GTK_SCROLL_STEP_LEFT => Self::StepLeft,
10960            ffi::GTK_SCROLL_STEP_RIGHT => Self::StepRight,
10961            ffi::GTK_SCROLL_PAGE_LEFT => Self::PageLeft,
10962            ffi::GTK_SCROLL_PAGE_RIGHT => Self::PageRight,
10963            ffi::GTK_SCROLL_START => Self::Start,
10964            ffi::GTK_SCROLL_END => Self::End,
10965            value => Self::__Unknown(value),
10966        }
10967    }
10968}
10969
10970impl StaticType for ScrollType {
10971    #[inline]
10972    #[doc(alias = "gtk_scroll_type_get_type")]
10973    fn static_type() -> glib::Type {
10974        unsafe { from_glib(ffi::gtk_scroll_type_get_type()) }
10975    }
10976}
10977
10978impl glib::HasParamSpec for ScrollType {
10979    type ParamSpec = glib::ParamSpecEnum;
10980    type SetValue = Self;
10981    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10982
10983    fn param_spec_builder() -> Self::BuilderFn {
10984        Self::ParamSpec::builder_with_default
10985    }
10986}
10987
10988impl glib::value::ValueType for ScrollType {
10989    type Type = Self;
10990}
10991
10992unsafe impl<'a> glib::value::FromValue<'a> for ScrollType {
10993    type Checker = glib::value::GenericValueTypeChecker<Self>;
10994
10995    #[inline]
10996    unsafe fn from_value(value: &'a glib::Value) -> Self {
10997        skip_assert_initialized!();
10998        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10999    }
11000}
11001
11002impl ToValue for ScrollType {
11003    #[inline]
11004    fn to_value(&self) -> glib::Value {
11005        let mut value = glib::Value::for_value_type::<Self>();
11006        unsafe {
11007            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11008        }
11009        value
11010    }
11011
11012    #[inline]
11013    fn value_type(&self) -> glib::Type {
11014        Self::static_type()
11015    }
11016}
11017
11018impl From<ScrollType> for glib::Value {
11019    #[inline]
11020    fn from(v: ScrollType) -> Self {
11021        skip_assert_initialized!();
11022        ToValue::to_value(&v)
11023    }
11024}
11025
11026/// Defines the policy to be used in a scrollable widget when updating
11027/// the scrolled window adjustments in a given orientation.
11028#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11029#[non_exhaustive]
11030#[doc(alias = "GtkScrollablePolicy")]
11031pub enum ScrollablePolicy {
11032    /// Scrollable adjustments are based on the minimum size
11033    #[doc(alias = "GTK_SCROLL_MINIMUM")]
11034    Minimum,
11035    /// Scrollable adjustments are based on the natural size
11036    #[doc(alias = "GTK_SCROLL_NATURAL")]
11037    Natural,
11038    #[doc(hidden)]
11039    __Unknown(i32),
11040}
11041
11042#[doc(hidden)]
11043impl IntoGlib for ScrollablePolicy {
11044    type GlibType = ffi::GtkScrollablePolicy;
11045
11046    #[inline]
11047    fn into_glib(self) -> ffi::GtkScrollablePolicy {
11048        match self {
11049            Self::Minimum => ffi::GTK_SCROLL_MINIMUM,
11050            Self::Natural => ffi::GTK_SCROLL_NATURAL,
11051            Self::__Unknown(value) => value,
11052        }
11053    }
11054}
11055
11056#[doc(hidden)]
11057impl FromGlib<ffi::GtkScrollablePolicy> for ScrollablePolicy {
11058    #[inline]
11059    unsafe fn from_glib(value: ffi::GtkScrollablePolicy) -> Self {
11060        skip_assert_initialized!();
11061
11062        match value {
11063            ffi::GTK_SCROLL_MINIMUM => Self::Minimum,
11064            ffi::GTK_SCROLL_NATURAL => Self::Natural,
11065            value => Self::__Unknown(value),
11066        }
11067    }
11068}
11069
11070impl StaticType for ScrollablePolicy {
11071    #[inline]
11072    #[doc(alias = "gtk_scrollable_policy_get_type")]
11073    fn static_type() -> glib::Type {
11074        unsafe { from_glib(ffi::gtk_scrollable_policy_get_type()) }
11075    }
11076}
11077
11078impl glib::HasParamSpec for ScrollablePolicy {
11079    type ParamSpec = glib::ParamSpecEnum;
11080    type SetValue = Self;
11081    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11082
11083    fn param_spec_builder() -> Self::BuilderFn {
11084        Self::ParamSpec::builder_with_default
11085    }
11086}
11087
11088impl glib::value::ValueType for ScrollablePolicy {
11089    type Type = Self;
11090}
11091
11092unsafe impl<'a> glib::value::FromValue<'a> for ScrollablePolicy {
11093    type Checker = glib::value::GenericValueTypeChecker<Self>;
11094
11095    #[inline]
11096    unsafe fn from_value(value: &'a glib::Value) -> Self {
11097        skip_assert_initialized!();
11098        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11099    }
11100}
11101
11102impl ToValue for ScrollablePolicy {
11103    #[inline]
11104    fn to_value(&self) -> glib::Value {
11105        let mut value = glib::Value::for_value_type::<Self>();
11106        unsafe {
11107            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11108        }
11109        value
11110    }
11111
11112    #[inline]
11113    fn value_type(&self) -> glib::Type {
11114        Self::static_type()
11115    }
11116}
11117
11118impl From<ScrollablePolicy> for glib::Value {
11119    #[inline]
11120    fn from(v: ScrollablePolicy) -> Self {
11121        skip_assert_initialized!();
11122        ToValue::to_value(&v)
11123    }
11124}
11125
11126/// Used to control what selections users are allowed to make.
11127#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11128#[non_exhaustive]
11129#[doc(alias = "GtkSelectionMode")]
11130pub enum SelectionMode {
11131    /// No selection is possible.
11132    #[doc(alias = "GTK_SELECTION_NONE")]
11133    None,
11134    /// Zero or one element may be selected.
11135    #[doc(alias = "GTK_SELECTION_SINGLE")]
11136    Single,
11137    /// Exactly one element is selected.
11138    ///   In some circumstances, such as initially or during a search
11139    ///   operation, it’s possible for no element to be selected with
11140    ///   [`Browse`][Self::Browse]. What is really enforced is that the user
11141    ///   can’t deselect a currently selected element except by selecting
11142    ///   another element.
11143    #[doc(alias = "GTK_SELECTION_BROWSE")]
11144    Browse,
11145    /// Any number of elements may be selected.
11146    ///   The Ctrl key may be used to enlarge the selection, and Shift
11147    ///   key to select between the focus and the child pointed to.
11148    ///   Some widgets may also allow Click-drag to select a range of elements.
11149    #[doc(alias = "GTK_SELECTION_MULTIPLE")]
11150    Multiple,
11151    #[doc(hidden)]
11152    __Unknown(i32),
11153}
11154
11155#[doc(hidden)]
11156impl IntoGlib for SelectionMode {
11157    type GlibType = ffi::GtkSelectionMode;
11158
11159    #[inline]
11160    fn into_glib(self) -> ffi::GtkSelectionMode {
11161        match self {
11162            Self::None => ffi::GTK_SELECTION_NONE,
11163            Self::Single => ffi::GTK_SELECTION_SINGLE,
11164            Self::Browse => ffi::GTK_SELECTION_BROWSE,
11165            Self::Multiple => ffi::GTK_SELECTION_MULTIPLE,
11166            Self::__Unknown(value) => value,
11167        }
11168    }
11169}
11170
11171#[doc(hidden)]
11172impl FromGlib<ffi::GtkSelectionMode> for SelectionMode {
11173    #[inline]
11174    unsafe fn from_glib(value: ffi::GtkSelectionMode) -> Self {
11175        skip_assert_initialized!();
11176
11177        match value {
11178            ffi::GTK_SELECTION_NONE => Self::None,
11179            ffi::GTK_SELECTION_SINGLE => Self::Single,
11180            ffi::GTK_SELECTION_BROWSE => Self::Browse,
11181            ffi::GTK_SELECTION_MULTIPLE => Self::Multiple,
11182            value => Self::__Unknown(value),
11183        }
11184    }
11185}
11186
11187impl StaticType for SelectionMode {
11188    #[inline]
11189    #[doc(alias = "gtk_selection_mode_get_type")]
11190    fn static_type() -> glib::Type {
11191        unsafe { from_glib(ffi::gtk_selection_mode_get_type()) }
11192    }
11193}
11194
11195impl glib::HasParamSpec for SelectionMode {
11196    type ParamSpec = glib::ParamSpecEnum;
11197    type SetValue = Self;
11198    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11199
11200    fn param_spec_builder() -> Self::BuilderFn {
11201        Self::ParamSpec::builder_with_default
11202    }
11203}
11204
11205impl glib::value::ValueType for SelectionMode {
11206    type Type = Self;
11207}
11208
11209unsafe impl<'a> glib::value::FromValue<'a> for SelectionMode {
11210    type Checker = glib::value::GenericValueTypeChecker<Self>;
11211
11212    #[inline]
11213    unsafe fn from_value(value: &'a glib::Value) -> Self {
11214        skip_assert_initialized!();
11215        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11216    }
11217}
11218
11219impl ToValue for SelectionMode {
11220    #[inline]
11221    fn to_value(&self) -> glib::Value {
11222        let mut value = glib::Value::for_value_type::<Self>();
11223        unsafe {
11224            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11225        }
11226        value
11227    }
11228
11229    #[inline]
11230    fn value_type(&self) -> glib::Type {
11231        Self::static_type()
11232    }
11233}
11234
11235impl From<SelectionMode> for glib::Value {
11236    #[inline]
11237    fn from(v: SelectionMode) -> Self {
11238        skip_assert_initialized!();
11239        ToValue::to_value(&v)
11240    }
11241}
11242
11243/// Determines how GTK handles the sensitivity of various controls,
11244/// such as combo box buttons.
11245#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11246#[non_exhaustive]
11247#[doc(alias = "GtkSensitivityType")]
11248pub enum SensitivityType {
11249    /// The control is made insensitive if no
11250    ///   action can be triggered
11251    #[doc(alias = "GTK_SENSITIVITY_AUTO")]
11252    Auto,
11253    /// The control is always sensitive
11254    #[doc(alias = "GTK_SENSITIVITY_ON")]
11255    On,
11256    /// The control is always insensitive
11257    #[doc(alias = "GTK_SENSITIVITY_OFF")]
11258    Off,
11259    #[doc(hidden)]
11260    __Unknown(i32),
11261}
11262
11263#[doc(hidden)]
11264impl IntoGlib for SensitivityType {
11265    type GlibType = ffi::GtkSensitivityType;
11266
11267    #[inline]
11268    fn into_glib(self) -> ffi::GtkSensitivityType {
11269        match self {
11270            Self::Auto => ffi::GTK_SENSITIVITY_AUTO,
11271            Self::On => ffi::GTK_SENSITIVITY_ON,
11272            Self::Off => ffi::GTK_SENSITIVITY_OFF,
11273            Self::__Unknown(value) => value,
11274        }
11275    }
11276}
11277
11278#[doc(hidden)]
11279impl FromGlib<ffi::GtkSensitivityType> for SensitivityType {
11280    #[inline]
11281    unsafe fn from_glib(value: ffi::GtkSensitivityType) -> Self {
11282        skip_assert_initialized!();
11283
11284        match value {
11285            ffi::GTK_SENSITIVITY_AUTO => Self::Auto,
11286            ffi::GTK_SENSITIVITY_ON => Self::On,
11287            ffi::GTK_SENSITIVITY_OFF => Self::Off,
11288            value => Self::__Unknown(value),
11289        }
11290    }
11291}
11292
11293impl StaticType for SensitivityType {
11294    #[inline]
11295    #[doc(alias = "gtk_sensitivity_type_get_type")]
11296    fn static_type() -> glib::Type {
11297        unsafe { from_glib(ffi::gtk_sensitivity_type_get_type()) }
11298    }
11299}
11300
11301impl glib::HasParamSpec for SensitivityType {
11302    type ParamSpec = glib::ParamSpecEnum;
11303    type SetValue = Self;
11304    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11305
11306    fn param_spec_builder() -> Self::BuilderFn {
11307        Self::ParamSpec::builder_with_default
11308    }
11309}
11310
11311impl glib::value::ValueType for SensitivityType {
11312    type Type = Self;
11313}
11314
11315unsafe impl<'a> glib::value::FromValue<'a> for SensitivityType {
11316    type Checker = glib::value::GenericValueTypeChecker<Self>;
11317
11318    #[inline]
11319    unsafe fn from_value(value: &'a glib::Value) -> Self {
11320        skip_assert_initialized!();
11321        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11322    }
11323}
11324
11325impl ToValue for SensitivityType {
11326    #[inline]
11327    fn to_value(&self) -> glib::Value {
11328        let mut value = glib::Value::for_value_type::<Self>();
11329        unsafe {
11330            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11331        }
11332        value
11333    }
11334
11335    #[inline]
11336    fn value_type(&self) -> glib::Type {
11337        Self::static_type()
11338    }
11339}
11340
11341impl From<SensitivityType> for glib::Value {
11342    #[inline]
11343    fn from(v: SensitivityType) -> Self {
11344        skip_assert_initialized!();
11345        ToValue::to_value(&v)
11346    }
11347}
11348
11349/// Describes where [`Shortcut`][crate::Shortcut]s added to a
11350/// [`ShortcutController`][crate::ShortcutController] get handled.
11351#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11352#[non_exhaustive]
11353#[doc(alias = "GtkShortcutScope")]
11354pub enum ShortcutScope {
11355    /// Shortcuts are handled inside
11356    ///   the widget the controller belongs to.
11357    #[doc(alias = "GTK_SHORTCUT_SCOPE_LOCAL")]
11358    Local,
11359    /// Shortcuts are handled by
11360    ///   the first ancestor that is a [`ShortcutManager`][crate::ShortcutManager]
11361    #[doc(alias = "GTK_SHORTCUT_SCOPE_MANAGED")]
11362    Managed,
11363    /// Shortcuts are handled by
11364    ///   the root widget.
11365    #[doc(alias = "GTK_SHORTCUT_SCOPE_GLOBAL")]
11366    Global,
11367    #[doc(hidden)]
11368    __Unknown(i32),
11369}
11370
11371#[doc(hidden)]
11372impl IntoGlib for ShortcutScope {
11373    type GlibType = ffi::GtkShortcutScope;
11374
11375    #[inline]
11376    fn into_glib(self) -> ffi::GtkShortcutScope {
11377        match self {
11378            Self::Local => ffi::GTK_SHORTCUT_SCOPE_LOCAL,
11379            Self::Managed => ffi::GTK_SHORTCUT_SCOPE_MANAGED,
11380            Self::Global => ffi::GTK_SHORTCUT_SCOPE_GLOBAL,
11381            Self::__Unknown(value) => value,
11382        }
11383    }
11384}
11385
11386#[doc(hidden)]
11387impl FromGlib<ffi::GtkShortcutScope> for ShortcutScope {
11388    #[inline]
11389    unsafe fn from_glib(value: ffi::GtkShortcutScope) -> Self {
11390        skip_assert_initialized!();
11391
11392        match value {
11393            ffi::GTK_SHORTCUT_SCOPE_LOCAL => Self::Local,
11394            ffi::GTK_SHORTCUT_SCOPE_MANAGED => Self::Managed,
11395            ffi::GTK_SHORTCUT_SCOPE_GLOBAL => Self::Global,
11396            value => Self::__Unknown(value),
11397        }
11398    }
11399}
11400
11401impl StaticType for ShortcutScope {
11402    #[inline]
11403    #[doc(alias = "gtk_shortcut_scope_get_type")]
11404    fn static_type() -> glib::Type {
11405        unsafe { from_glib(ffi::gtk_shortcut_scope_get_type()) }
11406    }
11407}
11408
11409impl glib::HasParamSpec for ShortcutScope {
11410    type ParamSpec = glib::ParamSpecEnum;
11411    type SetValue = Self;
11412    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11413
11414    fn param_spec_builder() -> Self::BuilderFn {
11415        Self::ParamSpec::builder_with_default
11416    }
11417}
11418
11419impl glib::value::ValueType for ShortcutScope {
11420    type Type = Self;
11421}
11422
11423unsafe impl<'a> glib::value::FromValue<'a> for ShortcutScope {
11424    type Checker = glib::value::GenericValueTypeChecker<Self>;
11425
11426    #[inline]
11427    unsafe fn from_value(value: &'a glib::Value) -> Self {
11428        skip_assert_initialized!();
11429        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11430    }
11431}
11432
11433impl ToValue for ShortcutScope {
11434    #[inline]
11435    fn to_value(&self) -> glib::Value {
11436        let mut value = glib::Value::for_value_type::<Self>();
11437        unsafe {
11438            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11439        }
11440        value
11441    }
11442
11443    #[inline]
11444    fn value_type(&self) -> glib::Type {
11445        Self::static_type()
11446    }
11447}
11448
11449impl From<ShortcutScope> for glib::Value {
11450    #[inline]
11451    fn from(v: ShortcutScope) -> Self {
11452        skip_assert_initialized!();
11453        ToValue::to_value(&v)
11454    }
11455}
11456
11457/// GtkShortcutType specifies the kind of shortcut that is being described.
11458///
11459/// More values may be added to this enumeration over time.
11460#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11461#[non_exhaustive]
11462#[doc(alias = "GtkShortcutType")]
11463pub enum ShortcutType {
11464    /// The shortcut is a keyboard accelerator. The GtkShortcutsShortcut:accelerator
11465    ///   property will be used.
11466    #[doc(alias = "GTK_SHORTCUT_ACCELERATOR")]
11467    Accelerator,
11468    /// The shortcut is a pinch gesture. GTK provides an icon and subtitle.
11469    #[doc(alias = "GTK_SHORTCUT_GESTURE_PINCH")]
11470    GesturePinch,
11471    /// The shortcut is a stretch gesture. GTK provides an icon and subtitle.
11472    #[doc(alias = "GTK_SHORTCUT_GESTURE_STRETCH")]
11473    GestureStretch,
11474    /// The shortcut is a clockwise rotation gesture. GTK provides an icon and subtitle.
11475    #[doc(alias = "GTK_SHORTCUT_GESTURE_ROTATE_CLOCKWISE")]
11476    GestureRotateClockwise,
11477    /// The shortcut is a counterclockwise rotation gesture. GTK provides an icon and subtitle.
11478    #[doc(alias = "GTK_SHORTCUT_GESTURE_ROTATE_COUNTERCLOCKWISE")]
11479    GestureRotateCounterclockwise,
11480    /// The shortcut is a two-finger swipe gesture. GTK provides an icon and subtitle.
11481    #[doc(alias = "GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_LEFT")]
11482    GestureTwoFingerSwipeLeft,
11483    /// The shortcut is a two-finger swipe gesture. GTK provides an icon and subtitle.
11484    #[doc(alias = "GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_RIGHT")]
11485    GestureTwoFingerSwipeRight,
11486    /// The shortcut is a gesture. The GtkShortcutsShortcut:icon property will be
11487    ///   used.
11488    #[doc(alias = "GTK_SHORTCUT_GESTURE")]
11489    Gesture,
11490    /// The shortcut is a swipe gesture. GTK provides an icon and subtitle.
11491    #[doc(alias = "GTK_SHORTCUT_GESTURE_SWIPE_LEFT")]
11492    GestureSwipeLeft,
11493    /// The shortcut is a swipe gesture. GTK provides an icon and subtitle.
11494    #[doc(alias = "GTK_SHORTCUT_GESTURE_SWIPE_RIGHT")]
11495    GestureSwipeRight,
11496    #[doc(hidden)]
11497    __Unknown(i32),
11498}
11499
11500#[doc(hidden)]
11501impl IntoGlib for ShortcutType {
11502    type GlibType = ffi::GtkShortcutType;
11503
11504    #[inline]
11505    fn into_glib(self) -> ffi::GtkShortcutType {
11506        match self {
11507            Self::Accelerator => ffi::GTK_SHORTCUT_ACCELERATOR,
11508            Self::GesturePinch => ffi::GTK_SHORTCUT_GESTURE_PINCH,
11509            Self::GestureStretch => ffi::GTK_SHORTCUT_GESTURE_STRETCH,
11510            Self::GestureRotateClockwise => ffi::GTK_SHORTCUT_GESTURE_ROTATE_CLOCKWISE,
11511            Self::GestureRotateCounterclockwise => {
11512                ffi::GTK_SHORTCUT_GESTURE_ROTATE_COUNTERCLOCKWISE
11513            }
11514            Self::GestureTwoFingerSwipeLeft => ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_LEFT,
11515            Self::GestureTwoFingerSwipeRight => ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_RIGHT,
11516            Self::Gesture => ffi::GTK_SHORTCUT_GESTURE,
11517            Self::GestureSwipeLeft => ffi::GTK_SHORTCUT_GESTURE_SWIPE_LEFT,
11518            Self::GestureSwipeRight => ffi::GTK_SHORTCUT_GESTURE_SWIPE_RIGHT,
11519            Self::__Unknown(value) => value,
11520        }
11521    }
11522}
11523
11524#[doc(hidden)]
11525impl FromGlib<ffi::GtkShortcutType> for ShortcutType {
11526    #[inline]
11527    unsafe fn from_glib(value: ffi::GtkShortcutType) -> Self {
11528        skip_assert_initialized!();
11529
11530        match value {
11531            ffi::GTK_SHORTCUT_ACCELERATOR => Self::Accelerator,
11532            ffi::GTK_SHORTCUT_GESTURE_PINCH => Self::GesturePinch,
11533            ffi::GTK_SHORTCUT_GESTURE_STRETCH => Self::GestureStretch,
11534            ffi::GTK_SHORTCUT_GESTURE_ROTATE_CLOCKWISE => Self::GestureRotateClockwise,
11535            ffi::GTK_SHORTCUT_GESTURE_ROTATE_COUNTERCLOCKWISE => {
11536                Self::GestureRotateCounterclockwise
11537            }
11538            ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_LEFT => Self::GestureTwoFingerSwipeLeft,
11539            ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_RIGHT => Self::GestureTwoFingerSwipeRight,
11540            ffi::GTK_SHORTCUT_GESTURE => Self::Gesture,
11541            ffi::GTK_SHORTCUT_GESTURE_SWIPE_LEFT => Self::GestureSwipeLeft,
11542            ffi::GTK_SHORTCUT_GESTURE_SWIPE_RIGHT => Self::GestureSwipeRight,
11543            value => Self::__Unknown(value),
11544        }
11545    }
11546}
11547
11548impl StaticType for ShortcutType {
11549    #[inline]
11550    #[doc(alias = "gtk_shortcut_type_get_type")]
11551    fn static_type() -> glib::Type {
11552        unsafe { from_glib(ffi::gtk_shortcut_type_get_type()) }
11553    }
11554}
11555
11556impl glib::HasParamSpec for ShortcutType {
11557    type ParamSpec = glib::ParamSpecEnum;
11558    type SetValue = Self;
11559    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11560
11561    fn param_spec_builder() -> Self::BuilderFn {
11562        Self::ParamSpec::builder_with_default
11563    }
11564}
11565
11566impl glib::value::ValueType for ShortcutType {
11567    type Type = Self;
11568}
11569
11570unsafe impl<'a> glib::value::FromValue<'a> for ShortcutType {
11571    type Checker = glib::value::GenericValueTypeChecker<Self>;
11572
11573    #[inline]
11574    unsafe fn from_value(value: &'a glib::Value) -> Self {
11575        skip_assert_initialized!();
11576        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11577    }
11578}
11579
11580impl ToValue for ShortcutType {
11581    #[inline]
11582    fn to_value(&self) -> glib::Value {
11583        let mut value = glib::Value::for_value_type::<Self>();
11584        unsafe {
11585            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11586        }
11587        value
11588    }
11589
11590    #[inline]
11591    fn value_type(&self) -> glib::Type {
11592        Self::static_type()
11593    }
11594}
11595
11596impl From<ShortcutType> for glib::Value {
11597    #[inline]
11598    fn from(v: ShortcutType) -> Self {
11599        skip_assert_initialized!();
11600        ToValue::to_value(&v)
11601    }
11602}
11603
11604/// The mode of the size group determines the directions in which the size
11605/// group affects the requested sizes of its component widgets.
11606#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11607#[non_exhaustive]
11608#[doc(alias = "GtkSizeGroupMode")]
11609pub enum SizeGroupMode {
11610    /// group has no effect
11611    #[doc(alias = "GTK_SIZE_GROUP_NONE")]
11612    None,
11613    /// group affects horizontal requisition
11614    #[doc(alias = "GTK_SIZE_GROUP_HORIZONTAL")]
11615    Horizontal,
11616    /// group affects vertical requisition
11617    #[doc(alias = "GTK_SIZE_GROUP_VERTICAL")]
11618    Vertical,
11619    /// group affects both horizontal and vertical requisition
11620    #[doc(alias = "GTK_SIZE_GROUP_BOTH")]
11621    Both,
11622    #[doc(hidden)]
11623    __Unknown(i32),
11624}
11625
11626#[doc(hidden)]
11627impl IntoGlib for SizeGroupMode {
11628    type GlibType = ffi::GtkSizeGroupMode;
11629
11630    #[inline]
11631    fn into_glib(self) -> ffi::GtkSizeGroupMode {
11632        match self {
11633            Self::None => ffi::GTK_SIZE_GROUP_NONE,
11634            Self::Horizontal => ffi::GTK_SIZE_GROUP_HORIZONTAL,
11635            Self::Vertical => ffi::GTK_SIZE_GROUP_VERTICAL,
11636            Self::Both => ffi::GTK_SIZE_GROUP_BOTH,
11637            Self::__Unknown(value) => value,
11638        }
11639    }
11640}
11641
11642#[doc(hidden)]
11643impl FromGlib<ffi::GtkSizeGroupMode> for SizeGroupMode {
11644    #[inline]
11645    unsafe fn from_glib(value: ffi::GtkSizeGroupMode) -> Self {
11646        skip_assert_initialized!();
11647
11648        match value {
11649            ffi::GTK_SIZE_GROUP_NONE => Self::None,
11650            ffi::GTK_SIZE_GROUP_HORIZONTAL => Self::Horizontal,
11651            ffi::GTK_SIZE_GROUP_VERTICAL => Self::Vertical,
11652            ffi::GTK_SIZE_GROUP_BOTH => Self::Both,
11653            value => Self::__Unknown(value),
11654        }
11655    }
11656}
11657
11658impl StaticType for SizeGroupMode {
11659    #[inline]
11660    #[doc(alias = "gtk_size_group_mode_get_type")]
11661    fn static_type() -> glib::Type {
11662        unsafe { from_glib(ffi::gtk_size_group_mode_get_type()) }
11663    }
11664}
11665
11666impl glib::HasParamSpec for SizeGroupMode {
11667    type ParamSpec = glib::ParamSpecEnum;
11668    type SetValue = Self;
11669    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11670
11671    fn param_spec_builder() -> Self::BuilderFn {
11672        Self::ParamSpec::builder_with_default
11673    }
11674}
11675
11676impl glib::value::ValueType for SizeGroupMode {
11677    type Type = Self;
11678}
11679
11680unsafe impl<'a> glib::value::FromValue<'a> for SizeGroupMode {
11681    type Checker = glib::value::GenericValueTypeChecker<Self>;
11682
11683    #[inline]
11684    unsafe fn from_value(value: &'a glib::Value) -> Self {
11685        skip_assert_initialized!();
11686        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11687    }
11688}
11689
11690impl ToValue for SizeGroupMode {
11691    #[inline]
11692    fn to_value(&self) -> glib::Value {
11693        let mut value = glib::Value::for_value_type::<Self>();
11694        unsafe {
11695            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11696        }
11697        value
11698    }
11699
11700    #[inline]
11701    fn value_type(&self) -> glib::Type {
11702        Self::static_type()
11703    }
11704}
11705
11706impl From<SizeGroupMode> for glib::Value {
11707    #[inline]
11708    fn from(v: SizeGroupMode) -> Self {
11709        skip_assert_initialized!();
11710        ToValue::to_value(&v)
11711    }
11712}
11713
11714/// Specifies a preference for height-for-width or
11715/// width-for-height geometry management.
11716#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11717#[non_exhaustive]
11718#[doc(alias = "GtkSizeRequestMode")]
11719pub enum SizeRequestMode {
11720    /// Prefer height-for-width geometry management
11721    #[doc(alias = "GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH")]
11722    HeightForWidth,
11723    /// Prefer width-for-height geometry management
11724    #[doc(alias = "GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT")]
11725    WidthForHeight,
11726    /// Don’t trade height-for-width or width-for-height
11727    #[doc(alias = "GTK_SIZE_REQUEST_CONSTANT_SIZE")]
11728    ConstantSize,
11729    #[doc(hidden)]
11730    __Unknown(i32),
11731}
11732
11733#[doc(hidden)]
11734impl IntoGlib for SizeRequestMode {
11735    type GlibType = ffi::GtkSizeRequestMode;
11736
11737    #[inline]
11738    fn into_glib(self) -> ffi::GtkSizeRequestMode {
11739        match self {
11740            Self::HeightForWidth => ffi::GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH,
11741            Self::WidthForHeight => ffi::GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT,
11742            Self::ConstantSize => ffi::GTK_SIZE_REQUEST_CONSTANT_SIZE,
11743            Self::__Unknown(value) => value,
11744        }
11745    }
11746}
11747
11748#[doc(hidden)]
11749impl FromGlib<ffi::GtkSizeRequestMode> for SizeRequestMode {
11750    #[inline]
11751    unsafe fn from_glib(value: ffi::GtkSizeRequestMode) -> Self {
11752        skip_assert_initialized!();
11753
11754        match value {
11755            ffi::GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH => Self::HeightForWidth,
11756            ffi::GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT => Self::WidthForHeight,
11757            ffi::GTK_SIZE_REQUEST_CONSTANT_SIZE => Self::ConstantSize,
11758            value => Self::__Unknown(value),
11759        }
11760    }
11761}
11762
11763impl StaticType for SizeRequestMode {
11764    #[inline]
11765    #[doc(alias = "gtk_size_request_mode_get_type")]
11766    fn static_type() -> glib::Type {
11767        unsafe { from_glib(ffi::gtk_size_request_mode_get_type()) }
11768    }
11769}
11770
11771impl glib::HasParamSpec for SizeRequestMode {
11772    type ParamSpec = glib::ParamSpecEnum;
11773    type SetValue = Self;
11774    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11775
11776    fn param_spec_builder() -> Self::BuilderFn {
11777        Self::ParamSpec::builder_with_default
11778    }
11779}
11780
11781impl glib::value::ValueType for SizeRequestMode {
11782    type Type = Self;
11783}
11784
11785unsafe impl<'a> glib::value::FromValue<'a> for SizeRequestMode {
11786    type Checker = glib::value::GenericValueTypeChecker<Self>;
11787
11788    #[inline]
11789    unsafe fn from_value(value: &'a glib::Value) -> Self {
11790        skip_assert_initialized!();
11791        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11792    }
11793}
11794
11795impl ToValue for SizeRequestMode {
11796    #[inline]
11797    fn to_value(&self) -> glib::Value {
11798        let mut value = glib::Value::for_value_type::<Self>();
11799        unsafe {
11800            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11801        }
11802        value
11803    }
11804
11805    #[inline]
11806    fn value_type(&self) -> glib::Type {
11807        Self::static_type()
11808    }
11809}
11810
11811impl From<SizeRequestMode> for glib::Value {
11812    #[inline]
11813    fn from(v: SizeRequestMode) -> Self {
11814        skip_assert_initialized!();
11815        ToValue::to_value(&v)
11816    }
11817}
11818
11819/// Determines the direction of a sort.
11820#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11821#[non_exhaustive]
11822#[doc(alias = "GtkSortType")]
11823pub enum SortType {
11824    /// Sorting is in ascending order.
11825    #[doc(alias = "GTK_SORT_ASCENDING")]
11826    Ascending,
11827    /// Sorting is in descending order.
11828    #[doc(alias = "GTK_SORT_DESCENDING")]
11829    Descending,
11830    #[doc(hidden)]
11831    __Unknown(i32),
11832}
11833
11834#[doc(hidden)]
11835impl IntoGlib for SortType {
11836    type GlibType = ffi::GtkSortType;
11837
11838    #[inline]
11839    fn into_glib(self) -> ffi::GtkSortType {
11840        match self {
11841            Self::Ascending => ffi::GTK_SORT_ASCENDING,
11842            Self::Descending => ffi::GTK_SORT_DESCENDING,
11843            Self::__Unknown(value) => value,
11844        }
11845    }
11846}
11847
11848#[doc(hidden)]
11849impl FromGlib<ffi::GtkSortType> for SortType {
11850    #[inline]
11851    unsafe fn from_glib(value: ffi::GtkSortType) -> Self {
11852        skip_assert_initialized!();
11853
11854        match value {
11855            ffi::GTK_SORT_ASCENDING => Self::Ascending,
11856            ffi::GTK_SORT_DESCENDING => Self::Descending,
11857            value => Self::__Unknown(value),
11858        }
11859    }
11860}
11861
11862impl StaticType for SortType {
11863    #[inline]
11864    #[doc(alias = "gtk_sort_type_get_type")]
11865    fn static_type() -> glib::Type {
11866        unsafe { from_glib(ffi::gtk_sort_type_get_type()) }
11867    }
11868}
11869
11870impl glib::HasParamSpec for SortType {
11871    type ParamSpec = glib::ParamSpecEnum;
11872    type SetValue = Self;
11873    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11874
11875    fn param_spec_builder() -> Self::BuilderFn {
11876        Self::ParamSpec::builder_with_default
11877    }
11878}
11879
11880impl glib::value::ValueType for SortType {
11881    type Type = Self;
11882}
11883
11884unsafe impl<'a> glib::value::FromValue<'a> for SortType {
11885    type Checker = glib::value::GenericValueTypeChecker<Self>;
11886
11887    #[inline]
11888    unsafe fn from_value(value: &'a glib::Value) -> Self {
11889        skip_assert_initialized!();
11890        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11891    }
11892}
11893
11894impl ToValue for SortType {
11895    #[inline]
11896    fn to_value(&self) -> glib::Value {
11897        let mut value = glib::Value::for_value_type::<Self>();
11898        unsafe {
11899            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11900        }
11901        value
11902    }
11903
11904    #[inline]
11905    fn value_type(&self) -> glib::Type {
11906        Self::static_type()
11907    }
11908}
11909
11910impl From<SortType> for glib::Value {
11911    #[inline]
11912    fn from(v: SortType) -> Self {
11913        skip_assert_initialized!();
11914        ToValue::to_value(&v)
11915    }
11916}
11917
11918/// Describes changes in a sorter in more detail and allows users
11919/// to optimize resorting.
11920#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11921#[non_exhaustive]
11922#[doc(alias = "GtkSorterChange")]
11923pub enum SorterChange {
11924    /// The sorter change cannot be described
11925    ///   by any of the other enumeration values
11926    #[doc(alias = "GTK_SORTER_CHANGE_DIFFERENT")]
11927    Different,
11928    /// The sort order was inverted. Comparisons
11929    ///   that returned [`Ordering::Smaller`][crate::Ordering::Smaller] now return [`Ordering::Larger`][crate::Ordering::Larger]
11930    ///   and vice versa. Other comparisons return the same values as before.
11931    #[doc(alias = "GTK_SORTER_CHANGE_INVERTED")]
11932    Inverted,
11933    /// The sorter is less strict: Comparisons
11934    ///   may now return [`Ordering::Equal`][crate::Ordering::Equal] that did not do so before.
11935    #[doc(alias = "GTK_SORTER_CHANGE_LESS_STRICT")]
11936    LessStrict,
11937    /// The sorter is more strict: Comparisons
11938    ///   that did return [`Ordering::Equal`][crate::Ordering::Equal] may not do so anymore.
11939    #[doc(alias = "GTK_SORTER_CHANGE_MORE_STRICT")]
11940    MoreStrict,
11941    #[doc(hidden)]
11942    __Unknown(i32),
11943}
11944
11945#[doc(hidden)]
11946impl IntoGlib for SorterChange {
11947    type GlibType = ffi::GtkSorterChange;
11948
11949    #[inline]
11950    fn into_glib(self) -> ffi::GtkSorterChange {
11951        match self {
11952            Self::Different => ffi::GTK_SORTER_CHANGE_DIFFERENT,
11953            Self::Inverted => ffi::GTK_SORTER_CHANGE_INVERTED,
11954            Self::LessStrict => ffi::GTK_SORTER_CHANGE_LESS_STRICT,
11955            Self::MoreStrict => ffi::GTK_SORTER_CHANGE_MORE_STRICT,
11956            Self::__Unknown(value) => value,
11957        }
11958    }
11959}
11960
11961#[doc(hidden)]
11962impl FromGlib<ffi::GtkSorterChange> for SorterChange {
11963    #[inline]
11964    unsafe fn from_glib(value: ffi::GtkSorterChange) -> Self {
11965        skip_assert_initialized!();
11966
11967        match value {
11968            ffi::GTK_SORTER_CHANGE_DIFFERENT => Self::Different,
11969            ffi::GTK_SORTER_CHANGE_INVERTED => Self::Inverted,
11970            ffi::GTK_SORTER_CHANGE_LESS_STRICT => Self::LessStrict,
11971            ffi::GTK_SORTER_CHANGE_MORE_STRICT => Self::MoreStrict,
11972            value => Self::__Unknown(value),
11973        }
11974    }
11975}
11976
11977impl StaticType for SorterChange {
11978    #[inline]
11979    #[doc(alias = "gtk_sorter_change_get_type")]
11980    fn static_type() -> glib::Type {
11981        unsafe { from_glib(ffi::gtk_sorter_change_get_type()) }
11982    }
11983}
11984
11985impl glib::HasParamSpec for SorterChange {
11986    type ParamSpec = glib::ParamSpecEnum;
11987    type SetValue = Self;
11988    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11989
11990    fn param_spec_builder() -> Self::BuilderFn {
11991        Self::ParamSpec::builder_with_default
11992    }
11993}
11994
11995impl glib::value::ValueType for SorterChange {
11996    type Type = Self;
11997}
11998
11999unsafe impl<'a> glib::value::FromValue<'a> for SorterChange {
12000    type Checker = glib::value::GenericValueTypeChecker<Self>;
12001
12002    #[inline]
12003    unsafe fn from_value(value: &'a glib::Value) -> Self {
12004        skip_assert_initialized!();
12005        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12006    }
12007}
12008
12009impl ToValue for SorterChange {
12010    #[inline]
12011    fn to_value(&self) -> glib::Value {
12012        let mut value = glib::Value::for_value_type::<Self>();
12013        unsafe {
12014            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12015        }
12016        value
12017    }
12018
12019    #[inline]
12020    fn value_type(&self) -> glib::Type {
12021        Self::static_type()
12022    }
12023}
12024
12025impl From<SorterChange> for glib::Value {
12026    #[inline]
12027    fn from(v: SorterChange) -> Self {
12028        skip_assert_initialized!();
12029        ToValue::to_value(&v)
12030    }
12031}
12032
12033/// Describes the type of order that a [`Sorter`][crate::Sorter] may produce.
12034#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12035#[non_exhaustive]
12036#[doc(alias = "GtkSorterOrder")]
12037pub enum SorterOrder {
12038    /// A partial order. Any [`Ordering`][crate::Ordering] is possible.
12039    #[doc(alias = "GTK_SORTER_ORDER_PARTIAL")]
12040    Partial,
12041    /// No order, all elements are considered equal.
12042    ///   gtk_sorter_compare() will only return [`Ordering::Equal`][crate::Ordering::Equal].
12043    #[doc(alias = "GTK_SORTER_ORDER_NONE")]
12044    None,
12045    /// A total order. gtk_sorter_compare() will only
12046    ///   return [`Ordering::Equal`][crate::Ordering::Equal] if an item is compared with itself. Two
12047    ///   different items will never cause this value to be returned.
12048    #[doc(alias = "GTK_SORTER_ORDER_TOTAL")]
12049    Total,
12050    #[doc(hidden)]
12051    __Unknown(i32),
12052}
12053
12054#[doc(hidden)]
12055impl IntoGlib for SorterOrder {
12056    type GlibType = ffi::GtkSorterOrder;
12057
12058    #[inline]
12059    fn into_glib(self) -> ffi::GtkSorterOrder {
12060        match self {
12061            Self::Partial => ffi::GTK_SORTER_ORDER_PARTIAL,
12062            Self::None => ffi::GTK_SORTER_ORDER_NONE,
12063            Self::Total => ffi::GTK_SORTER_ORDER_TOTAL,
12064            Self::__Unknown(value) => value,
12065        }
12066    }
12067}
12068
12069#[doc(hidden)]
12070impl FromGlib<ffi::GtkSorterOrder> for SorterOrder {
12071    #[inline]
12072    unsafe fn from_glib(value: ffi::GtkSorterOrder) -> Self {
12073        skip_assert_initialized!();
12074
12075        match value {
12076            ffi::GTK_SORTER_ORDER_PARTIAL => Self::Partial,
12077            ffi::GTK_SORTER_ORDER_NONE => Self::None,
12078            ffi::GTK_SORTER_ORDER_TOTAL => Self::Total,
12079            value => Self::__Unknown(value),
12080        }
12081    }
12082}
12083
12084impl StaticType for SorterOrder {
12085    #[inline]
12086    #[doc(alias = "gtk_sorter_order_get_type")]
12087    fn static_type() -> glib::Type {
12088        unsafe { from_glib(ffi::gtk_sorter_order_get_type()) }
12089    }
12090}
12091
12092impl glib::HasParamSpec for SorterOrder {
12093    type ParamSpec = glib::ParamSpecEnum;
12094    type SetValue = Self;
12095    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12096
12097    fn param_spec_builder() -> Self::BuilderFn {
12098        Self::ParamSpec::builder_with_default
12099    }
12100}
12101
12102impl glib::value::ValueType for SorterOrder {
12103    type Type = Self;
12104}
12105
12106unsafe impl<'a> glib::value::FromValue<'a> for SorterOrder {
12107    type Checker = glib::value::GenericValueTypeChecker<Self>;
12108
12109    #[inline]
12110    unsafe fn from_value(value: &'a glib::Value) -> Self {
12111        skip_assert_initialized!();
12112        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12113    }
12114}
12115
12116impl ToValue for SorterOrder {
12117    #[inline]
12118    fn to_value(&self) -> glib::Value {
12119        let mut value = glib::Value::for_value_type::<Self>();
12120        unsafe {
12121            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12122        }
12123        value
12124    }
12125
12126    #[inline]
12127    fn value_type(&self) -> glib::Type {
12128        Self::static_type()
12129    }
12130}
12131
12132impl From<SorterOrder> for glib::Value {
12133    #[inline]
12134    fn from(v: SorterOrder) -> Self {
12135        skip_assert_initialized!();
12136        ToValue::to_value(&v)
12137    }
12138}
12139
12140/// Determines whether the spin button displays values outside the adjustment
12141/// bounds.
12142///
12143/// See [`SpinButton::set_update_policy()`][crate::SpinButton::set_update_policy()].
12144#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12145#[non_exhaustive]
12146#[doc(alias = "GtkSpinButtonUpdatePolicy")]
12147pub enum SpinButtonUpdatePolicy {
12148    /// When refreshing your [`SpinButton`][crate::SpinButton], the value is
12149    ///   always displayed
12150    #[doc(alias = "GTK_UPDATE_ALWAYS")]
12151    Always,
12152    /// When refreshing your [`SpinButton`][crate::SpinButton], the value is
12153    ///   only displayed if it is valid within the bounds of the spin button's
12154    ///   adjustment
12155    #[doc(alias = "GTK_UPDATE_IF_VALID")]
12156    IfValid,
12157    #[doc(hidden)]
12158    __Unknown(i32),
12159}
12160
12161#[doc(hidden)]
12162impl IntoGlib for SpinButtonUpdatePolicy {
12163    type GlibType = ffi::GtkSpinButtonUpdatePolicy;
12164
12165    #[inline]
12166    fn into_glib(self) -> ffi::GtkSpinButtonUpdatePolicy {
12167        match self {
12168            Self::Always => ffi::GTK_UPDATE_ALWAYS,
12169            Self::IfValid => ffi::GTK_UPDATE_IF_VALID,
12170            Self::__Unknown(value) => value,
12171        }
12172    }
12173}
12174
12175#[doc(hidden)]
12176impl FromGlib<ffi::GtkSpinButtonUpdatePolicy> for SpinButtonUpdatePolicy {
12177    #[inline]
12178    unsafe fn from_glib(value: ffi::GtkSpinButtonUpdatePolicy) -> Self {
12179        skip_assert_initialized!();
12180
12181        match value {
12182            ffi::GTK_UPDATE_ALWAYS => Self::Always,
12183            ffi::GTK_UPDATE_IF_VALID => Self::IfValid,
12184            value => Self::__Unknown(value),
12185        }
12186    }
12187}
12188
12189impl StaticType for SpinButtonUpdatePolicy {
12190    #[inline]
12191    #[doc(alias = "gtk_spin_button_update_policy_get_type")]
12192    fn static_type() -> glib::Type {
12193        unsafe { from_glib(ffi::gtk_spin_button_update_policy_get_type()) }
12194    }
12195}
12196
12197impl glib::HasParamSpec for SpinButtonUpdatePolicy {
12198    type ParamSpec = glib::ParamSpecEnum;
12199    type SetValue = Self;
12200    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12201
12202    fn param_spec_builder() -> Self::BuilderFn {
12203        Self::ParamSpec::builder_with_default
12204    }
12205}
12206
12207impl glib::value::ValueType for SpinButtonUpdatePolicy {
12208    type Type = Self;
12209}
12210
12211unsafe impl<'a> glib::value::FromValue<'a> for SpinButtonUpdatePolicy {
12212    type Checker = glib::value::GenericValueTypeChecker<Self>;
12213
12214    #[inline]
12215    unsafe fn from_value(value: &'a glib::Value) -> Self {
12216        skip_assert_initialized!();
12217        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12218    }
12219}
12220
12221impl ToValue for SpinButtonUpdatePolicy {
12222    #[inline]
12223    fn to_value(&self) -> glib::Value {
12224        let mut value = glib::Value::for_value_type::<Self>();
12225        unsafe {
12226            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12227        }
12228        value
12229    }
12230
12231    #[inline]
12232    fn value_type(&self) -> glib::Type {
12233        Self::static_type()
12234    }
12235}
12236
12237impl From<SpinButtonUpdatePolicy> for glib::Value {
12238    #[inline]
12239    fn from(v: SpinButtonUpdatePolicy) -> Self {
12240        skip_assert_initialized!();
12241        ToValue::to_value(&v)
12242    }
12243}
12244
12245/// The values of the GtkSpinType enumeration are used to specify the
12246/// change to make in gtk_spin_button_spin().
12247#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12248#[non_exhaustive]
12249#[doc(alias = "GtkSpinType")]
12250pub enum SpinType {
12251    /// Increment by the adjustments step increment.
12252    #[doc(alias = "GTK_SPIN_STEP_FORWARD")]
12253    StepForward,
12254    /// Decrement by the adjustments step increment.
12255    #[doc(alias = "GTK_SPIN_STEP_BACKWARD")]
12256    StepBackward,
12257    /// Increment by the adjustments page increment.
12258    #[doc(alias = "GTK_SPIN_PAGE_FORWARD")]
12259    PageForward,
12260    /// Decrement by the adjustments page increment.
12261    #[doc(alias = "GTK_SPIN_PAGE_BACKWARD")]
12262    PageBackward,
12263    /// Go to the adjustments lower bound.
12264    #[doc(alias = "GTK_SPIN_HOME")]
12265    Home,
12266    /// Go to the adjustments upper bound.
12267    #[doc(alias = "GTK_SPIN_END")]
12268    End,
12269    /// Change by a specified amount.
12270    #[doc(alias = "GTK_SPIN_USER_DEFINED")]
12271    UserDefined,
12272    #[doc(hidden)]
12273    __Unknown(i32),
12274}
12275
12276#[doc(hidden)]
12277impl IntoGlib for SpinType {
12278    type GlibType = ffi::GtkSpinType;
12279
12280    #[inline]
12281    fn into_glib(self) -> ffi::GtkSpinType {
12282        match self {
12283            Self::StepForward => ffi::GTK_SPIN_STEP_FORWARD,
12284            Self::StepBackward => ffi::GTK_SPIN_STEP_BACKWARD,
12285            Self::PageForward => ffi::GTK_SPIN_PAGE_FORWARD,
12286            Self::PageBackward => ffi::GTK_SPIN_PAGE_BACKWARD,
12287            Self::Home => ffi::GTK_SPIN_HOME,
12288            Self::End => ffi::GTK_SPIN_END,
12289            Self::UserDefined => ffi::GTK_SPIN_USER_DEFINED,
12290            Self::__Unknown(value) => value,
12291        }
12292    }
12293}
12294
12295#[doc(hidden)]
12296impl FromGlib<ffi::GtkSpinType> for SpinType {
12297    #[inline]
12298    unsafe fn from_glib(value: ffi::GtkSpinType) -> Self {
12299        skip_assert_initialized!();
12300
12301        match value {
12302            ffi::GTK_SPIN_STEP_FORWARD => Self::StepForward,
12303            ffi::GTK_SPIN_STEP_BACKWARD => Self::StepBackward,
12304            ffi::GTK_SPIN_PAGE_FORWARD => Self::PageForward,
12305            ffi::GTK_SPIN_PAGE_BACKWARD => Self::PageBackward,
12306            ffi::GTK_SPIN_HOME => Self::Home,
12307            ffi::GTK_SPIN_END => Self::End,
12308            ffi::GTK_SPIN_USER_DEFINED => Self::UserDefined,
12309            value => Self::__Unknown(value),
12310        }
12311    }
12312}
12313
12314impl StaticType for SpinType {
12315    #[inline]
12316    #[doc(alias = "gtk_spin_type_get_type")]
12317    fn static_type() -> glib::Type {
12318        unsafe { from_glib(ffi::gtk_spin_type_get_type()) }
12319    }
12320}
12321
12322impl glib::HasParamSpec for SpinType {
12323    type ParamSpec = glib::ParamSpecEnum;
12324    type SetValue = Self;
12325    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12326
12327    fn param_spec_builder() -> Self::BuilderFn {
12328        Self::ParamSpec::builder_with_default
12329    }
12330}
12331
12332impl glib::value::ValueType for SpinType {
12333    type Type = Self;
12334}
12335
12336unsafe impl<'a> glib::value::FromValue<'a> for SpinType {
12337    type Checker = glib::value::GenericValueTypeChecker<Self>;
12338
12339    #[inline]
12340    unsafe fn from_value(value: &'a glib::Value) -> Self {
12341        skip_assert_initialized!();
12342        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12343    }
12344}
12345
12346impl ToValue for SpinType {
12347    #[inline]
12348    fn to_value(&self) -> glib::Value {
12349        let mut value = glib::Value::for_value_type::<Self>();
12350        unsafe {
12351            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12352        }
12353        value
12354    }
12355
12356    #[inline]
12357    fn value_type(&self) -> glib::Type {
12358        Self::static_type()
12359    }
12360}
12361
12362impl From<SpinType> for glib::Value {
12363    #[inline]
12364    fn from(v: SpinType) -> Self {
12365        skip_assert_initialized!();
12366        ToValue::to_value(&v)
12367    }
12368}
12369
12370/// Possible transitions between pages in a [`Stack`][crate::Stack] widget.
12371///
12372/// New values may be added to this enumeration over time.
12373#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12374#[non_exhaustive]
12375#[doc(alias = "GtkStackTransitionType")]
12376pub enum StackTransitionType {
12377    /// No transition
12378    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_NONE")]
12379    None,
12380    /// A cross-fade
12381    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_CROSSFADE")]
12382    Crossfade,
12383    /// Slide from left to right
12384    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT")]
12385    SlideRight,
12386    /// Slide from right to left
12387    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT")]
12388    SlideLeft,
12389    /// Slide from bottom up
12390    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_UP")]
12391    SlideUp,
12392    /// Slide from top down
12393    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN")]
12394    SlideDown,
12395    /// Slide from left or right according to the children order
12396    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT")]
12397    SlideLeftRight,
12398    /// Slide from top down or bottom up according to the order
12399    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN")]
12400    SlideUpDown,
12401    /// Cover the old page by sliding up
12402    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_UP")]
12403    OverUp,
12404    /// Cover the old page by sliding down
12405    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_DOWN")]
12406    OverDown,
12407    /// Cover the old page by sliding to the left
12408    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_LEFT")]
12409    OverLeft,
12410    /// Cover the old page by sliding to the right
12411    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_RIGHT")]
12412    OverRight,
12413    /// Uncover the new page by sliding up
12414    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_UP")]
12415    UnderUp,
12416    /// Uncover the new page by sliding down
12417    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_DOWN")]
12418    UnderDown,
12419    /// Uncover the new page by sliding to the left
12420    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_LEFT")]
12421    UnderLeft,
12422    /// Uncover the new page by sliding to the right
12423    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_RIGHT")]
12424    UnderRight,
12425    /// Cover the old page sliding up or uncover the new page sliding down, according to order
12426    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_UP_DOWN")]
12427    OverUpDown,
12428    /// Cover the old page sliding down or uncover the new page sliding up, according to order
12429    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_DOWN_UP")]
12430    OverDownUp,
12431    /// Cover the old page sliding left or uncover the new page sliding right, according to order
12432    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_LEFT_RIGHT")]
12433    OverLeftRight,
12434    /// Cover the old page sliding right or uncover the new page sliding left, according to order
12435    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_RIGHT_LEFT")]
12436    OverRightLeft,
12437    /// Pretend the pages are sides of a cube and rotate that cube to the left
12438    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT")]
12439    RotateLeft,
12440    /// Pretend the pages are sides of a cube and rotate that cube to the right
12441    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT")]
12442    RotateRight,
12443    /// Pretend the pages are sides of a cube and rotate that cube to the left or right according to the children order
12444    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT_RIGHT")]
12445    RotateLeftRight,
12446    #[doc(hidden)]
12447    __Unknown(i32),
12448}
12449
12450#[doc(hidden)]
12451impl IntoGlib for StackTransitionType {
12452    type GlibType = ffi::GtkStackTransitionType;
12453
12454    fn into_glib(self) -> ffi::GtkStackTransitionType {
12455        match self {
12456            Self::None => ffi::GTK_STACK_TRANSITION_TYPE_NONE,
12457            Self::Crossfade => ffi::GTK_STACK_TRANSITION_TYPE_CROSSFADE,
12458            Self::SlideRight => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT,
12459            Self::SlideLeft => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT,
12460            Self::SlideUp => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP,
12461            Self::SlideDown => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN,
12462            Self::SlideLeftRight => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT,
12463            Self::SlideUpDown => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN,
12464            Self::OverUp => ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP,
12465            Self::OverDown => ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN,
12466            Self::OverLeft => ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT,
12467            Self::OverRight => ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT,
12468            Self::UnderUp => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_UP,
12469            Self::UnderDown => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_DOWN,
12470            Self::UnderLeft => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_LEFT,
12471            Self::UnderRight => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_RIGHT,
12472            Self::OverUpDown => ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP_DOWN,
12473            Self::OverDownUp => ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN_UP,
12474            Self::OverLeftRight => ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT_RIGHT,
12475            Self::OverRightLeft => ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT_LEFT,
12476            Self::RotateLeft => ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT,
12477            Self::RotateRight => ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT,
12478            Self::RotateLeftRight => ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT_RIGHT,
12479            Self::__Unknown(value) => value,
12480        }
12481    }
12482}
12483
12484#[doc(hidden)]
12485impl FromGlib<ffi::GtkStackTransitionType> for StackTransitionType {
12486    unsafe fn from_glib(value: ffi::GtkStackTransitionType) -> Self {
12487        skip_assert_initialized!();
12488
12489        match value {
12490            ffi::GTK_STACK_TRANSITION_TYPE_NONE => Self::None,
12491            ffi::GTK_STACK_TRANSITION_TYPE_CROSSFADE => Self::Crossfade,
12492            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT => Self::SlideRight,
12493            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT => Self::SlideLeft,
12494            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP => Self::SlideUp,
12495            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN => Self::SlideDown,
12496            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT => Self::SlideLeftRight,
12497            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN => Self::SlideUpDown,
12498            ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP => Self::OverUp,
12499            ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN => Self::OverDown,
12500            ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT => Self::OverLeft,
12501            ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT => Self::OverRight,
12502            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_UP => Self::UnderUp,
12503            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_DOWN => Self::UnderDown,
12504            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_LEFT => Self::UnderLeft,
12505            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_RIGHT => Self::UnderRight,
12506            ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP_DOWN => Self::OverUpDown,
12507            ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN_UP => Self::OverDownUp,
12508            ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT_RIGHT => Self::OverLeftRight,
12509            ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT_LEFT => Self::OverRightLeft,
12510            ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT => Self::RotateLeft,
12511            ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT => Self::RotateRight,
12512            ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT_RIGHT => Self::RotateLeftRight,
12513            value => Self::__Unknown(value),
12514        }
12515    }
12516}
12517
12518impl StaticType for StackTransitionType {
12519    #[inline]
12520    #[doc(alias = "gtk_stack_transition_type_get_type")]
12521    fn static_type() -> glib::Type {
12522        unsafe { from_glib(ffi::gtk_stack_transition_type_get_type()) }
12523    }
12524}
12525
12526impl glib::HasParamSpec for StackTransitionType {
12527    type ParamSpec = glib::ParamSpecEnum;
12528    type SetValue = Self;
12529    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12530
12531    fn param_spec_builder() -> Self::BuilderFn {
12532        Self::ParamSpec::builder_with_default
12533    }
12534}
12535
12536impl glib::value::ValueType for StackTransitionType {
12537    type Type = Self;
12538}
12539
12540unsafe impl<'a> glib::value::FromValue<'a> for StackTransitionType {
12541    type Checker = glib::value::GenericValueTypeChecker<Self>;
12542
12543    #[inline]
12544    unsafe fn from_value(value: &'a glib::Value) -> Self {
12545        skip_assert_initialized!();
12546        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12547    }
12548}
12549
12550impl ToValue for StackTransitionType {
12551    #[inline]
12552    fn to_value(&self) -> glib::Value {
12553        let mut value = glib::Value::for_value_type::<Self>();
12554        unsafe {
12555            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12556        }
12557        value
12558    }
12559
12560    #[inline]
12561    fn value_type(&self) -> glib::Type {
12562        Self::static_type()
12563    }
12564}
12565
12566impl From<StackTransitionType> for glib::Value {
12567    #[inline]
12568    fn from(v: StackTransitionType) -> Self {
12569        skip_assert_initialized!();
12570        ToValue::to_value(&v)
12571    }
12572}
12573
12574/// Specifies how search strings are matched inside text.
12575#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12576#[non_exhaustive]
12577#[doc(alias = "GtkStringFilterMatchMode")]
12578pub enum StringFilterMatchMode {
12579    /// The search string and
12580    ///   text must match exactly
12581    #[doc(alias = "GTK_STRING_FILTER_MATCH_MODE_EXACT")]
12582    Exact,
12583    /// The search string
12584    ///   must be contained as a substring inside the text
12585    #[doc(alias = "GTK_STRING_FILTER_MATCH_MODE_SUBSTRING")]
12586    Substring,
12587    /// The text must begin
12588    ///   with the search string
12589    #[doc(alias = "GTK_STRING_FILTER_MATCH_MODE_PREFIX")]
12590    Prefix,
12591    #[doc(hidden)]
12592    __Unknown(i32),
12593}
12594
12595#[doc(hidden)]
12596impl IntoGlib for StringFilterMatchMode {
12597    type GlibType = ffi::GtkStringFilterMatchMode;
12598
12599    #[inline]
12600    fn into_glib(self) -> ffi::GtkStringFilterMatchMode {
12601        match self {
12602            Self::Exact => ffi::GTK_STRING_FILTER_MATCH_MODE_EXACT,
12603            Self::Substring => ffi::GTK_STRING_FILTER_MATCH_MODE_SUBSTRING,
12604            Self::Prefix => ffi::GTK_STRING_FILTER_MATCH_MODE_PREFIX,
12605            Self::__Unknown(value) => value,
12606        }
12607    }
12608}
12609
12610#[doc(hidden)]
12611impl FromGlib<ffi::GtkStringFilterMatchMode> for StringFilterMatchMode {
12612    #[inline]
12613    unsafe fn from_glib(value: ffi::GtkStringFilterMatchMode) -> Self {
12614        skip_assert_initialized!();
12615
12616        match value {
12617            ffi::GTK_STRING_FILTER_MATCH_MODE_EXACT => Self::Exact,
12618            ffi::GTK_STRING_FILTER_MATCH_MODE_SUBSTRING => Self::Substring,
12619            ffi::GTK_STRING_FILTER_MATCH_MODE_PREFIX => Self::Prefix,
12620            value => Self::__Unknown(value),
12621        }
12622    }
12623}
12624
12625impl StaticType for StringFilterMatchMode {
12626    #[inline]
12627    #[doc(alias = "gtk_string_filter_match_mode_get_type")]
12628    fn static_type() -> glib::Type {
12629        unsafe { from_glib(ffi::gtk_string_filter_match_mode_get_type()) }
12630    }
12631}
12632
12633impl glib::HasParamSpec for StringFilterMatchMode {
12634    type ParamSpec = glib::ParamSpecEnum;
12635    type SetValue = Self;
12636    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12637
12638    fn param_spec_builder() -> Self::BuilderFn {
12639        Self::ParamSpec::builder_with_default
12640    }
12641}
12642
12643impl glib::value::ValueType for StringFilterMatchMode {
12644    type Type = Self;
12645}
12646
12647unsafe impl<'a> glib::value::FromValue<'a> for StringFilterMatchMode {
12648    type Checker = glib::value::GenericValueTypeChecker<Self>;
12649
12650    #[inline]
12651    unsafe fn from_value(value: &'a glib::Value) -> Self {
12652        skip_assert_initialized!();
12653        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12654    }
12655}
12656
12657impl ToValue for StringFilterMatchMode {
12658    #[inline]
12659    fn to_value(&self) -> glib::Value {
12660        let mut value = glib::Value::for_value_type::<Self>();
12661        unsafe {
12662            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12663        }
12664        value
12665    }
12666
12667    #[inline]
12668    fn value_type(&self) -> glib::Type {
12669        Self::static_type()
12670    }
12671}
12672
12673impl From<StringFilterMatchMode> for glib::Value {
12674    #[inline]
12675    fn from(v: StringFilterMatchMode) -> Self {
12676        skip_assert_initialized!();
12677        ToValue::to_value(&v)
12678    }
12679}
12680
12681/// Error codes in the `GTK_SVG_ERROR` domain for errors
12682/// that happen during parsing or rendering of SVG.
12683#[cfg(feature = "v4_22")]
12684#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12685#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12686#[non_exhaustive]
12687#[doc(alias = "GtkSvgError")]
12688pub enum SvgError {
12689    /// The XML syntax is broken
12690    ///   in some way
12691    #[doc(alias = "GTK_SVG_ERROR_INVALID_SYNTAX")]
12692    InvalidSyntax,
12693    /// An XML element is invalid
12694    ///   (either because it is not part of SVG, or because it is
12695    ///   in the wrong place, or because it not implemented in GTK)
12696    #[doc(alias = "GTK_SVG_ERROR_INVALID_ELEMENT")]
12697    InvalidElement,
12698    /// An attribute is invalid
12699    ///   (either because it is not part of SVG, or because it is
12700    ///   not implemented in GTK, or its value is problematic)
12701    #[doc(alias = "GTK_SVG_ERROR_INVALID_ATTRIBUTE")]
12702    InvalidAttribute,
12703    /// A required attribute is missing
12704    #[doc(alias = "GTK_SVG_ERROR_MISSING_ATTRIBUTE")]
12705    MissingAttribute,
12706    /// A reference does not point to
12707    ///   a suitable element
12708    #[doc(alias = "GTK_SVG_ERROR_INVALID_REFERENCE")]
12709    InvalidReference,
12710    /// An animation could not be updated
12711    #[doc(alias = "GTK_SVG_ERROR_FAILED_UPDATE")]
12712    FailedUpdate,
12713    /// Rendering is not according to
12714    ///   expecations
12715    #[doc(alias = "GTK_SVG_ERROR_FAILED_RENDERING")]
12716    FailedRendering,
12717    /// An XML element is ignored,
12718    ///   but it should not affect rendering (this error code is used
12719    ///   for metadata and exension elements)
12720    #[doc(alias = "GTK_SVG_ERROR_IGNORED_ELEMENT")]
12721    IgnoredElement,
12722    /// An implementation limit has
12723    ///   been hit, such as the number of loaded shapes.
12724    #[doc(alias = "GTK_SVG_ERROR_LIMITS_EXCEEDED")]
12725    LimitsExceeded,
12726    /// The SVG uses features that
12727    ///   are not supported by [`Svg`][crate::Svg]. It may be advisable to use
12728    ///   a different SVG renderer.
12729    #[doc(alias = "GTK_SVG_ERROR_NOT_IMPLEMENTED")]
12730    NotImplemented,
12731    #[doc(alias = "GTK_SVG_ERROR_FEATURE_DISABLED")]
12732    FeatureDisabled,
12733    #[doc(hidden)]
12734    __Unknown(i32),
12735}
12736
12737#[cfg(feature = "v4_22")]
12738#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12739impl SvgError {
12740    #[doc(alias = "gtk_svg_error_get_attribute")]
12741    #[doc(alias = "get_attribute")]
12742    pub fn attribute(error: &glib::Error) -> Option<glib::GString> {
12743        assert_initialized_main_thread!();
12744        unsafe { from_glib_none(ffi::gtk_svg_error_get_attribute(error.to_glib_none().0)) }
12745    }
12746
12747    #[doc(alias = "gtk_svg_error_get_element")]
12748    #[doc(alias = "get_element")]
12749    pub fn element(error: &glib::Error) -> Option<glib::GString> {
12750        assert_initialized_main_thread!();
12751        unsafe { from_glib_none(ffi::gtk_svg_error_get_element(error.to_glib_none().0)) }
12752    }
12753
12754    //#[doc(alias = "gtk_svg_error_get_end")]
12755    //#[doc(alias = "get_end")]
12756    //pub fn end(error: &glib::Error) -> /*Ignored*/Option<SvgLocation> {
12757    //    unsafe { TODO: call ffi:gtk_svg_error_get_end() }
12758    //}
12759
12760    #[cfg(feature = "v4_24")]
12761    #[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
12762    #[doc(alias = "gtk_svg_error_get_input")]
12763    #[doc(alias = "get_input")]
12764    pub fn input(error: &glib::Error) -> Option<glib::GString> {
12765        assert_initialized_main_thread!();
12766        unsafe { from_glib_none(ffi::gtk_svg_error_get_input(error.to_glib_none().0)) }
12767    }
12768
12769    //#[doc(alias = "gtk_svg_error_get_start")]
12770    //#[doc(alias = "get_start")]
12771    //pub fn start(error: &glib::Error) -> /*Ignored*/Option<SvgLocation> {
12772    //    unsafe { TODO: call ffi:gtk_svg_error_get_start() }
12773    //}
12774
12775    #[doc(alias = "gtk_svg_error_quark")]
12776    pub fn quark() -> glib::Quark {
12777        assert_initialized_main_thread!();
12778        unsafe { from_glib(ffi::gtk_svg_error_quark()) }
12779    }
12780}
12781
12782#[cfg(feature = "v4_22")]
12783#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12784#[doc(hidden)]
12785impl IntoGlib for SvgError {
12786    type GlibType = ffi::GtkSvgError;
12787
12788    #[inline]
12789    fn into_glib(self) -> ffi::GtkSvgError {
12790        match self {
12791            Self::InvalidSyntax => ffi::GTK_SVG_ERROR_INVALID_SYNTAX,
12792            Self::InvalidElement => ffi::GTK_SVG_ERROR_INVALID_ELEMENT,
12793            Self::InvalidAttribute => ffi::GTK_SVG_ERROR_INVALID_ATTRIBUTE,
12794            Self::MissingAttribute => ffi::GTK_SVG_ERROR_MISSING_ATTRIBUTE,
12795            Self::InvalidReference => ffi::GTK_SVG_ERROR_INVALID_REFERENCE,
12796            Self::FailedUpdate => ffi::GTK_SVG_ERROR_FAILED_UPDATE,
12797            Self::FailedRendering => ffi::GTK_SVG_ERROR_FAILED_RENDERING,
12798            Self::IgnoredElement => ffi::GTK_SVG_ERROR_IGNORED_ELEMENT,
12799            Self::LimitsExceeded => ffi::GTK_SVG_ERROR_LIMITS_EXCEEDED,
12800            Self::NotImplemented => ffi::GTK_SVG_ERROR_NOT_IMPLEMENTED,
12801            Self::FeatureDisabled => ffi::GTK_SVG_ERROR_FEATURE_DISABLED,
12802            Self::__Unknown(value) => value,
12803        }
12804    }
12805}
12806
12807#[cfg(feature = "v4_22")]
12808#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12809#[doc(hidden)]
12810impl FromGlib<ffi::GtkSvgError> for SvgError {
12811    #[inline]
12812    unsafe fn from_glib(value: ffi::GtkSvgError) -> Self {
12813        skip_assert_initialized!();
12814
12815        match value {
12816            ffi::GTK_SVG_ERROR_INVALID_SYNTAX => Self::InvalidSyntax,
12817            ffi::GTK_SVG_ERROR_INVALID_ELEMENT => Self::InvalidElement,
12818            ffi::GTK_SVG_ERROR_INVALID_ATTRIBUTE => Self::InvalidAttribute,
12819            ffi::GTK_SVG_ERROR_MISSING_ATTRIBUTE => Self::MissingAttribute,
12820            ffi::GTK_SVG_ERROR_INVALID_REFERENCE => Self::InvalidReference,
12821            ffi::GTK_SVG_ERROR_FAILED_UPDATE => Self::FailedUpdate,
12822            ffi::GTK_SVG_ERROR_FAILED_RENDERING => Self::FailedRendering,
12823            ffi::GTK_SVG_ERROR_IGNORED_ELEMENT => Self::IgnoredElement,
12824            ffi::GTK_SVG_ERROR_LIMITS_EXCEEDED => Self::LimitsExceeded,
12825            ffi::GTK_SVG_ERROR_NOT_IMPLEMENTED => Self::NotImplemented,
12826            ffi::GTK_SVG_ERROR_FEATURE_DISABLED => Self::FeatureDisabled,
12827            value => Self::__Unknown(value),
12828        }
12829    }
12830}
12831
12832#[cfg(feature = "v4_22")]
12833#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12834impl glib::error::ErrorDomain for SvgError {
12835    #[inline]
12836    fn domain() -> glib::Quark {
12837        skip_assert_initialized!();
12838
12839        static QUARK: ::std::sync::OnceLock<glib::ffi::GQuark> = ::std::sync::OnceLock::new();
12840        let quark = *QUARK.get_or_init(|| unsafe {
12841            glib::ffi::g_quark_from_static_string(c"GtkSvgError".as_ptr())
12842        });
12843        unsafe { from_glib(quark) }
12844    }
12845
12846    #[inline]
12847    fn code(self) -> i32 {
12848        self.into_glib()
12849    }
12850
12851    #[inline]
12852    #[allow(clippy::match_single_binding)]
12853    fn from(code: i32) -> Option<Self> {
12854        skip_assert_initialized!();
12855        match unsafe { from_glib(code) } {
12856            value => Some(value),
12857        }
12858    }
12859}
12860
12861#[cfg(feature = "v4_22")]
12862#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12863impl StaticType for SvgError {
12864    #[inline]
12865    #[doc(alias = "gtk_svg_error_get_type")]
12866    fn static_type() -> glib::Type {
12867        unsafe { from_glib(ffi::gtk_svg_error_get_type()) }
12868    }
12869}
12870
12871#[cfg(feature = "v4_22")]
12872#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12873impl glib::HasParamSpec for SvgError {
12874    type ParamSpec = glib::ParamSpecEnum;
12875    type SetValue = Self;
12876    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12877
12878    fn param_spec_builder() -> Self::BuilderFn {
12879        Self::ParamSpec::builder_with_default
12880    }
12881}
12882
12883#[cfg(feature = "v4_22")]
12884#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12885impl glib::value::ValueType for SvgError {
12886    type Type = Self;
12887}
12888
12889#[cfg(feature = "v4_22")]
12890#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12891unsafe impl<'a> glib::value::FromValue<'a> for SvgError {
12892    type Checker = glib::value::GenericValueTypeChecker<Self>;
12893
12894    #[inline]
12895    unsafe fn from_value(value: &'a glib::Value) -> Self {
12896        skip_assert_initialized!();
12897        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12898    }
12899}
12900
12901#[cfg(feature = "v4_22")]
12902#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12903impl ToValue for SvgError {
12904    #[inline]
12905    fn to_value(&self) -> glib::Value {
12906        let mut value = glib::Value::for_value_type::<Self>();
12907        unsafe {
12908            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12909        }
12910        value
12911    }
12912
12913    #[inline]
12914    fn value_type(&self) -> glib::Type {
12915        Self::static_type()
12916    }
12917}
12918
12919#[cfg(feature = "v4_22")]
12920#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12921impl From<SvgError> for glib::Value {
12922    #[inline]
12923    fn from(v: SvgError) -> Self {
12924        skip_assert_initialized!();
12925        ToValue::to_value(&v)
12926    }
12927}
12928
12929/// The indexes of colors passed to symbolic color rendering, such as
12930/// `vfunc::Gtk::SymbolicPaintable::snapshot_symbolic`.
12931///
12932/// More values may be added over time.
12933#[cfg(feature = "v4_6")]
12934#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
12935#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12936#[non_exhaustive]
12937#[doc(alias = "GtkSymbolicColor")]
12938pub enum SymbolicColor {
12939    /// The default foreground color
12940    #[doc(alias = "GTK_SYMBOLIC_COLOR_FOREGROUND")]
12941    Foreground,
12942    /// Indication color for errors
12943    #[doc(alias = "GTK_SYMBOLIC_COLOR_ERROR")]
12944    Error,
12945    /// Indication color for warnings
12946    #[doc(alias = "GTK_SYMBOLIC_COLOR_WARNING")]
12947    Warning,
12948    /// Indication color for success
12949    #[doc(alias = "GTK_SYMBOLIC_COLOR_SUCCESS")]
12950    Success,
12951    /// The system accent color.
12952    #[cfg(feature = "v4_22")]
12953    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12954    #[doc(alias = "GTK_SYMBOLIC_COLOR_ACCENT")]
12955    Accent,
12956    #[doc(hidden)]
12957    __Unknown(i32),
12958}
12959
12960#[cfg(feature = "v4_6")]
12961#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
12962#[doc(hidden)]
12963impl IntoGlib for SymbolicColor {
12964    type GlibType = ffi::GtkSymbolicColor;
12965
12966    #[inline]
12967    fn into_glib(self) -> ffi::GtkSymbolicColor {
12968        match self {
12969            Self::Foreground => ffi::GTK_SYMBOLIC_COLOR_FOREGROUND,
12970            Self::Error => ffi::GTK_SYMBOLIC_COLOR_ERROR,
12971            Self::Warning => ffi::GTK_SYMBOLIC_COLOR_WARNING,
12972            Self::Success => ffi::GTK_SYMBOLIC_COLOR_SUCCESS,
12973            #[cfg(feature = "v4_22")]
12974            Self::Accent => ffi::GTK_SYMBOLIC_COLOR_ACCENT,
12975            Self::__Unknown(value) => value,
12976        }
12977    }
12978}
12979
12980#[cfg(feature = "v4_6")]
12981#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
12982#[doc(hidden)]
12983impl FromGlib<ffi::GtkSymbolicColor> for SymbolicColor {
12984    #[inline]
12985    unsafe fn from_glib(value: ffi::GtkSymbolicColor) -> Self {
12986        skip_assert_initialized!();
12987
12988        match value {
12989            ffi::GTK_SYMBOLIC_COLOR_FOREGROUND => Self::Foreground,
12990            ffi::GTK_SYMBOLIC_COLOR_ERROR => Self::Error,
12991            ffi::GTK_SYMBOLIC_COLOR_WARNING => Self::Warning,
12992            ffi::GTK_SYMBOLIC_COLOR_SUCCESS => Self::Success,
12993            #[cfg(feature = "v4_22")]
12994            ffi::GTK_SYMBOLIC_COLOR_ACCENT => Self::Accent,
12995            value => Self::__Unknown(value),
12996        }
12997    }
12998}
12999
13000#[cfg(feature = "v4_6")]
13001#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13002impl StaticType for SymbolicColor {
13003    #[inline]
13004    #[doc(alias = "gtk_symbolic_color_get_type")]
13005    fn static_type() -> glib::Type {
13006        unsafe { from_glib(ffi::gtk_symbolic_color_get_type()) }
13007    }
13008}
13009
13010#[cfg(feature = "v4_6")]
13011#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13012impl glib::HasParamSpec for SymbolicColor {
13013    type ParamSpec = glib::ParamSpecEnum;
13014    type SetValue = Self;
13015    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13016
13017    fn param_spec_builder() -> Self::BuilderFn {
13018        Self::ParamSpec::builder_with_default
13019    }
13020}
13021
13022#[cfg(feature = "v4_6")]
13023#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13024impl glib::value::ValueType for SymbolicColor {
13025    type Type = Self;
13026}
13027
13028#[cfg(feature = "v4_6")]
13029#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13030unsafe impl<'a> glib::value::FromValue<'a> for SymbolicColor {
13031    type Checker = glib::value::GenericValueTypeChecker<Self>;
13032
13033    #[inline]
13034    unsafe fn from_value(value: &'a glib::Value) -> Self {
13035        skip_assert_initialized!();
13036        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13037    }
13038}
13039
13040#[cfg(feature = "v4_6")]
13041#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13042impl ToValue for SymbolicColor {
13043    #[inline]
13044    fn to_value(&self) -> glib::Value {
13045        let mut value = glib::Value::for_value_type::<Self>();
13046        unsafe {
13047            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13048        }
13049        value
13050    }
13051
13052    #[inline]
13053    fn value_type(&self) -> glib::Type {
13054        Self::static_type()
13055    }
13056}
13057
13058#[cfg(feature = "v4_6")]
13059#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13060impl From<SymbolicColor> for glib::Value {
13061    #[inline]
13062    fn from(v: SymbolicColor) -> Self {
13063        skip_assert_initialized!();
13064        ToValue::to_value(&v)
13065    }
13066}
13067
13068/// Values that can be passed to the [`WidgetImpl::system_setting_changed()`][crate::subclass::prelude::WidgetImpl::system_setting_changed()]
13069/// vfunc.
13070///
13071/// The values indicate which system setting has changed.
13072/// Widgets may need to drop caches, or react otherwise.
13073///
13074/// Most of the values correspond to [`Settings`][crate::Settings] properties.
13075///
13076/// More values may be added over time.
13077#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13078#[non_exhaustive]
13079#[doc(alias = "GtkSystemSetting")]
13080pub enum SystemSetting {
13081    /// the [`gtk-xft-dpi`][struct@crate::Settings#gtk-xft-dpi] setting has changed
13082    #[doc(alias = "GTK_SYSTEM_SETTING_DPI")]
13083    Dpi,
13084    /// The [`gtk-font-name`][struct@crate::Settings#gtk-font-name] setting has changed
13085    #[doc(alias = "GTK_SYSTEM_SETTING_FONT_NAME")]
13086    FontName,
13087    /// The font configuration has changed in a way that
13088    ///   requires text to be redrawn. This can be any of the
13089    ///   [`gtk-xft-antialias`][struct@crate::Settings#gtk-xft-antialias],
13090    ///   [`gtk-xft-hinting`][struct@crate::Settings#gtk-xft-hinting],
13091    ///   [`gtk-xft-hintstyle`][struct@crate::Settings#gtk-xft-hintstyle],
13092    ///   [`gtk-xft-rgba`][struct@crate::Settings#gtk-xft-rgba] or
13093    ///   [`gtk-fontconfig-timestamp`][struct@crate::Settings#gtk-fontconfig-timestamp] settings
13094    #[doc(alias = "GTK_SYSTEM_SETTING_FONT_CONFIG")]
13095    FontConfig,
13096    /// The display has changed
13097    #[doc(alias = "GTK_SYSTEM_SETTING_DISPLAY")]
13098    Display,
13099    /// The icon theme has changed in a way that requires
13100    ///   icons to be looked up again
13101    #[doc(alias = "GTK_SYSTEM_SETTING_ICON_THEME")]
13102    IconTheme,
13103    #[doc(hidden)]
13104    __Unknown(i32),
13105}
13106
13107#[doc(hidden)]
13108impl IntoGlib for SystemSetting {
13109    type GlibType = ffi::GtkSystemSetting;
13110
13111    #[inline]
13112    fn into_glib(self) -> ffi::GtkSystemSetting {
13113        match self {
13114            Self::Dpi => ffi::GTK_SYSTEM_SETTING_DPI,
13115            Self::FontName => ffi::GTK_SYSTEM_SETTING_FONT_NAME,
13116            Self::FontConfig => ffi::GTK_SYSTEM_SETTING_FONT_CONFIG,
13117            Self::Display => ffi::GTK_SYSTEM_SETTING_DISPLAY,
13118            Self::IconTheme => ffi::GTK_SYSTEM_SETTING_ICON_THEME,
13119            Self::__Unknown(value) => value,
13120        }
13121    }
13122}
13123
13124#[doc(hidden)]
13125impl FromGlib<ffi::GtkSystemSetting> for SystemSetting {
13126    #[inline]
13127    unsafe fn from_glib(value: ffi::GtkSystemSetting) -> Self {
13128        skip_assert_initialized!();
13129
13130        match value {
13131            ffi::GTK_SYSTEM_SETTING_DPI => Self::Dpi,
13132            ffi::GTK_SYSTEM_SETTING_FONT_NAME => Self::FontName,
13133            ffi::GTK_SYSTEM_SETTING_FONT_CONFIG => Self::FontConfig,
13134            ffi::GTK_SYSTEM_SETTING_DISPLAY => Self::Display,
13135            ffi::GTK_SYSTEM_SETTING_ICON_THEME => Self::IconTheme,
13136            value => Self::__Unknown(value),
13137        }
13138    }
13139}
13140
13141impl StaticType for SystemSetting {
13142    #[inline]
13143    #[doc(alias = "gtk_system_setting_get_type")]
13144    fn static_type() -> glib::Type {
13145        unsafe { from_glib(ffi::gtk_system_setting_get_type()) }
13146    }
13147}
13148
13149impl glib::HasParamSpec for SystemSetting {
13150    type ParamSpec = glib::ParamSpecEnum;
13151    type SetValue = Self;
13152    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13153
13154    fn param_spec_builder() -> Self::BuilderFn {
13155        Self::ParamSpec::builder_with_default
13156    }
13157}
13158
13159impl glib::value::ValueType for SystemSetting {
13160    type Type = Self;
13161}
13162
13163unsafe impl<'a> glib::value::FromValue<'a> for SystemSetting {
13164    type Checker = glib::value::GenericValueTypeChecker<Self>;
13165
13166    #[inline]
13167    unsafe fn from_value(value: &'a glib::Value) -> Self {
13168        skip_assert_initialized!();
13169        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13170    }
13171}
13172
13173impl ToValue for SystemSetting {
13174    #[inline]
13175    fn to_value(&self) -> glib::Value {
13176        let mut value = glib::Value::for_value_type::<Self>();
13177        unsafe {
13178            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13179        }
13180        value
13181    }
13182
13183    #[inline]
13184    fn value_type(&self) -> glib::Type {
13185        Self::static_type()
13186    }
13187}
13188
13189impl From<SystemSetting> for glib::Value {
13190    #[inline]
13191    fn from(v: SystemSetting) -> Self {
13192        skip_assert_initialized!();
13193        ToValue::to_value(&v)
13194    }
13195}
13196
13197/// Reading directions for text.
13198#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13199#[non_exhaustive]
13200#[doc(alias = "GtkTextDirection")]
13201pub enum TextDirection {
13202    /// No direction.
13203    #[doc(alias = "GTK_TEXT_DIR_NONE")]
13204    None,
13205    /// Left to right text direction.
13206    #[doc(alias = "GTK_TEXT_DIR_LTR")]
13207    Ltr,
13208    /// Right to left text direction.
13209    #[doc(alias = "GTK_TEXT_DIR_RTL")]
13210    Rtl,
13211    #[doc(hidden)]
13212    __Unknown(i32),
13213}
13214
13215#[doc(hidden)]
13216impl IntoGlib for TextDirection {
13217    type GlibType = ffi::GtkTextDirection;
13218
13219    #[inline]
13220    fn into_glib(self) -> ffi::GtkTextDirection {
13221        match self {
13222            Self::None => ffi::GTK_TEXT_DIR_NONE,
13223            Self::Ltr => ffi::GTK_TEXT_DIR_LTR,
13224            Self::Rtl => ffi::GTK_TEXT_DIR_RTL,
13225            Self::__Unknown(value) => value,
13226        }
13227    }
13228}
13229
13230#[doc(hidden)]
13231impl FromGlib<ffi::GtkTextDirection> for TextDirection {
13232    #[inline]
13233    unsafe fn from_glib(value: ffi::GtkTextDirection) -> Self {
13234        skip_assert_initialized!();
13235
13236        match value {
13237            ffi::GTK_TEXT_DIR_NONE => Self::None,
13238            ffi::GTK_TEXT_DIR_LTR => Self::Ltr,
13239            ffi::GTK_TEXT_DIR_RTL => Self::Rtl,
13240            value => Self::__Unknown(value),
13241        }
13242    }
13243}
13244
13245impl StaticType for TextDirection {
13246    #[inline]
13247    #[doc(alias = "gtk_text_direction_get_type")]
13248    fn static_type() -> glib::Type {
13249        unsafe { from_glib(ffi::gtk_text_direction_get_type()) }
13250    }
13251}
13252
13253impl glib::HasParamSpec for TextDirection {
13254    type ParamSpec = glib::ParamSpecEnum;
13255    type SetValue = Self;
13256    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13257
13258    fn param_spec_builder() -> Self::BuilderFn {
13259        Self::ParamSpec::builder_with_default
13260    }
13261}
13262
13263impl glib::value::ValueType for TextDirection {
13264    type Type = Self;
13265}
13266
13267unsafe impl<'a> glib::value::FromValue<'a> for TextDirection {
13268    type Checker = glib::value::GenericValueTypeChecker<Self>;
13269
13270    #[inline]
13271    unsafe fn from_value(value: &'a glib::Value) -> Self {
13272        skip_assert_initialized!();
13273        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13274    }
13275}
13276
13277impl ToValue for TextDirection {
13278    #[inline]
13279    fn to_value(&self) -> glib::Value {
13280        let mut value = glib::Value::for_value_type::<Self>();
13281        unsafe {
13282            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13283        }
13284        value
13285    }
13286
13287    #[inline]
13288    fn value_type(&self) -> glib::Type {
13289        Self::static_type()
13290    }
13291}
13292
13293impl From<TextDirection> for glib::Value {
13294    #[inline]
13295    fn from(v: TextDirection) -> Self {
13296        skip_assert_initialized!();
13297        ToValue::to_value(&v)
13298    }
13299}
13300
13301/// Granularity types that extend the text selection. Use the
13302/// `GtkTextView::extend-selection` signal to customize the selection.
13303#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13304#[non_exhaustive]
13305#[doc(alias = "GtkTextExtendSelection")]
13306pub enum TextExtendSelection {
13307    /// Selects the current word. It is triggered by
13308    ///   a double-click for example.
13309    #[doc(alias = "GTK_TEXT_EXTEND_SELECTION_WORD")]
13310    Word,
13311    /// Selects the current line. It is triggered by
13312    ///   a triple-click for example.
13313    #[doc(alias = "GTK_TEXT_EXTEND_SELECTION_LINE")]
13314    Line,
13315    #[doc(hidden)]
13316    __Unknown(i32),
13317}
13318
13319#[doc(hidden)]
13320impl IntoGlib for TextExtendSelection {
13321    type GlibType = ffi::GtkTextExtendSelection;
13322
13323    #[inline]
13324    fn into_glib(self) -> ffi::GtkTextExtendSelection {
13325        match self {
13326            Self::Word => ffi::GTK_TEXT_EXTEND_SELECTION_WORD,
13327            Self::Line => ffi::GTK_TEXT_EXTEND_SELECTION_LINE,
13328            Self::__Unknown(value) => value,
13329        }
13330    }
13331}
13332
13333#[doc(hidden)]
13334impl FromGlib<ffi::GtkTextExtendSelection> for TextExtendSelection {
13335    #[inline]
13336    unsafe fn from_glib(value: ffi::GtkTextExtendSelection) -> Self {
13337        skip_assert_initialized!();
13338
13339        match value {
13340            ffi::GTK_TEXT_EXTEND_SELECTION_WORD => Self::Word,
13341            ffi::GTK_TEXT_EXTEND_SELECTION_LINE => Self::Line,
13342            value => Self::__Unknown(value),
13343        }
13344    }
13345}
13346
13347impl StaticType for TextExtendSelection {
13348    #[inline]
13349    #[doc(alias = "gtk_text_extend_selection_get_type")]
13350    fn static_type() -> glib::Type {
13351        unsafe { from_glib(ffi::gtk_text_extend_selection_get_type()) }
13352    }
13353}
13354
13355impl glib::HasParamSpec for TextExtendSelection {
13356    type ParamSpec = glib::ParamSpecEnum;
13357    type SetValue = Self;
13358    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13359
13360    fn param_spec_builder() -> Self::BuilderFn {
13361        Self::ParamSpec::builder_with_default
13362    }
13363}
13364
13365impl glib::value::ValueType for TextExtendSelection {
13366    type Type = Self;
13367}
13368
13369unsafe impl<'a> glib::value::FromValue<'a> for TextExtendSelection {
13370    type Checker = glib::value::GenericValueTypeChecker<Self>;
13371
13372    #[inline]
13373    unsafe fn from_value(value: &'a glib::Value) -> Self {
13374        skip_assert_initialized!();
13375        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13376    }
13377}
13378
13379impl ToValue for TextExtendSelection {
13380    #[inline]
13381    fn to_value(&self) -> glib::Value {
13382        let mut value = glib::Value::for_value_type::<Self>();
13383        unsafe {
13384            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13385        }
13386        value
13387    }
13388
13389    #[inline]
13390    fn value_type(&self) -> glib::Type {
13391        Self::static_type()
13392    }
13393}
13394
13395impl From<TextExtendSelection> for glib::Value {
13396    #[inline]
13397    fn from(v: TextExtendSelection) -> Self {
13398        skip_assert_initialized!();
13399        ToValue::to_value(&v)
13400    }
13401}
13402
13403/// Used to reference the layers of [`TextView`][crate::TextView] for the purpose of customized
13404/// drawing with the ::snapshot_layer vfunc.
13405#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13406#[non_exhaustive]
13407#[doc(alias = "GtkTextViewLayer")]
13408pub enum TextViewLayer {
13409    /// The layer rendered below the text (but above the background).
13410    #[doc(alias = "GTK_TEXT_VIEW_LAYER_BELOW_TEXT")]
13411    BelowText,
13412    /// The layer rendered above the text.
13413    #[doc(alias = "GTK_TEXT_VIEW_LAYER_ABOVE_TEXT")]
13414    AboveText,
13415    #[doc(hidden)]
13416    __Unknown(i32),
13417}
13418
13419#[doc(hidden)]
13420impl IntoGlib for TextViewLayer {
13421    type GlibType = ffi::GtkTextViewLayer;
13422
13423    #[inline]
13424    fn into_glib(self) -> ffi::GtkTextViewLayer {
13425        match self {
13426            Self::BelowText => ffi::GTK_TEXT_VIEW_LAYER_BELOW_TEXT,
13427            Self::AboveText => ffi::GTK_TEXT_VIEW_LAYER_ABOVE_TEXT,
13428            Self::__Unknown(value) => value,
13429        }
13430    }
13431}
13432
13433#[doc(hidden)]
13434impl FromGlib<ffi::GtkTextViewLayer> for TextViewLayer {
13435    #[inline]
13436    unsafe fn from_glib(value: ffi::GtkTextViewLayer) -> Self {
13437        skip_assert_initialized!();
13438
13439        match value {
13440            ffi::GTK_TEXT_VIEW_LAYER_BELOW_TEXT => Self::BelowText,
13441            ffi::GTK_TEXT_VIEW_LAYER_ABOVE_TEXT => Self::AboveText,
13442            value => Self::__Unknown(value),
13443        }
13444    }
13445}
13446
13447impl StaticType for TextViewLayer {
13448    #[inline]
13449    #[doc(alias = "gtk_text_view_layer_get_type")]
13450    fn static_type() -> glib::Type {
13451        unsafe { from_glib(ffi::gtk_text_view_layer_get_type()) }
13452    }
13453}
13454
13455impl glib::HasParamSpec for TextViewLayer {
13456    type ParamSpec = glib::ParamSpecEnum;
13457    type SetValue = Self;
13458    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13459
13460    fn param_spec_builder() -> Self::BuilderFn {
13461        Self::ParamSpec::builder_with_default
13462    }
13463}
13464
13465impl glib::value::ValueType for TextViewLayer {
13466    type Type = Self;
13467}
13468
13469unsafe impl<'a> glib::value::FromValue<'a> for TextViewLayer {
13470    type Checker = glib::value::GenericValueTypeChecker<Self>;
13471
13472    #[inline]
13473    unsafe fn from_value(value: &'a glib::Value) -> Self {
13474        skip_assert_initialized!();
13475        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13476    }
13477}
13478
13479impl ToValue for TextViewLayer {
13480    #[inline]
13481    fn to_value(&self) -> glib::Value {
13482        let mut value = glib::Value::for_value_type::<Self>();
13483        unsafe {
13484            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13485        }
13486        value
13487    }
13488
13489    #[inline]
13490    fn value_type(&self) -> glib::Type {
13491        Self::static_type()
13492    }
13493}
13494
13495impl From<TextViewLayer> for glib::Value {
13496    #[inline]
13497    fn from(v: TextViewLayer) -> Self {
13498        skip_assert_initialized!();
13499        ToValue::to_value(&v)
13500    }
13501}
13502
13503/// Used to reference the parts of [`TextView`][crate::TextView].
13504#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13505#[non_exhaustive]
13506#[doc(alias = "GtkTextWindowType")]
13507pub enum TextWindowType {
13508    /// Window that floats over scrolling areas.
13509    #[doc(alias = "GTK_TEXT_WINDOW_WIDGET")]
13510    Widget,
13511    /// Scrollable text window.
13512    #[doc(alias = "GTK_TEXT_WINDOW_TEXT")]
13513    Text,
13514    /// Left side border window.
13515    #[doc(alias = "GTK_TEXT_WINDOW_LEFT")]
13516    Left,
13517    /// Right side border window.
13518    #[doc(alias = "GTK_TEXT_WINDOW_RIGHT")]
13519    Right,
13520    /// Top border window.
13521    #[doc(alias = "GTK_TEXT_WINDOW_TOP")]
13522    Top,
13523    /// Bottom border window.
13524    #[doc(alias = "GTK_TEXT_WINDOW_BOTTOM")]
13525    Bottom,
13526    #[doc(hidden)]
13527    __Unknown(i32),
13528}
13529
13530#[doc(hidden)]
13531impl IntoGlib for TextWindowType {
13532    type GlibType = ffi::GtkTextWindowType;
13533
13534    #[inline]
13535    fn into_glib(self) -> ffi::GtkTextWindowType {
13536        match self {
13537            Self::Widget => ffi::GTK_TEXT_WINDOW_WIDGET,
13538            Self::Text => ffi::GTK_TEXT_WINDOW_TEXT,
13539            Self::Left => ffi::GTK_TEXT_WINDOW_LEFT,
13540            Self::Right => ffi::GTK_TEXT_WINDOW_RIGHT,
13541            Self::Top => ffi::GTK_TEXT_WINDOW_TOP,
13542            Self::Bottom => ffi::GTK_TEXT_WINDOW_BOTTOM,
13543            Self::__Unknown(value) => value,
13544        }
13545    }
13546}
13547
13548#[doc(hidden)]
13549impl FromGlib<ffi::GtkTextWindowType> for TextWindowType {
13550    #[inline]
13551    unsafe fn from_glib(value: ffi::GtkTextWindowType) -> Self {
13552        skip_assert_initialized!();
13553
13554        match value {
13555            ffi::GTK_TEXT_WINDOW_WIDGET => Self::Widget,
13556            ffi::GTK_TEXT_WINDOW_TEXT => Self::Text,
13557            ffi::GTK_TEXT_WINDOW_LEFT => Self::Left,
13558            ffi::GTK_TEXT_WINDOW_RIGHT => Self::Right,
13559            ffi::GTK_TEXT_WINDOW_TOP => Self::Top,
13560            ffi::GTK_TEXT_WINDOW_BOTTOM => Self::Bottom,
13561            value => Self::__Unknown(value),
13562        }
13563    }
13564}
13565
13566impl StaticType for TextWindowType {
13567    #[inline]
13568    #[doc(alias = "gtk_text_window_type_get_type")]
13569    fn static_type() -> glib::Type {
13570        unsafe { from_glib(ffi::gtk_text_window_type_get_type()) }
13571    }
13572}
13573
13574impl glib::HasParamSpec for TextWindowType {
13575    type ParamSpec = glib::ParamSpecEnum;
13576    type SetValue = Self;
13577    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13578
13579    fn param_spec_builder() -> Self::BuilderFn {
13580        Self::ParamSpec::builder_with_default
13581    }
13582}
13583
13584impl glib::value::ValueType for TextWindowType {
13585    type Type = Self;
13586}
13587
13588unsafe impl<'a> glib::value::FromValue<'a> for TextWindowType {
13589    type Checker = glib::value::GenericValueTypeChecker<Self>;
13590
13591    #[inline]
13592    unsafe fn from_value(value: &'a glib::Value) -> Self {
13593        skip_assert_initialized!();
13594        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13595    }
13596}
13597
13598impl ToValue for TextWindowType {
13599    #[inline]
13600    fn to_value(&self) -> glib::Value {
13601        let mut value = glib::Value::for_value_type::<Self>();
13602        unsafe {
13603            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13604        }
13605        value
13606    }
13607
13608    #[inline]
13609    fn value_type(&self) -> glib::Type {
13610        Self::static_type()
13611    }
13612}
13613
13614impl From<TextWindowType> for glib::Value {
13615    #[inline]
13616    fn from(v: TextWindowType) -> Self {
13617        skip_assert_initialized!();
13618        ToValue::to_value(&v)
13619    }
13620}
13621
13622/// The sizing method the column uses to determine its width.  Please note
13623/// that [`Autosize`][Self::Autosize] are inefficient for large views, and
13624/// can make columns appear choppy.
13625///
13626/// # Deprecated since 4.20
13627///
13628/// There is no replacement.
13629#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
13630#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13631#[non_exhaustive]
13632#[doc(alias = "GtkTreeViewColumnSizing")]
13633pub enum TreeViewColumnSizing {
13634    /// Columns only get bigger in reaction to changes in the model
13635    #[doc(alias = "GTK_TREE_VIEW_COLUMN_GROW_ONLY")]
13636    GrowOnly,
13637    /// Columns resize to be the optimal size every time the model changes.
13638    #[doc(alias = "GTK_TREE_VIEW_COLUMN_AUTOSIZE")]
13639    Autosize,
13640    /// Columns are a fixed numbers of pixels wide.
13641    #[doc(alias = "GTK_TREE_VIEW_COLUMN_FIXED")]
13642    Fixed,
13643    #[doc(hidden)]
13644    __Unknown(i32),
13645}
13646
13647#[allow(deprecated)]
13648#[doc(hidden)]
13649impl IntoGlib for TreeViewColumnSizing {
13650    type GlibType = ffi::GtkTreeViewColumnSizing;
13651
13652    #[inline]
13653    fn into_glib(self) -> ffi::GtkTreeViewColumnSizing {
13654        match self {
13655            Self::GrowOnly => ffi::GTK_TREE_VIEW_COLUMN_GROW_ONLY,
13656            Self::Autosize => ffi::GTK_TREE_VIEW_COLUMN_AUTOSIZE,
13657            Self::Fixed => ffi::GTK_TREE_VIEW_COLUMN_FIXED,
13658            Self::__Unknown(value) => value,
13659        }
13660    }
13661}
13662
13663#[allow(deprecated)]
13664#[doc(hidden)]
13665impl FromGlib<ffi::GtkTreeViewColumnSizing> for TreeViewColumnSizing {
13666    #[inline]
13667    unsafe fn from_glib(value: ffi::GtkTreeViewColumnSizing) -> Self {
13668        skip_assert_initialized!();
13669
13670        match value {
13671            ffi::GTK_TREE_VIEW_COLUMN_GROW_ONLY => Self::GrowOnly,
13672            ffi::GTK_TREE_VIEW_COLUMN_AUTOSIZE => Self::Autosize,
13673            ffi::GTK_TREE_VIEW_COLUMN_FIXED => Self::Fixed,
13674            value => Self::__Unknown(value),
13675        }
13676    }
13677}
13678
13679#[allow(deprecated)]
13680impl StaticType for TreeViewColumnSizing {
13681    #[inline]
13682    #[doc(alias = "gtk_tree_view_column_sizing_get_type")]
13683    fn static_type() -> glib::Type {
13684        unsafe { from_glib(ffi::gtk_tree_view_column_sizing_get_type()) }
13685    }
13686}
13687
13688#[allow(deprecated)]
13689impl glib::HasParamSpec for TreeViewColumnSizing {
13690    type ParamSpec = glib::ParamSpecEnum;
13691    type SetValue = Self;
13692    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13693
13694    fn param_spec_builder() -> Self::BuilderFn {
13695        Self::ParamSpec::builder_with_default
13696    }
13697}
13698
13699#[allow(deprecated)]
13700impl glib::value::ValueType for TreeViewColumnSizing {
13701    type Type = Self;
13702}
13703
13704#[allow(deprecated)]
13705unsafe impl<'a> glib::value::FromValue<'a> for TreeViewColumnSizing {
13706    type Checker = glib::value::GenericValueTypeChecker<Self>;
13707
13708    #[inline]
13709    unsafe fn from_value(value: &'a glib::Value) -> Self {
13710        skip_assert_initialized!();
13711        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13712    }
13713}
13714
13715#[allow(deprecated)]
13716impl ToValue for TreeViewColumnSizing {
13717    #[inline]
13718    fn to_value(&self) -> glib::Value {
13719        let mut value = glib::Value::for_value_type::<Self>();
13720        unsafe {
13721            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13722        }
13723        value
13724    }
13725
13726    #[inline]
13727    fn value_type(&self) -> glib::Type {
13728        Self::static_type()
13729    }
13730}
13731
13732#[allow(deprecated)]
13733impl From<TreeViewColumnSizing> for glib::Value {
13734    #[inline]
13735    fn from(v: TreeViewColumnSizing) -> Self {
13736        skip_assert_initialized!();
13737        ToValue::to_value(&v)
13738    }
13739}
13740
13741/// An enum for determining where a dropped row goes.
13742///
13743/// # Deprecated since 4.20
13744///
13745/// There is no replacement.
13746#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
13747#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13748#[non_exhaustive]
13749#[doc(alias = "GtkTreeViewDropPosition")]
13750pub enum TreeViewDropPosition {
13751    /// dropped row is inserted before
13752    #[doc(alias = "GTK_TREE_VIEW_DROP_BEFORE")]
13753    Before,
13754    /// dropped row is inserted after
13755    #[doc(alias = "GTK_TREE_VIEW_DROP_AFTER")]
13756    After,
13757    /// dropped row becomes a child or is inserted before
13758    #[doc(alias = "GTK_TREE_VIEW_DROP_INTO_OR_BEFORE")]
13759    IntoOrBefore,
13760    /// dropped row becomes a child or is inserted after
13761    #[doc(alias = "GTK_TREE_VIEW_DROP_INTO_OR_AFTER")]
13762    IntoOrAfter,
13763    #[doc(hidden)]
13764    __Unknown(i32),
13765}
13766
13767#[allow(deprecated)]
13768#[doc(hidden)]
13769impl IntoGlib for TreeViewDropPosition {
13770    type GlibType = ffi::GtkTreeViewDropPosition;
13771
13772    #[inline]
13773    fn into_glib(self) -> ffi::GtkTreeViewDropPosition {
13774        match self {
13775            Self::Before => ffi::GTK_TREE_VIEW_DROP_BEFORE,
13776            Self::After => ffi::GTK_TREE_VIEW_DROP_AFTER,
13777            Self::IntoOrBefore => ffi::GTK_TREE_VIEW_DROP_INTO_OR_BEFORE,
13778            Self::IntoOrAfter => ffi::GTK_TREE_VIEW_DROP_INTO_OR_AFTER,
13779            Self::__Unknown(value) => value,
13780        }
13781    }
13782}
13783
13784#[allow(deprecated)]
13785#[doc(hidden)]
13786impl FromGlib<ffi::GtkTreeViewDropPosition> for TreeViewDropPosition {
13787    #[inline]
13788    unsafe fn from_glib(value: ffi::GtkTreeViewDropPosition) -> Self {
13789        skip_assert_initialized!();
13790
13791        match value {
13792            ffi::GTK_TREE_VIEW_DROP_BEFORE => Self::Before,
13793            ffi::GTK_TREE_VIEW_DROP_AFTER => Self::After,
13794            ffi::GTK_TREE_VIEW_DROP_INTO_OR_BEFORE => Self::IntoOrBefore,
13795            ffi::GTK_TREE_VIEW_DROP_INTO_OR_AFTER => Self::IntoOrAfter,
13796            value => Self::__Unknown(value),
13797        }
13798    }
13799}
13800
13801#[allow(deprecated)]
13802impl StaticType for TreeViewDropPosition {
13803    #[inline]
13804    #[doc(alias = "gtk_tree_view_drop_position_get_type")]
13805    fn static_type() -> glib::Type {
13806        unsafe { from_glib(ffi::gtk_tree_view_drop_position_get_type()) }
13807    }
13808}
13809
13810#[allow(deprecated)]
13811impl glib::HasParamSpec for TreeViewDropPosition {
13812    type ParamSpec = glib::ParamSpecEnum;
13813    type SetValue = Self;
13814    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13815
13816    fn param_spec_builder() -> Self::BuilderFn {
13817        Self::ParamSpec::builder_with_default
13818    }
13819}
13820
13821#[allow(deprecated)]
13822impl glib::value::ValueType for TreeViewDropPosition {
13823    type Type = Self;
13824}
13825
13826#[allow(deprecated)]
13827unsafe impl<'a> glib::value::FromValue<'a> for TreeViewDropPosition {
13828    type Checker = glib::value::GenericValueTypeChecker<Self>;
13829
13830    #[inline]
13831    unsafe fn from_value(value: &'a glib::Value) -> Self {
13832        skip_assert_initialized!();
13833        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13834    }
13835}
13836
13837#[allow(deprecated)]
13838impl ToValue for TreeViewDropPosition {
13839    #[inline]
13840    fn to_value(&self) -> glib::Value {
13841        let mut value = glib::Value::for_value_type::<Self>();
13842        unsafe {
13843            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13844        }
13845        value
13846    }
13847
13848    #[inline]
13849    fn value_type(&self) -> glib::Type {
13850        Self::static_type()
13851    }
13852}
13853
13854#[allow(deprecated)]
13855impl From<TreeViewDropPosition> for glib::Value {
13856    #[inline]
13857    fn from(v: TreeViewDropPosition) -> Self {
13858        skip_assert_initialized!();
13859        ToValue::to_value(&v)
13860    }
13861}
13862
13863/// Used to indicate which grid lines to draw in a tree view.
13864///
13865/// # Deprecated since 4.20
13866///
13867/// There is no replacement
13868#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
13869#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13870#[non_exhaustive]
13871#[doc(alias = "GtkTreeViewGridLines")]
13872pub enum TreeViewGridLines {
13873    /// No grid lines.
13874    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_NONE")]
13875    None,
13876    /// Horizontal grid lines.
13877    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_HORIZONTAL")]
13878    Horizontal,
13879    /// Vertical grid lines.
13880    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_VERTICAL")]
13881    Vertical,
13882    /// Horizontal and vertical grid lines.
13883    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_BOTH")]
13884    Both,
13885    #[doc(hidden)]
13886    __Unknown(i32),
13887}
13888
13889#[allow(deprecated)]
13890#[doc(hidden)]
13891impl IntoGlib for TreeViewGridLines {
13892    type GlibType = ffi::GtkTreeViewGridLines;
13893
13894    #[inline]
13895    fn into_glib(self) -> ffi::GtkTreeViewGridLines {
13896        match self {
13897            Self::None => ffi::GTK_TREE_VIEW_GRID_LINES_NONE,
13898            Self::Horizontal => ffi::GTK_TREE_VIEW_GRID_LINES_HORIZONTAL,
13899            Self::Vertical => ffi::GTK_TREE_VIEW_GRID_LINES_VERTICAL,
13900            Self::Both => ffi::GTK_TREE_VIEW_GRID_LINES_BOTH,
13901            Self::__Unknown(value) => value,
13902        }
13903    }
13904}
13905
13906#[allow(deprecated)]
13907#[doc(hidden)]
13908impl FromGlib<ffi::GtkTreeViewGridLines> for TreeViewGridLines {
13909    #[inline]
13910    unsafe fn from_glib(value: ffi::GtkTreeViewGridLines) -> Self {
13911        skip_assert_initialized!();
13912
13913        match value {
13914            ffi::GTK_TREE_VIEW_GRID_LINES_NONE => Self::None,
13915            ffi::GTK_TREE_VIEW_GRID_LINES_HORIZONTAL => Self::Horizontal,
13916            ffi::GTK_TREE_VIEW_GRID_LINES_VERTICAL => Self::Vertical,
13917            ffi::GTK_TREE_VIEW_GRID_LINES_BOTH => Self::Both,
13918            value => Self::__Unknown(value),
13919        }
13920    }
13921}
13922
13923#[allow(deprecated)]
13924impl StaticType for TreeViewGridLines {
13925    #[inline]
13926    #[doc(alias = "gtk_tree_view_grid_lines_get_type")]
13927    fn static_type() -> glib::Type {
13928        unsafe { from_glib(ffi::gtk_tree_view_grid_lines_get_type()) }
13929    }
13930}
13931
13932#[allow(deprecated)]
13933impl glib::HasParamSpec for TreeViewGridLines {
13934    type ParamSpec = glib::ParamSpecEnum;
13935    type SetValue = Self;
13936    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13937
13938    fn param_spec_builder() -> Self::BuilderFn {
13939        Self::ParamSpec::builder_with_default
13940    }
13941}
13942
13943#[allow(deprecated)]
13944impl glib::value::ValueType for TreeViewGridLines {
13945    type Type = Self;
13946}
13947
13948#[allow(deprecated)]
13949unsafe impl<'a> glib::value::FromValue<'a> for TreeViewGridLines {
13950    type Checker = glib::value::GenericValueTypeChecker<Self>;
13951
13952    #[inline]
13953    unsafe fn from_value(value: &'a glib::Value) -> Self {
13954        skip_assert_initialized!();
13955        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13956    }
13957}
13958
13959#[allow(deprecated)]
13960impl ToValue for TreeViewGridLines {
13961    #[inline]
13962    fn to_value(&self) -> glib::Value {
13963        let mut value = glib::Value::for_value_type::<Self>();
13964        unsafe {
13965            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13966        }
13967        value
13968    }
13969
13970    #[inline]
13971    fn value_type(&self) -> glib::Type {
13972        Self::static_type()
13973    }
13974}
13975
13976#[allow(deprecated)]
13977impl From<TreeViewGridLines> for glib::Value {
13978    #[inline]
13979    fn from(v: TreeViewGridLines) -> Self {
13980        skip_assert_initialized!();
13981        ToValue::to_value(&v)
13982    }
13983}
13984
13985/// See also gtk_print_settings_set_paper_width().
13986#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13987#[non_exhaustive]
13988#[doc(alias = "GtkUnit")]
13989pub enum Unit {
13990    /// No units.
13991    #[doc(alias = "GTK_UNIT_NONE")]
13992    None,
13993    /// Dimensions in points.
13994    #[doc(alias = "GTK_UNIT_POINTS")]
13995    Points,
13996    /// Dimensions in inches.
13997    #[doc(alias = "GTK_UNIT_INCH")]
13998    Inch,
13999    /// Dimensions in millimeters
14000    #[doc(alias = "GTK_UNIT_MM")]
14001    Mm,
14002    #[doc(hidden)]
14003    __Unknown(i32),
14004}
14005
14006#[doc(hidden)]
14007impl IntoGlib for Unit {
14008    type GlibType = ffi::GtkUnit;
14009
14010    #[inline]
14011    fn into_glib(self) -> ffi::GtkUnit {
14012        match self {
14013            Self::None => ffi::GTK_UNIT_NONE,
14014            Self::Points => ffi::GTK_UNIT_POINTS,
14015            Self::Inch => ffi::GTK_UNIT_INCH,
14016            Self::Mm => ffi::GTK_UNIT_MM,
14017            Self::__Unknown(value) => value,
14018        }
14019    }
14020}
14021
14022#[doc(hidden)]
14023impl FromGlib<ffi::GtkUnit> for Unit {
14024    #[inline]
14025    unsafe fn from_glib(value: ffi::GtkUnit) -> Self {
14026        skip_assert_initialized!();
14027
14028        match value {
14029            ffi::GTK_UNIT_NONE => Self::None,
14030            ffi::GTK_UNIT_POINTS => Self::Points,
14031            ffi::GTK_UNIT_INCH => Self::Inch,
14032            ffi::GTK_UNIT_MM => Self::Mm,
14033            value => Self::__Unknown(value),
14034        }
14035    }
14036}
14037
14038impl StaticType for Unit {
14039    #[inline]
14040    #[doc(alias = "gtk_unit_get_type")]
14041    fn static_type() -> glib::Type {
14042        unsafe { from_glib(ffi::gtk_unit_get_type()) }
14043    }
14044}
14045
14046impl glib::HasParamSpec for Unit {
14047    type ParamSpec = glib::ParamSpecEnum;
14048    type SetValue = Self;
14049    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14050
14051    fn param_spec_builder() -> Self::BuilderFn {
14052        Self::ParamSpec::builder_with_default
14053    }
14054}
14055
14056impl glib::value::ValueType for Unit {
14057    type Type = Self;
14058}
14059
14060unsafe impl<'a> glib::value::FromValue<'a> for Unit {
14061    type Checker = glib::value::GenericValueTypeChecker<Self>;
14062
14063    #[inline]
14064    unsafe fn from_value(value: &'a glib::Value) -> Self {
14065        skip_assert_initialized!();
14066        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14067    }
14068}
14069
14070impl ToValue for Unit {
14071    #[inline]
14072    fn to_value(&self) -> glib::Value {
14073        let mut value = glib::Value::for_value_type::<Self>();
14074        unsafe {
14075            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14076        }
14077        value
14078    }
14079
14080    #[inline]
14081    fn value_type(&self) -> glib::Type {
14082        Self::static_type()
14083    }
14084}
14085
14086impl From<Unit> for glib::Value {
14087    #[inline]
14088    fn from(v: Unit) -> Self {
14089        skip_assert_initialized!();
14090        ToValue::to_value(&v)
14091    }
14092}
14093
14094/// Determines which point or edge of a window is meant to remain fixed
14095/// when a window changes size.
14096#[cfg(feature = "v4_20")]
14097#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14098#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
14099#[non_exhaustive]
14100#[doc(alias = "GtkWindowGravity")]
14101pub enum WindowGravity {
14102    /// The top left corner
14103    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_LEFT")]
14104    TopLeft,
14105    /// The top edge
14106    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP")]
14107    Top,
14108    /// The top right corner
14109    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_RIGHT")]
14110    TopRight,
14111    /// The left edge
14112    #[doc(alias = "GTK_WINDOW_GRAVITY_LEFT")]
14113    Left,
14114    /// The center pointer
14115    #[doc(alias = "GTK_WINDOW_GRAVITY_CENTER")]
14116    Center,
14117    /// The right edge
14118    #[doc(alias = "GTK_WINDOW_GRAVITY_RIGHT")]
14119    Right,
14120    /// The bottom left corner
14121    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_LEFT")]
14122    BottomLeft,
14123    /// the bottom edge
14124    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM")]
14125    Bottom,
14126    /// The bottom right corner
14127    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_RIGHT")]
14128    BottomRight,
14129    /// The top left or top right corner,
14130    ///   depending on the text direction
14131    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_START")]
14132    TopStart,
14133    /// The top right or top left corner,
14134    ///   depending on the text direction
14135    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_END")]
14136    TopEnd,
14137    /// The left or right edge,
14138    ///   depending on the text direction
14139    #[doc(alias = "GTK_WINDOW_GRAVITY_START")]
14140    Start,
14141    /// The right or left edge,
14142    ///   depending on the text direction
14143    #[doc(alias = "GTK_WINDOW_GRAVITY_END")]
14144    End,
14145    /// The bottom left or top right corner,
14146    ///   depending on the text direction
14147    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_START")]
14148    BottomStart,
14149    /// The bottom right or top left corner,
14150    ///   depending on the text direction
14151    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_END")]
14152    BottomEnd,
14153    #[doc(hidden)]
14154    __Unknown(i32),
14155}
14156
14157#[cfg(feature = "v4_20")]
14158#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14159#[doc(hidden)]
14160impl IntoGlib for WindowGravity {
14161    type GlibType = ffi::GtkWindowGravity;
14162
14163    fn into_glib(self) -> ffi::GtkWindowGravity {
14164        match self {
14165            Self::TopLeft => ffi::GTK_WINDOW_GRAVITY_TOP_LEFT,
14166            Self::Top => ffi::GTK_WINDOW_GRAVITY_TOP,
14167            Self::TopRight => ffi::GTK_WINDOW_GRAVITY_TOP_RIGHT,
14168            Self::Left => ffi::GTK_WINDOW_GRAVITY_LEFT,
14169            Self::Center => ffi::GTK_WINDOW_GRAVITY_CENTER,
14170            Self::Right => ffi::GTK_WINDOW_GRAVITY_RIGHT,
14171            Self::BottomLeft => ffi::GTK_WINDOW_GRAVITY_BOTTOM_LEFT,
14172            Self::Bottom => ffi::GTK_WINDOW_GRAVITY_BOTTOM,
14173            Self::BottomRight => ffi::GTK_WINDOW_GRAVITY_BOTTOM_RIGHT,
14174            Self::TopStart => ffi::GTK_WINDOW_GRAVITY_TOP_START,
14175            Self::TopEnd => ffi::GTK_WINDOW_GRAVITY_TOP_END,
14176            Self::Start => ffi::GTK_WINDOW_GRAVITY_START,
14177            Self::End => ffi::GTK_WINDOW_GRAVITY_END,
14178            Self::BottomStart => ffi::GTK_WINDOW_GRAVITY_BOTTOM_START,
14179            Self::BottomEnd => ffi::GTK_WINDOW_GRAVITY_BOTTOM_END,
14180            Self::__Unknown(value) => value,
14181        }
14182    }
14183}
14184
14185#[cfg(feature = "v4_20")]
14186#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14187#[doc(hidden)]
14188impl FromGlib<ffi::GtkWindowGravity> for WindowGravity {
14189    unsafe fn from_glib(value: ffi::GtkWindowGravity) -> Self {
14190        skip_assert_initialized!();
14191
14192        match value {
14193            ffi::GTK_WINDOW_GRAVITY_TOP_LEFT => Self::TopLeft,
14194            ffi::GTK_WINDOW_GRAVITY_TOP => Self::Top,
14195            ffi::GTK_WINDOW_GRAVITY_TOP_RIGHT => Self::TopRight,
14196            ffi::GTK_WINDOW_GRAVITY_LEFT => Self::Left,
14197            ffi::GTK_WINDOW_GRAVITY_CENTER => Self::Center,
14198            ffi::GTK_WINDOW_GRAVITY_RIGHT => Self::Right,
14199            ffi::GTK_WINDOW_GRAVITY_BOTTOM_LEFT => Self::BottomLeft,
14200            ffi::GTK_WINDOW_GRAVITY_BOTTOM => Self::Bottom,
14201            ffi::GTK_WINDOW_GRAVITY_BOTTOM_RIGHT => Self::BottomRight,
14202            ffi::GTK_WINDOW_GRAVITY_TOP_START => Self::TopStart,
14203            ffi::GTK_WINDOW_GRAVITY_TOP_END => Self::TopEnd,
14204            ffi::GTK_WINDOW_GRAVITY_START => Self::Start,
14205            ffi::GTK_WINDOW_GRAVITY_END => Self::End,
14206            ffi::GTK_WINDOW_GRAVITY_BOTTOM_START => Self::BottomStart,
14207            ffi::GTK_WINDOW_GRAVITY_BOTTOM_END => Self::BottomEnd,
14208            value => Self::__Unknown(value),
14209        }
14210    }
14211}
14212
14213#[cfg(feature = "v4_20")]
14214#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14215impl StaticType for WindowGravity {
14216    #[inline]
14217    #[doc(alias = "gtk_window_gravity_get_type")]
14218    fn static_type() -> glib::Type {
14219        unsafe { from_glib(ffi::gtk_window_gravity_get_type()) }
14220    }
14221}
14222
14223#[cfg(feature = "v4_20")]
14224#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14225impl glib::HasParamSpec for WindowGravity {
14226    type ParamSpec = glib::ParamSpecEnum;
14227    type SetValue = Self;
14228    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14229
14230    fn param_spec_builder() -> Self::BuilderFn {
14231        Self::ParamSpec::builder_with_default
14232    }
14233}
14234
14235#[cfg(feature = "v4_20")]
14236#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14237impl glib::value::ValueType for WindowGravity {
14238    type Type = Self;
14239}
14240
14241#[cfg(feature = "v4_20")]
14242#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14243unsafe impl<'a> glib::value::FromValue<'a> for WindowGravity {
14244    type Checker = glib::value::GenericValueTypeChecker<Self>;
14245
14246    #[inline]
14247    unsafe fn from_value(value: &'a glib::Value) -> Self {
14248        skip_assert_initialized!();
14249        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14250    }
14251}
14252
14253#[cfg(feature = "v4_20")]
14254#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14255impl ToValue for WindowGravity {
14256    #[inline]
14257    fn to_value(&self) -> glib::Value {
14258        let mut value = glib::Value::for_value_type::<Self>();
14259        unsafe {
14260            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14261        }
14262        value
14263    }
14264
14265    #[inline]
14266    fn value_type(&self) -> glib::Type {
14267        Self::static_type()
14268    }
14269}
14270
14271#[cfg(feature = "v4_20")]
14272#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14273impl From<WindowGravity> for glib::Value {
14274    #[inline]
14275    fn from(v: WindowGravity) -> Self {
14276        skip_assert_initialized!();
14277        ToValue::to_value(&v)
14278    }
14279}
14280
14281/// Describes a type of line wrapping.
14282#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
14283#[non_exhaustive]
14284#[doc(alias = "GtkWrapMode")]
14285pub enum WrapMode {
14286    /// do not wrap lines; just make the text area wider
14287    #[doc(alias = "GTK_WRAP_NONE")]
14288    None,
14289    /// wrap text, breaking lines anywhere the cursor can
14290    ///   appear (between characters, usually - if you want to be technical,
14291    ///   between graphemes, see pango_get_log_attrs())
14292    #[doc(alias = "GTK_WRAP_CHAR")]
14293    Char,
14294    /// wrap text, breaking lines in between words
14295    #[doc(alias = "GTK_WRAP_WORD")]
14296    Word,
14297    /// wrap text, breaking lines in between words, or if
14298    ///   that is not enough, also between graphemes
14299    #[doc(alias = "GTK_WRAP_WORD_CHAR")]
14300    WordChar,
14301    #[doc(hidden)]
14302    __Unknown(i32),
14303}
14304
14305#[doc(hidden)]
14306impl IntoGlib for WrapMode {
14307    type GlibType = ffi::GtkWrapMode;
14308
14309    #[inline]
14310    fn into_glib(self) -> ffi::GtkWrapMode {
14311        match self {
14312            Self::None => ffi::GTK_WRAP_NONE,
14313            Self::Char => ffi::GTK_WRAP_CHAR,
14314            Self::Word => ffi::GTK_WRAP_WORD,
14315            Self::WordChar => ffi::GTK_WRAP_WORD_CHAR,
14316            Self::__Unknown(value) => value,
14317        }
14318    }
14319}
14320
14321#[doc(hidden)]
14322impl FromGlib<ffi::GtkWrapMode> for WrapMode {
14323    #[inline]
14324    unsafe fn from_glib(value: ffi::GtkWrapMode) -> Self {
14325        skip_assert_initialized!();
14326
14327        match value {
14328            ffi::GTK_WRAP_NONE => Self::None,
14329            ffi::GTK_WRAP_CHAR => Self::Char,
14330            ffi::GTK_WRAP_WORD => Self::Word,
14331            ffi::GTK_WRAP_WORD_CHAR => Self::WordChar,
14332            value => Self::__Unknown(value),
14333        }
14334    }
14335}
14336
14337impl StaticType for WrapMode {
14338    #[inline]
14339    #[doc(alias = "gtk_wrap_mode_get_type")]
14340    fn static_type() -> glib::Type {
14341        unsafe { from_glib(ffi::gtk_wrap_mode_get_type()) }
14342    }
14343}
14344
14345impl glib::HasParamSpec for WrapMode {
14346    type ParamSpec = glib::ParamSpecEnum;
14347    type SetValue = Self;
14348    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14349
14350    fn param_spec_builder() -> Self::BuilderFn {
14351        Self::ParamSpec::builder_with_default
14352    }
14353}
14354
14355impl glib::value::ValueType for WrapMode {
14356    type Type = Self;
14357}
14358
14359unsafe impl<'a> glib::value::FromValue<'a> for WrapMode {
14360    type Checker = glib::value::GenericValueTypeChecker<Self>;
14361
14362    #[inline]
14363    unsafe fn from_value(value: &'a glib::Value) -> Self {
14364        skip_assert_initialized!();
14365        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14366    }
14367}
14368
14369impl ToValue for WrapMode {
14370    #[inline]
14371    fn to_value(&self) -> glib::Value {
14372        let mut value = glib::Value::for_value_type::<Self>();
14373        unsafe {
14374            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14375        }
14376        value
14377    }
14378
14379    #[inline]
14380    fn value_type(&self) -> glib::Type {
14381        Self::static_type()
14382    }
14383}
14384
14385impl From<WrapMode> for glib::Value {
14386    #[inline]
14387    fn from(v: WrapMode) -> Self {
14388        skip_assert_initialized!();
14389        ToValue::to_value(&v)
14390    }
14391}