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 number of properties
4780    #[doc(alias = "GTK_EDITABLE_NUM_PROPERTIES")]
4781    NumProperties,
4782    #[doc(hidden)]
4783    __Unknown(i32),
4784}
4785
4786#[doc(hidden)]
4787impl IntoGlib for EditableProperties {
4788    type GlibType = ffi::GtkEditableProperties;
4789
4790    #[inline]
4791    fn into_glib(self) -> ffi::GtkEditableProperties {
4792        match self {
4793            Self::PropText => ffi::GTK_EDITABLE_PROP_TEXT,
4794            Self::PropCursorPosition => ffi::GTK_EDITABLE_PROP_CURSOR_POSITION,
4795            Self::PropSelectionBound => ffi::GTK_EDITABLE_PROP_SELECTION_BOUND,
4796            Self::PropEditable => ffi::GTK_EDITABLE_PROP_EDITABLE,
4797            Self::PropWidthChars => ffi::GTK_EDITABLE_PROP_WIDTH_CHARS,
4798            Self::PropMaxWidthChars => ffi::GTK_EDITABLE_PROP_MAX_WIDTH_CHARS,
4799            Self::PropXalign => ffi::GTK_EDITABLE_PROP_XALIGN,
4800            Self::PropEnableUndo => ffi::GTK_EDITABLE_PROP_ENABLE_UNDO,
4801            Self::PropCompleteText => ffi::GTK_EDITABLE_PROP_COMPLETE_TEXT,
4802            Self::NumProperties => ffi::GTK_EDITABLE_NUM_PROPERTIES,
4803            Self::__Unknown(value) => value,
4804        }
4805    }
4806}
4807
4808#[doc(hidden)]
4809impl FromGlib<ffi::GtkEditableProperties> for EditableProperties {
4810    #[inline]
4811    unsafe fn from_glib(value: ffi::GtkEditableProperties) -> Self {
4812        skip_assert_initialized!();
4813
4814        match value {
4815            ffi::GTK_EDITABLE_PROP_TEXT => Self::PropText,
4816            ffi::GTK_EDITABLE_PROP_CURSOR_POSITION => Self::PropCursorPosition,
4817            ffi::GTK_EDITABLE_PROP_SELECTION_BOUND => Self::PropSelectionBound,
4818            ffi::GTK_EDITABLE_PROP_EDITABLE => Self::PropEditable,
4819            ffi::GTK_EDITABLE_PROP_WIDTH_CHARS => Self::PropWidthChars,
4820            ffi::GTK_EDITABLE_PROP_MAX_WIDTH_CHARS => Self::PropMaxWidthChars,
4821            ffi::GTK_EDITABLE_PROP_XALIGN => Self::PropXalign,
4822            ffi::GTK_EDITABLE_PROP_ENABLE_UNDO => Self::PropEnableUndo,
4823            ffi::GTK_EDITABLE_PROP_COMPLETE_TEXT => Self::PropCompleteText,
4824            ffi::GTK_EDITABLE_NUM_PROPERTIES => Self::NumProperties,
4825            value => Self::__Unknown(value),
4826        }
4827    }
4828}
4829
4830impl StaticType for EditableProperties {
4831    #[inline]
4832    #[doc(alias = "gtk_editable_properties_get_type")]
4833    fn static_type() -> glib::Type {
4834        unsafe { from_glib(ffi::gtk_editable_properties_get_type()) }
4835    }
4836}
4837
4838impl glib::HasParamSpec for EditableProperties {
4839    type ParamSpec = glib::ParamSpecEnum;
4840    type SetValue = Self;
4841    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4842
4843    fn param_spec_builder() -> Self::BuilderFn {
4844        Self::ParamSpec::builder_with_default
4845    }
4846}
4847
4848impl glib::value::ValueType for EditableProperties {
4849    type Type = Self;
4850}
4851
4852unsafe impl<'a> glib::value::FromValue<'a> for EditableProperties {
4853    type Checker = glib::value::GenericValueTypeChecker<Self>;
4854
4855    #[inline]
4856    unsafe fn from_value(value: &'a glib::Value) -> Self {
4857        skip_assert_initialized!();
4858        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4859    }
4860}
4861
4862impl ToValue for EditableProperties {
4863    #[inline]
4864    fn to_value(&self) -> glib::Value {
4865        let mut value = glib::Value::for_value_type::<Self>();
4866        unsafe {
4867            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4868        }
4869        value
4870    }
4871
4872    #[inline]
4873    fn value_type(&self) -> glib::Type {
4874        Self::static_type()
4875    }
4876}
4877
4878impl From<EditableProperties> for glib::Value {
4879    #[inline]
4880    fn from(v: EditableProperties) -> Self {
4881        skip_assert_initialized!();
4882        ToValue::to_value(&v)
4883    }
4884}
4885
4886/// Specifies the side of the entry at which an icon is placed.
4887#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4888#[non_exhaustive]
4889#[doc(alias = "GtkEntryIconPosition")]
4890pub enum EntryIconPosition {
4891    /// At the beginning of the entry (depending on the text direction).
4892    #[doc(alias = "GTK_ENTRY_ICON_PRIMARY")]
4893    Primary,
4894    /// At the end of the entry (depending on the text direction).
4895    #[doc(alias = "GTK_ENTRY_ICON_SECONDARY")]
4896    Secondary,
4897    #[doc(hidden)]
4898    __Unknown(i32),
4899}
4900
4901#[doc(hidden)]
4902impl IntoGlib for EntryIconPosition {
4903    type GlibType = ffi::GtkEntryIconPosition;
4904
4905    #[inline]
4906    fn into_glib(self) -> ffi::GtkEntryIconPosition {
4907        match self {
4908            Self::Primary => ffi::GTK_ENTRY_ICON_PRIMARY,
4909            Self::Secondary => ffi::GTK_ENTRY_ICON_SECONDARY,
4910            Self::__Unknown(value) => value,
4911        }
4912    }
4913}
4914
4915#[doc(hidden)]
4916impl FromGlib<ffi::GtkEntryIconPosition> for EntryIconPosition {
4917    #[inline]
4918    unsafe fn from_glib(value: ffi::GtkEntryIconPosition) -> Self {
4919        skip_assert_initialized!();
4920
4921        match value {
4922            ffi::GTK_ENTRY_ICON_PRIMARY => Self::Primary,
4923            ffi::GTK_ENTRY_ICON_SECONDARY => Self::Secondary,
4924            value => Self::__Unknown(value),
4925        }
4926    }
4927}
4928
4929impl StaticType for EntryIconPosition {
4930    #[inline]
4931    #[doc(alias = "gtk_entry_icon_position_get_type")]
4932    fn static_type() -> glib::Type {
4933        unsafe { from_glib(ffi::gtk_entry_icon_position_get_type()) }
4934    }
4935}
4936
4937impl glib::HasParamSpec for EntryIconPosition {
4938    type ParamSpec = glib::ParamSpecEnum;
4939    type SetValue = Self;
4940    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
4941
4942    fn param_spec_builder() -> Self::BuilderFn {
4943        Self::ParamSpec::builder_with_default
4944    }
4945}
4946
4947impl glib::value::ValueType for EntryIconPosition {
4948    type Type = Self;
4949}
4950
4951unsafe impl<'a> glib::value::FromValue<'a> for EntryIconPosition {
4952    type Checker = glib::value::GenericValueTypeChecker<Self>;
4953
4954    #[inline]
4955    unsafe fn from_value(value: &'a glib::Value) -> Self {
4956        skip_assert_initialized!();
4957        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
4958    }
4959}
4960
4961impl ToValue for EntryIconPosition {
4962    #[inline]
4963    fn to_value(&self) -> glib::Value {
4964        let mut value = glib::Value::for_value_type::<Self>();
4965        unsafe {
4966            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
4967        }
4968        value
4969    }
4970
4971    #[inline]
4972    fn value_type(&self) -> glib::Type {
4973        Self::static_type()
4974    }
4975}
4976
4977impl From<EntryIconPosition> for glib::Value {
4978    #[inline]
4979    fn from(v: EntryIconPosition) -> Self {
4980        skip_assert_initialized!();
4981        ToValue::to_value(&v)
4982    }
4983}
4984
4985/// Describes the state of a [`gdk::EventSequence`][crate::gdk::EventSequence] in a [`Gesture`][crate::Gesture].
4986#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
4987#[non_exhaustive]
4988#[doc(alias = "GtkEventSequenceState")]
4989pub enum EventSequenceState {
4990    /// The sequence is handled, but not grabbed.
4991    #[doc(alias = "GTK_EVENT_SEQUENCE_NONE")]
4992    None,
4993    /// The sequence is handled and grabbed.
4994    #[doc(alias = "GTK_EVENT_SEQUENCE_CLAIMED")]
4995    Claimed,
4996    /// The sequence is denied.
4997    #[doc(alias = "GTK_EVENT_SEQUENCE_DENIED")]
4998    Denied,
4999    #[doc(hidden)]
5000    __Unknown(i32),
5001}
5002
5003#[doc(hidden)]
5004impl IntoGlib for EventSequenceState {
5005    type GlibType = ffi::GtkEventSequenceState;
5006
5007    #[inline]
5008    fn into_glib(self) -> ffi::GtkEventSequenceState {
5009        match self {
5010            Self::None => ffi::GTK_EVENT_SEQUENCE_NONE,
5011            Self::Claimed => ffi::GTK_EVENT_SEQUENCE_CLAIMED,
5012            Self::Denied => ffi::GTK_EVENT_SEQUENCE_DENIED,
5013            Self::__Unknown(value) => value,
5014        }
5015    }
5016}
5017
5018#[doc(hidden)]
5019impl FromGlib<ffi::GtkEventSequenceState> for EventSequenceState {
5020    #[inline]
5021    unsafe fn from_glib(value: ffi::GtkEventSequenceState) -> Self {
5022        skip_assert_initialized!();
5023
5024        match value {
5025            ffi::GTK_EVENT_SEQUENCE_NONE => Self::None,
5026            ffi::GTK_EVENT_SEQUENCE_CLAIMED => Self::Claimed,
5027            ffi::GTK_EVENT_SEQUENCE_DENIED => Self::Denied,
5028            value => Self::__Unknown(value),
5029        }
5030    }
5031}
5032
5033impl StaticType for EventSequenceState {
5034    #[inline]
5035    #[doc(alias = "gtk_event_sequence_state_get_type")]
5036    fn static_type() -> glib::Type {
5037        unsafe { from_glib(ffi::gtk_event_sequence_state_get_type()) }
5038    }
5039}
5040
5041impl glib::HasParamSpec for EventSequenceState {
5042    type ParamSpec = glib::ParamSpecEnum;
5043    type SetValue = Self;
5044    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5045
5046    fn param_spec_builder() -> Self::BuilderFn {
5047        Self::ParamSpec::builder_with_default
5048    }
5049}
5050
5051impl glib::value::ValueType for EventSequenceState {
5052    type Type = Self;
5053}
5054
5055unsafe impl<'a> glib::value::FromValue<'a> for EventSequenceState {
5056    type Checker = glib::value::GenericValueTypeChecker<Self>;
5057
5058    #[inline]
5059    unsafe fn from_value(value: &'a glib::Value) -> Self {
5060        skip_assert_initialized!();
5061        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5062    }
5063}
5064
5065impl ToValue for EventSequenceState {
5066    #[inline]
5067    fn to_value(&self) -> glib::Value {
5068        let mut value = glib::Value::for_value_type::<Self>();
5069        unsafe {
5070            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5071        }
5072        value
5073    }
5074
5075    #[inline]
5076    fn value_type(&self) -> glib::Type {
5077        Self::static_type()
5078    }
5079}
5080
5081impl From<EventSequenceState> for glib::Value {
5082    #[inline]
5083    fn from(v: EventSequenceState) -> Self {
5084        skip_assert_initialized!();
5085        ToValue::to_value(&v)
5086    }
5087}
5088
5089/// Describes whether a [`FileChooser`][crate::FileChooser] is being used to open existing files
5090/// or to save to a possibly new file.
5091#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5092#[non_exhaustive]
5093#[doc(alias = "GtkFileChooserAction")]
5094pub enum FileChooserAction {
5095    /// Indicates open mode.  The file chooser
5096    ///  will only let the user pick an existing file.
5097    #[doc(alias = "GTK_FILE_CHOOSER_ACTION_OPEN")]
5098    Open,
5099    /// Indicates save mode.  The file chooser
5100    ///  will let the user pick an existing file, or type in a new
5101    ///  filename.
5102    #[doc(alias = "GTK_FILE_CHOOSER_ACTION_SAVE")]
5103    Save,
5104    /// Indicates an Open mode for
5105    ///  selecting folders.  The file chooser will let the user pick an
5106    ///  existing folder.
5107    #[doc(alias = "GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER")]
5108    SelectFolder,
5109    #[doc(hidden)]
5110    __Unknown(i32),
5111}
5112
5113#[doc(hidden)]
5114impl IntoGlib for FileChooserAction {
5115    type GlibType = ffi::GtkFileChooserAction;
5116
5117    #[inline]
5118    fn into_glib(self) -> ffi::GtkFileChooserAction {
5119        match self {
5120            Self::Open => ffi::GTK_FILE_CHOOSER_ACTION_OPEN,
5121            Self::Save => ffi::GTK_FILE_CHOOSER_ACTION_SAVE,
5122            Self::SelectFolder => ffi::GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
5123            Self::__Unknown(value) => value,
5124        }
5125    }
5126}
5127
5128#[doc(hidden)]
5129impl FromGlib<ffi::GtkFileChooserAction> for FileChooserAction {
5130    #[inline]
5131    unsafe fn from_glib(value: ffi::GtkFileChooserAction) -> Self {
5132        skip_assert_initialized!();
5133
5134        match value {
5135            ffi::GTK_FILE_CHOOSER_ACTION_OPEN => Self::Open,
5136            ffi::GTK_FILE_CHOOSER_ACTION_SAVE => Self::Save,
5137            ffi::GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER => Self::SelectFolder,
5138            value => Self::__Unknown(value),
5139        }
5140    }
5141}
5142
5143impl StaticType for FileChooserAction {
5144    #[inline]
5145    #[doc(alias = "gtk_file_chooser_action_get_type")]
5146    fn static_type() -> glib::Type {
5147        unsafe { from_glib(ffi::gtk_file_chooser_action_get_type()) }
5148    }
5149}
5150
5151impl glib::HasParamSpec for FileChooserAction {
5152    type ParamSpec = glib::ParamSpecEnum;
5153    type SetValue = Self;
5154    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5155
5156    fn param_spec_builder() -> Self::BuilderFn {
5157        Self::ParamSpec::builder_with_default
5158    }
5159}
5160
5161impl glib::value::ValueType for FileChooserAction {
5162    type Type = Self;
5163}
5164
5165unsafe impl<'a> glib::value::FromValue<'a> for FileChooserAction {
5166    type Checker = glib::value::GenericValueTypeChecker<Self>;
5167
5168    #[inline]
5169    unsafe fn from_value(value: &'a glib::Value) -> Self {
5170        skip_assert_initialized!();
5171        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5172    }
5173}
5174
5175impl ToValue for FileChooserAction {
5176    #[inline]
5177    fn to_value(&self) -> glib::Value {
5178        let mut value = glib::Value::for_value_type::<Self>();
5179        unsafe {
5180            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5181        }
5182        value
5183    }
5184
5185    #[inline]
5186    fn value_type(&self) -> glib::Type {
5187        Self::static_type()
5188    }
5189}
5190
5191impl From<FileChooserAction> for glib::Value {
5192    #[inline]
5193    fn from(v: FileChooserAction) -> Self {
5194        skip_assert_initialized!();
5195        ToValue::to_value(&v)
5196    }
5197}
5198
5199/// These identify the various errors that can occur while calling
5200/// [`FileChooser`][crate::FileChooser] functions.
5201///
5202/// # Deprecated since 4.20
5203///
5204/// There is no replacement
5205#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
5206#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5207#[non_exhaustive]
5208#[doc(alias = "GtkFileChooserError")]
5209pub enum FileChooserError {
5210    /// Indicates that a file does not exist.
5211    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_NONEXISTENT")]
5212    Nonexistent,
5213    /// Indicates a malformed filename.
5214    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_BAD_FILENAME")]
5215    BadFilename,
5216    /// Indicates a duplicate path (e.g. when
5217    ///  adding a bookmark).
5218    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS")]
5219    AlreadyExists,
5220    /// Indicates an incomplete hostname
5221    ///  (e.g. "http://foo" without a slash after that).
5222    #[doc(alias = "GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME")]
5223    IncompleteHostname,
5224    #[doc(hidden)]
5225    __Unknown(i32),
5226}
5227
5228#[allow(deprecated)]
5229#[doc(hidden)]
5230impl IntoGlib for FileChooserError {
5231    type GlibType = ffi::GtkFileChooserError;
5232
5233    #[inline]
5234    fn into_glib(self) -> ffi::GtkFileChooserError {
5235        match self {
5236            Self::Nonexistent => ffi::GTK_FILE_CHOOSER_ERROR_NONEXISTENT,
5237            Self::BadFilename => ffi::GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
5238            Self::AlreadyExists => ffi::GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS,
5239            Self::IncompleteHostname => ffi::GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME,
5240            Self::__Unknown(value) => value,
5241        }
5242    }
5243}
5244
5245#[allow(deprecated)]
5246#[doc(hidden)]
5247impl FromGlib<ffi::GtkFileChooserError> for FileChooserError {
5248    #[inline]
5249    unsafe fn from_glib(value: ffi::GtkFileChooserError) -> Self {
5250        skip_assert_initialized!();
5251
5252        match value {
5253            ffi::GTK_FILE_CHOOSER_ERROR_NONEXISTENT => Self::Nonexistent,
5254            ffi::GTK_FILE_CHOOSER_ERROR_BAD_FILENAME => Self::BadFilename,
5255            ffi::GTK_FILE_CHOOSER_ERROR_ALREADY_EXISTS => Self::AlreadyExists,
5256            ffi::GTK_FILE_CHOOSER_ERROR_INCOMPLETE_HOSTNAME => Self::IncompleteHostname,
5257            value => Self::__Unknown(value),
5258        }
5259    }
5260}
5261
5262#[allow(deprecated)]
5263impl glib::error::ErrorDomain for FileChooserError {
5264    #[inline]
5265    fn domain() -> glib::Quark {
5266        skip_assert_initialized!();
5267
5268        unsafe { from_glib(ffi::gtk_file_chooser_error_quark()) }
5269    }
5270
5271    #[inline]
5272    fn code(self) -> i32 {
5273        self.into_glib()
5274    }
5275
5276    #[inline]
5277    #[allow(clippy::match_single_binding)]
5278    fn from(code: i32) -> Option<Self> {
5279        skip_assert_initialized!();
5280        match unsafe { from_glib(code) } {
5281            value => Some(value),
5282        }
5283    }
5284}
5285
5286#[allow(deprecated)]
5287impl StaticType for FileChooserError {
5288    #[inline]
5289    #[doc(alias = "gtk_file_chooser_error_get_type")]
5290    fn static_type() -> glib::Type {
5291        unsafe { from_glib(ffi::gtk_file_chooser_error_get_type()) }
5292    }
5293}
5294
5295#[allow(deprecated)]
5296impl glib::HasParamSpec for FileChooserError {
5297    type ParamSpec = glib::ParamSpecEnum;
5298    type SetValue = Self;
5299    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5300
5301    fn param_spec_builder() -> Self::BuilderFn {
5302        Self::ParamSpec::builder_with_default
5303    }
5304}
5305
5306#[allow(deprecated)]
5307impl glib::value::ValueType for FileChooserError {
5308    type Type = Self;
5309}
5310
5311#[allow(deprecated)]
5312unsafe impl<'a> glib::value::FromValue<'a> for FileChooserError {
5313    type Checker = glib::value::GenericValueTypeChecker<Self>;
5314
5315    #[inline]
5316    unsafe fn from_value(value: &'a glib::Value) -> Self {
5317        skip_assert_initialized!();
5318        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5319    }
5320}
5321
5322#[allow(deprecated)]
5323impl ToValue for FileChooserError {
5324    #[inline]
5325    fn to_value(&self) -> glib::Value {
5326        let mut value = glib::Value::for_value_type::<Self>();
5327        unsafe {
5328            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5329        }
5330        value
5331    }
5332
5333    #[inline]
5334    fn value_type(&self) -> glib::Type {
5335        Self::static_type()
5336    }
5337}
5338
5339#[allow(deprecated)]
5340impl From<FileChooserError> for glib::Value {
5341    #[inline]
5342    fn from(v: FileChooserError) -> Self {
5343        skip_assert_initialized!();
5344        ToValue::to_value(&v)
5345    }
5346}
5347
5348/// Describes changes in a filter in more detail and allows objects
5349/// using the filter to optimize refiltering items.
5350///
5351/// If you are writing an implementation and are not sure which
5352/// value to pass, `GTK_FILTER_CHANGE_DIFFERENT` is always a correct
5353/// choice.
5354///
5355/// New values may be added in the future.
5356#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5357#[non_exhaustive]
5358#[doc(alias = "GtkFilterChange")]
5359pub enum FilterChange {
5360    /// The filter change cannot be
5361    ///   described with any of the other enumeration values
5362    #[doc(alias = "GTK_FILTER_CHANGE_DIFFERENT")]
5363    Different,
5364    /// The filter is less strict than
5365    ///   it was before: All items that it used to return true
5366    ///   still return true, others now may, too.
5367    #[doc(alias = "GTK_FILTER_CHANGE_LESS_STRICT")]
5368    LessStrict,
5369    /// The filter is more strict than
5370    ///   it was before: All items that it used to return false
5371    ///   still return false, others now may, too.
5372    #[doc(alias = "GTK_FILTER_CHANGE_MORE_STRICT")]
5373    MoreStrict,
5374    /// Similar to [enum@Gtk.FilterChange.DIFFERENT],
5375    /// but signs that item watches should be recreated. This is used by
5376    /// [`FilterListModel`][crate::FilterListModel] to keep the list up-to-date when items
5377    /// change.
5378    #[cfg(feature = "v4_20")]
5379    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
5380    #[doc(alias = "GTK_FILTER_CHANGE_DIFFERENT_REWATCH")]
5381    DifferentRewatch,
5382    /// Similar to [enum@Gtk.FilterChange.LESS_STRICT],
5383    /// but signs that item watches should be recreated. This is used by
5384    /// [`FilterListModel`][crate::FilterListModel] to keep the list up-to-date when items
5385    /// change.
5386    #[cfg(feature = "v4_20")]
5387    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
5388    #[doc(alias = "GTK_FILTER_CHANGE_LESS_STRICT_REWATCH")]
5389    LessStrictRewatch,
5390    /// Similar to [enum@Gtk.FilterChange.MORE_STRICT],
5391    /// but signs that item watches should be recreated. This is used by
5392    /// [`FilterListModel`][crate::FilterListModel] to keep the list up-to-date when items
5393    /// change.
5394    #[cfg(feature = "v4_20")]
5395    #[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
5396    #[doc(alias = "GTK_FILTER_CHANGE_MORE_STRICT_REWATCH")]
5397    MoreStrictRewatch,
5398    #[doc(hidden)]
5399    __Unknown(i32),
5400}
5401
5402#[doc(hidden)]
5403impl IntoGlib for FilterChange {
5404    type GlibType = ffi::GtkFilterChange;
5405
5406    #[inline]
5407    fn into_glib(self) -> ffi::GtkFilterChange {
5408        match self {
5409            Self::Different => ffi::GTK_FILTER_CHANGE_DIFFERENT,
5410            Self::LessStrict => ffi::GTK_FILTER_CHANGE_LESS_STRICT,
5411            Self::MoreStrict => ffi::GTK_FILTER_CHANGE_MORE_STRICT,
5412            #[cfg(feature = "v4_20")]
5413            Self::DifferentRewatch => ffi::GTK_FILTER_CHANGE_DIFFERENT_REWATCH,
5414            #[cfg(feature = "v4_20")]
5415            Self::LessStrictRewatch => ffi::GTK_FILTER_CHANGE_LESS_STRICT_REWATCH,
5416            #[cfg(feature = "v4_20")]
5417            Self::MoreStrictRewatch => ffi::GTK_FILTER_CHANGE_MORE_STRICT_REWATCH,
5418            Self::__Unknown(value) => value,
5419        }
5420    }
5421}
5422
5423#[doc(hidden)]
5424impl FromGlib<ffi::GtkFilterChange> for FilterChange {
5425    #[inline]
5426    unsafe fn from_glib(value: ffi::GtkFilterChange) -> Self {
5427        skip_assert_initialized!();
5428
5429        match value {
5430            ffi::GTK_FILTER_CHANGE_DIFFERENT => Self::Different,
5431            ffi::GTK_FILTER_CHANGE_LESS_STRICT => Self::LessStrict,
5432            ffi::GTK_FILTER_CHANGE_MORE_STRICT => Self::MoreStrict,
5433            #[cfg(feature = "v4_20")]
5434            ffi::GTK_FILTER_CHANGE_DIFFERENT_REWATCH => Self::DifferentRewatch,
5435            #[cfg(feature = "v4_20")]
5436            ffi::GTK_FILTER_CHANGE_LESS_STRICT_REWATCH => Self::LessStrictRewatch,
5437            #[cfg(feature = "v4_20")]
5438            ffi::GTK_FILTER_CHANGE_MORE_STRICT_REWATCH => Self::MoreStrictRewatch,
5439            value => Self::__Unknown(value),
5440        }
5441    }
5442}
5443
5444impl StaticType for FilterChange {
5445    #[inline]
5446    #[doc(alias = "gtk_filter_change_get_type")]
5447    fn static_type() -> glib::Type {
5448        unsafe { from_glib(ffi::gtk_filter_change_get_type()) }
5449    }
5450}
5451
5452impl glib::HasParamSpec for FilterChange {
5453    type ParamSpec = glib::ParamSpecEnum;
5454    type SetValue = Self;
5455    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5456
5457    fn param_spec_builder() -> Self::BuilderFn {
5458        Self::ParamSpec::builder_with_default
5459    }
5460}
5461
5462impl glib::value::ValueType for FilterChange {
5463    type Type = Self;
5464}
5465
5466unsafe impl<'a> glib::value::FromValue<'a> for FilterChange {
5467    type Checker = glib::value::GenericValueTypeChecker<Self>;
5468
5469    #[inline]
5470    unsafe fn from_value(value: &'a glib::Value) -> Self {
5471        skip_assert_initialized!();
5472        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5473    }
5474}
5475
5476impl ToValue for FilterChange {
5477    #[inline]
5478    fn to_value(&self) -> glib::Value {
5479        let mut value = glib::Value::for_value_type::<Self>();
5480        unsafe {
5481            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5482        }
5483        value
5484    }
5485
5486    #[inline]
5487    fn value_type(&self) -> glib::Type {
5488        Self::static_type()
5489    }
5490}
5491
5492impl From<FilterChange> for glib::Value {
5493    #[inline]
5494    fn from(v: FilterChange) -> Self {
5495        skip_assert_initialized!();
5496        ToValue::to_value(&v)
5497    }
5498}
5499
5500/// Describes the known strictness of a filter.
5501///
5502/// Note that for filters where the strictness is not known,
5503/// `GTK_FILTER_MATCH_SOME` is always an acceptable value,
5504/// even if a filter does match all or no items.
5505#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5506#[non_exhaustive]
5507#[doc(alias = "GtkFilterMatch")]
5508pub enum FilterMatch {
5509    /// The filter matches some items,
5510    ///   [`FilterExt::match_()`][crate::prelude::FilterExt::match_()] may return true or false
5511    #[doc(alias = "GTK_FILTER_MATCH_SOME")]
5512    Some,
5513    /// The filter does not match any item,
5514    ///   [`FilterExt::match_()`][crate::prelude::FilterExt::match_()] will always return false
5515    #[doc(alias = "GTK_FILTER_MATCH_NONE")]
5516    None,
5517    /// The filter matches all items,
5518    ///   [`FilterExt::match_()`][crate::prelude::FilterExt::match_()] will alays return true
5519    #[doc(alias = "GTK_FILTER_MATCH_ALL")]
5520    All,
5521    #[doc(hidden)]
5522    __Unknown(i32),
5523}
5524
5525#[doc(hidden)]
5526impl IntoGlib for FilterMatch {
5527    type GlibType = ffi::GtkFilterMatch;
5528
5529    #[inline]
5530    fn into_glib(self) -> ffi::GtkFilterMatch {
5531        match self {
5532            Self::Some => ffi::GTK_FILTER_MATCH_SOME,
5533            Self::None => ffi::GTK_FILTER_MATCH_NONE,
5534            Self::All => ffi::GTK_FILTER_MATCH_ALL,
5535            Self::__Unknown(value) => value,
5536        }
5537    }
5538}
5539
5540#[doc(hidden)]
5541impl FromGlib<ffi::GtkFilterMatch> for FilterMatch {
5542    #[inline]
5543    unsafe fn from_glib(value: ffi::GtkFilterMatch) -> Self {
5544        skip_assert_initialized!();
5545
5546        match value {
5547            ffi::GTK_FILTER_MATCH_SOME => Self::Some,
5548            ffi::GTK_FILTER_MATCH_NONE => Self::None,
5549            ffi::GTK_FILTER_MATCH_ALL => Self::All,
5550            value => Self::__Unknown(value),
5551        }
5552    }
5553}
5554
5555impl StaticType for FilterMatch {
5556    #[inline]
5557    #[doc(alias = "gtk_filter_match_get_type")]
5558    fn static_type() -> glib::Type {
5559        unsafe { from_glib(ffi::gtk_filter_match_get_type()) }
5560    }
5561}
5562
5563impl glib::HasParamSpec for FilterMatch {
5564    type ParamSpec = glib::ParamSpecEnum;
5565    type SetValue = Self;
5566    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5567
5568    fn param_spec_builder() -> Self::BuilderFn {
5569        Self::ParamSpec::builder_with_default
5570    }
5571}
5572
5573impl glib::value::ValueType for FilterMatch {
5574    type Type = Self;
5575}
5576
5577unsafe impl<'a> glib::value::FromValue<'a> for FilterMatch {
5578    type Checker = glib::value::GenericValueTypeChecker<Self>;
5579
5580    #[inline]
5581    unsafe fn from_value(value: &'a glib::Value) -> Self {
5582        skip_assert_initialized!();
5583        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5584    }
5585}
5586
5587impl ToValue for FilterMatch {
5588    #[inline]
5589    fn to_value(&self) -> glib::Value {
5590        let mut value = glib::Value::for_value_type::<Self>();
5591        unsafe {
5592            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5593        }
5594        value
5595    }
5596
5597    #[inline]
5598    fn value_type(&self) -> glib::Type {
5599        Self::static_type()
5600    }
5601}
5602
5603impl From<FilterMatch> for glib::Value {
5604    #[inline]
5605    fn from(v: FilterMatch) -> Self {
5606        skip_assert_initialized!();
5607        ToValue::to_value(&v)
5608    }
5609}
5610
5611/// The level of granularity for the font selection.
5612///
5613/// Depending on this value, the [`pango::FontDescription`][crate::pango::FontDescription] that
5614/// is returned by [`FontDialogButton::font_desc()`][crate::FontDialogButton::font_desc()]
5615/// will have more or less fields set.
5616#[cfg(feature = "v4_10")]
5617#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5618#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5619#[non_exhaustive]
5620#[doc(alias = "GtkFontLevel")]
5621pub enum FontLevel {
5622    /// Select a font family
5623    #[doc(alias = "GTK_FONT_LEVEL_FAMILY")]
5624    Family,
5625    /// Select a font face (i.e. a family and a style)
5626    #[doc(alias = "GTK_FONT_LEVEL_FACE")]
5627    Face,
5628    /// Select a font (i.e. a face with a size, and possibly font variations)
5629    #[doc(alias = "GTK_FONT_LEVEL_FONT")]
5630    Font,
5631    /// Select a font and font features
5632    #[doc(alias = "GTK_FONT_LEVEL_FEATURES")]
5633    Features,
5634    #[doc(hidden)]
5635    __Unknown(i32),
5636}
5637
5638#[cfg(feature = "v4_10")]
5639#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5640#[doc(hidden)]
5641impl IntoGlib for FontLevel {
5642    type GlibType = ffi::GtkFontLevel;
5643
5644    #[inline]
5645    fn into_glib(self) -> ffi::GtkFontLevel {
5646        match self {
5647            Self::Family => ffi::GTK_FONT_LEVEL_FAMILY,
5648            Self::Face => ffi::GTK_FONT_LEVEL_FACE,
5649            Self::Font => ffi::GTK_FONT_LEVEL_FONT,
5650            Self::Features => ffi::GTK_FONT_LEVEL_FEATURES,
5651            Self::__Unknown(value) => value,
5652        }
5653    }
5654}
5655
5656#[cfg(feature = "v4_10")]
5657#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5658#[doc(hidden)]
5659impl FromGlib<ffi::GtkFontLevel> for FontLevel {
5660    #[inline]
5661    unsafe fn from_glib(value: ffi::GtkFontLevel) -> Self {
5662        skip_assert_initialized!();
5663
5664        match value {
5665            ffi::GTK_FONT_LEVEL_FAMILY => Self::Family,
5666            ffi::GTK_FONT_LEVEL_FACE => Self::Face,
5667            ffi::GTK_FONT_LEVEL_FONT => Self::Font,
5668            ffi::GTK_FONT_LEVEL_FEATURES => Self::Features,
5669            value => Self::__Unknown(value),
5670        }
5671    }
5672}
5673
5674#[cfg(feature = "v4_10")]
5675#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5676impl StaticType for FontLevel {
5677    #[inline]
5678    #[doc(alias = "gtk_font_level_get_type")]
5679    fn static_type() -> glib::Type {
5680        unsafe { from_glib(ffi::gtk_font_level_get_type()) }
5681    }
5682}
5683
5684#[cfg(feature = "v4_10")]
5685#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5686impl glib::HasParamSpec for FontLevel {
5687    type ParamSpec = glib::ParamSpecEnum;
5688    type SetValue = Self;
5689    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5690
5691    fn param_spec_builder() -> Self::BuilderFn {
5692        Self::ParamSpec::builder_with_default
5693    }
5694}
5695
5696#[cfg(feature = "v4_10")]
5697#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5698impl glib::value::ValueType for FontLevel {
5699    type Type = Self;
5700}
5701
5702#[cfg(feature = "v4_10")]
5703#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5704unsafe impl<'a> glib::value::FromValue<'a> for FontLevel {
5705    type Checker = glib::value::GenericValueTypeChecker<Self>;
5706
5707    #[inline]
5708    unsafe fn from_value(value: &'a glib::Value) -> Self {
5709        skip_assert_initialized!();
5710        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5711    }
5712}
5713
5714#[cfg(feature = "v4_10")]
5715#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5716impl ToValue for FontLevel {
5717    #[inline]
5718    fn to_value(&self) -> glib::Value {
5719        let mut value = glib::Value::for_value_type::<Self>();
5720        unsafe {
5721            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5722        }
5723        value
5724    }
5725
5726    #[inline]
5727    fn value_type(&self) -> glib::Type {
5728        Self::static_type()
5729    }
5730}
5731
5732#[cfg(feature = "v4_10")]
5733#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
5734impl From<FontLevel> for glib::Value {
5735    #[inline]
5736    fn from(v: FontLevel) -> Self {
5737        skip_assert_initialized!();
5738        ToValue::to_value(&v)
5739    }
5740}
5741
5742/// Values for the [`gtk-font-rendering`][struct@crate::Settings#gtk-font-rendering] setting
5743/// that influence how GTK renders fonts.
5744#[cfg(feature = "v4_16")]
5745#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5746#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5747#[non_exhaustive]
5748#[doc(alias = "GtkFontRendering")]
5749pub enum FontRendering {
5750    /// Set up font rendering automatically,
5751    ///   taking factors like screen resolution and scale into account
5752    #[doc(alias = "GTK_FONT_RENDERING_AUTOMATIC")]
5753    Automatic,
5754    /// Follow low-level font-related settings
5755    ///   when configuring font rendering
5756    #[doc(alias = "GTK_FONT_RENDERING_MANUAL")]
5757    Manual,
5758    #[doc(hidden)]
5759    __Unknown(i32),
5760}
5761
5762#[cfg(feature = "v4_16")]
5763#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5764#[doc(hidden)]
5765impl IntoGlib for FontRendering {
5766    type GlibType = ffi::GtkFontRendering;
5767
5768    #[inline]
5769    fn into_glib(self) -> ffi::GtkFontRendering {
5770        match self {
5771            Self::Automatic => ffi::GTK_FONT_RENDERING_AUTOMATIC,
5772            Self::Manual => ffi::GTK_FONT_RENDERING_MANUAL,
5773            Self::__Unknown(value) => value,
5774        }
5775    }
5776}
5777
5778#[cfg(feature = "v4_16")]
5779#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5780#[doc(hidden)]
5781impl FromGlib<ffi::GtkFontRendering> for FontRendering {
5782    #[inline]
5783    unsafe fn from_glib(value: ffi::GtkFontRendering) -> Self {
5784        skip_assert_initialized!();
5785
5786        match value {
5787            ffi::GTK_FONT_RENDERING_AUTOMATIC => Self::Automatic,
5788            ffi::GTK_FONT_RENDERING_MANUAL => Self::Manual,
5789            value => Self::__Unknown(value),
5790        }
5791    }
5792}
5793
5794#[cfg(feature = "v4_16")]
5795#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5796impl StaticType for FontRendering {
5797    #[inline]
5798    #[doc(alias = "gtk_font_rendering_get_type")]
5799    fn static_type() -> glib::Type {
5800        unsafe { from_glib(ffi::gtk_font_rendering_get_type()) }
5801    }
5802}
5803
5804#[cfg(feature = "v4_16")]
5805#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5806impl glib::HasParamSpec for FontRendering {
5807    type ParamSpec = glib::ParamSpecEnum;
5808    type SetValue = Self;
5809    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5810
5811    fn param_spec_builder() -> Self::BuilderFn {
5812        Self::ParamSpec::builder_with_default
5813    }
5814}
5815
5816#[cfg(feature = "v4_16")]
5817#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5818impl glib::value::ValueType for FontRendering {
5819    type Type = Self;
5820}
5821
5822#[cfg(feature = "v4_16")]
5823#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5824unsafe impl<'a> glib::value::FromValue<'a> for FontRendering {
5825    type Checker = glib::value::GenericValueTypeChecker<Self>;
5826
5827    #[inline]
5828    unsafe fn from_value(value: &'a glib::Value) -> Self {
5829        skip_assert_initialized!();
5830        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5831    }
5832}
5833
5834#[cfg(feature = "v4_16")]
5835#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5836impl ToValue for FontRendering {
5837    #[inline]
5838    fn to_value(&self) -> glib::Value {
5839        let mut value = glib::Value::for_value_type::<Self>();
5840        unsafe {
5841            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5842        }
5843        value
5844    }
5845
5846    #[inline]
5847    fn value_type(&self) -> glib::Type {
5848        Self::static_type()
5849    }
5850}
5851
5852#[cfg(feature = "v4_16")]
5853#[cfg_attr(docsrs, doc(cfg(feature = "v4_16")))]
5854impl From<FontRendering> for glib::Value {
5855    #[inline]
5856    fn from(v: FontRendering) -> Self {
5857        skip_assert_initialized!();
5858        ToValue::to_value(&v)
5859    }
5860}
5861
5862/// Represents the state of graphics offloading.
5863#[cfg(feature = "v4_14")]
5864#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5865#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5866#[non_exhaustive]
5867#[doc(alias = "GtkGraphicsOffloadEnabled")]
5868pub enum GraphicsOffloadEnabled {
5869    /// Graphics offloading is enabled.
5870    #[doc(alias = "GTK_GRAPHICS_OFFLOAD_ENABLED")]
5871    Enabled,
5872    /// Graphics offloading is disabled.
5873    #[doc(alias = "GTK_GRAPHICS_OFFLOAD_DISABLED")]
5874    Disabled,
5875    #[doc(hidden)]
5876    __Unknown(i32),
5877}
5878
5879#[cfg(feature = "v4_14")]
5880#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5881#[doc(hidden)]
5882impl IntoGlib for GraphicsOffloadEnabled {
5883    type GlibType = ffi::GtkGraphicsOffloadEnabled;
5884
5885    #[inline]
5886    fn into_glib(self) -> ffi::GtkGraphicsOffloadEnabled {
5887        match self {
5888            Self::Enabled => ffi::GTK_GRAPHICS_OFFLOAD_ENABLED,
5889            Self::Disabled => ffi::GTK_GRAPHICS_OFFLOAD_DISABLED,
5890            Self::__Unknown(value) => value,
5891        }
5892    }
5893}
5894
5895#[cfg(feature = "v4_14")]
5896#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5897#[doc(hidden)]
5898impl FromGlib<ffi::GtkGraphicsOffloadEnabled> for GraphicsOffloadEnabled {
5899    #[inline]
5900    unsafe fn from_glib(value: ffi::GtkGraphicsOffloadEnabled) -> Self {
5901        skip_assert_initialized!();
5902
5903        match value {
5904            ffi::GTK_GRAPHICS_OFFLOAD_ENABLED => Self::Enabled,
5905            ffi::GTK_GRAPHICS_OFFLOAD_DISABLED => Self::Disabled,
5906            value => Self::__Unknown(value),
5907        }
5908    }
5909}
5910
5911#[cfg(feature = "v4_14")]
5912#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5913impl StaticType for GraphicsOffloadEnabled {
5914    #[inline]
5915    #[doc(alias = "gtk_graphics_offload_enabled_get_type")]
5916    fn static_type() -> glib::Type {
5917        unsafe { from_glib(ffi::gtk_graphics_offload_enabled_get_type()) }
5918    }
5919}
5920
5921#[cfg(feature = "v4_14")]
5922#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5923impl glib::HasParamSpec for GraphicsOffloadEnabled {
5924    type ParamSpec = glib::ParamSpecEnum;
5925    type SetValue = Self;
5926    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
5927
5928    fn param_spec_builder() -> Self::BuilderFn {
5929        Self::ParamSpec::builder_with_default
5930    }
5931}
5932
5933#[cfg(feature = "v4_14")]
5934#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5935impl glib::value::ValueType for GraphicsOffloadEnabled {
5936    type Type = Self;
5937}
5938
5939#[cfg(feature = "v4_14")]
5940#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5941unsafe impl<'a> glib::value::FromValue<'a> for GraphicsOffloadEnabled {
5942    type Checker = glib::value::GenericValueTypeChecker<Self>;
5943
5944    #[inline]
5945    unsafe fn from_value(value: &'a glib::Value) -> Self {
5946        skip_assert_initialized!();
5947        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
5948    }
5949}
5950
5951#[cfg(feature = "v4_14")]
5952#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5953impl ToValue for GraphicsOffloadEnabled {
5954    #[inline]
5955    fn to_value(&self) -> glib::Value {
5956        let mut value = glib::Value::for_value_type::<Self>();
5957        unsafe {
5958            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
5959        }
5960        value
5961    }
5962
5963    #[inline]
5964    fn value_type(&self) -> glib::Type {
5965        Self::static_type()
5966    }
5967}
5968
5969#[cfg(feature = "v4_14")]
5970#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
5971impl From<GraphicsOffloadEnabled> for glib::Value {
5972    #[inline]
5973    fn from(v: GraphicsOffloadEnabled) -> Self {
5974        skip_assert_initialized!();
5975        ToValue::to_value(&v)
5976    }
5977}
5978
5979/// Built-in icon sizes.
5980///
5981/// Icon sizes default to being inherited. Where they cannot be
5982/// inherited, text size is the default.
5983///
5984/// All widgets which use [`IconSize`][crate::IconSize] set the normal-icons or
5985/// large-icons style classes correspondingly, and let themes
5986/// determine the actual size to be used with the
5987/// `-gtk-icon-size` CSS property.
5988#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
5989#[non_exhaustive]
5990#[doc(alias = "GtkIconSize")]
5991pub enum IconSize {
5992    /// Keep the size of the parent element
5993    #[doc(alias = "GTK_ICON_SIZE_INHERIT")]
5994    Inherit,
5995    /// Size similar to text size
5996    #[doc(alias = "GTK_ICON_SIZE_NORMAL")]
5997    Normal,
5998    /// Large size, for example in an icon view
5999    #[doc(alias = "GTK_ICON_SIZE_LARGE")]
6000    Large,
6001    #[doc(hidden)]
6002    __Unknown(i32),
6003}
6004
6005#[doc(hidden)]
6006impl IntoGlib for IconSize {
6007    type GlibType = ffi::GtkIconSize;
6008
6009    #[inline]
6010    fn into_glib(self) -> ffi::GtkIconSize {
6011        match self {
6012            Self::Inherit => ffi::GTK_ICON_SIZE_INHERIT,
6013            Self::Normal => ffi::GTK_ICON_SIZE_NORMAL,
6014            Self::Large => ffi::GTK_ICON_SIZE_LARGE,
6015            Self::__Unknown(value) => value,
6016        }
6017    }
6018}
6019
6020#[doc(hidden)]
6021impl FromGlib<ffi::GtkIconSize> for IconSize {
6022    #[inline]
6023    unsafe fn from_glib(value: ffi::GtkIconSize) -> Self {
6024        skip_assert_initialized!();
6025
6026        match value {
6027            ffi::GTK_ICON_SIZE_INHERIT => Self::Inherit,
6028            ffi::GTK_ICON_SIZE_NORMAL => Self::Normal,
6029            ffi::GTK_ICON_SIZE_LARGE => Self::Large,
6030            value => Self::__Unknown(value),
6031        }
6032    }
6033}
6034
6035impl StaticType for IconSize {
6036    #[inline]
6037    #[doc(alias = "gtk_icon_size_get_type")]
6038    fn static_type() -> glib::Type {
6039        unsafe { from_glib(ffi::gtk_icon_size_get_type()) }
6040    }
6041}
6042
6043impl glib::HasParamSpec for IconSize {
6044    type ParamSpec = glib::ParamSpecEnum;
6045    type SetValue = Self;
6046    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6047
6048    fn param_spec_builder() -> Self::BuilderFn {
6049        Self::ParamSpec::builder_with_default
6050    }
6051}
6052
6053impl glib::value::ValueType for IconSize {
6054    type Type = Self;
6055}
6056
6057unsafe impl<'a> glib::value::FromValue<'a> for IconSize {
6058    type Checker = glib::value::GenericValueTypeChecker<Self>;
6059
6060    #[inline]
6061    unsafe fn from_value(value: &'a glib::Value) -> Self {
6062        skip_assert_initialized!();
6063        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6064    }
6065}
6066
6067impl ToValue for IconSize {
6068    #[inline]
6069    fn to_value(&self) -> glib::Value {
6070        let mut value = glib::Value::for_value_type::<Self>();
6071        unsafe {
6072            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6073        }
6074        value
6075    }
6076
6077    #[inline]
6078    fn value_type(&self) -> glib::Type {
6079        Self::static_type()
6080    }
6081}
6082
6083impl From<IconSize> for glib::Value {
6084    #[inline]
6085    fn from(v: IconSize) -> Self {
6086        skip_assert_initialized!();
6087        ToValue::to_value(&v)
6088    }
6089}
6090
6091/// Error codes for [`IconTheme`][crate::IconTheme] operations.
6092#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6093#[non_exhaustive]
6094#[doc(alias = "GtkIconThemeError")]
6095pub enum IconThemeError {
6096    /// The icon specified does not exist in the theme
6097    #[doc(alias = "GTK_ICON_THEME_NOT_FOUND")]
6098    NotFound,
6099    /// An unspecified error occurred.
6100    #[doc(alias = "GTK_ICON_THEME_FAILED")]
6101    Failed,
6102    #[doc(hidden)]
6103    __Unknown(i32),
6104}
6105
6106#[doc(hidden)]
6107impl IntoGlib for IconThemeError {
6108    type GlibType = ffi::GtkIconThemeError;
6109
6110    #[inline]
6111    fn into_glib(self) -> ffi::GtkIconThemeError {
6112        match self {
6113            Self::NotFound => ffi::GTK_ICON_THEME_NOT_FOUND,
6114            Self::Failed => ffi::GTK_ICON_THEME_FAILED,
6115            Self::__Unknown(value) => value,
6116        }
6117    }
6118}
6119
6120#[doc(hidden)]
6121impl FromGlib<ffi::GtkIconThemeError> for IconThemeError {
6122    #[inline]
6123    unsafe fn from_glib(value: ffi::GtkIconThemeError) -> Self {
6124        skip_assert_initialized!();
6125
6126        match value {
6127            ffi::GTK_ICON_THEME_NOT_FOUND => Self::NotFound,
6128            ffi::GTK_ICON_THEME_FAILED => Self::Failed,
6129            value => Self::__Unknown(value),
6130        }
6131    }
6132}
6133
6134impl glib::error::ErrorDomain for IconThemeError {
6135    #[inline]
6136    fn domain() -> glib::Quark {
6137        skip_assert_initialized!();
6138
6139        unsafe { from_glib(ffi::gtk_icon_theme_error_quark()) }
6140    }
6141
6142    #[inline]
6143    fn code(self) -> i32 {
6144        self.into_glib()
6145    }
6146
6147    #[inline]
6148    #[allow(clippy::match_single_binding)]
6149    fn from(code: i32) -> Option<Self> {
6150        skip_assert_initialized!();
6151        match unsafe { from_glib(code) } {
6152            Self::__Unknown(_) => Some(Self::Failed),
6153            value => Some(value),
6154        }
6155    }
6156}
6157
6158impl StaticType for IconThemeError {
6159    #[inline]
6160    #[doc(alias = "gtk_icon_theme_error_get_type")]
6161    fn static_type() -> glib::Type {
6162        unsafe { from_glib(ffi::gtk_icon_theme_error_get_type()) }
6163    }
6164}
6165
6166impl glib::HasParamSpec for IconThemeError {
6167    type ParamSpec = glib::ParamSpecEnum;
6168    type SetValue = Self;
6169    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6170
6171    fn param_spec_builder() -> Self::BuilderFn {
6172        Self::ParamSpec::builder_with_default
6173    }
6174}
6175
6176impl glib::value::ValueType for IconThemeError {
6177    type Type = Self;
6178}
6179
6180unsafe impl<'a> glib::value::FromValue<'a> for IconThemeError {
6181    type Checker = glib::value::GenericValueTypeChecker<Self>;
6182
6183    #[inline]
6184    unsafe fn from_value(value: &'a glib::Value) -> Self {
6185        skip_assert_initialized!();
6186        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6187    }
6188}
6189
6190impl ToValue for IconThemeError {
6191    #[inline]
6192    fn to_value(&self) -> glib::Value {
6193        let mut value = glib::Value::for_value_type::<Self>();
6194        unsafe {
6195            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6196        }
6197        value
6198    }
6199
6200    #[inline]
6201    fn value_type(&self) -> glib::Type {
6202        Self::static_type()
6203    }
6204}
6205
6206impl From<IconThemeError> for glib::Value {
6207    #[inline]
6208    fn from(v: IconThemeError) -> Self {
6209        skip_assert_initialized!();
6210        ToValue::to_value(&v)
6211    }
6212}
6213
6214/// An enum for determining where a dropped item goes.
6215///
6216/// # Deprecated since 4.20
6217///
6218/// There is no replacement.
6219#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
6220#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6221#[non_exhaustive]
6222#[doc(alias = "GtkIconViewDropPosition")]
6223pub enum IconViewDropPosition {
6224    /// no drop possible
6225    #[doc(alias = "GTK_ICON_VIEW_NO_DROP")]
6226    NoDrop,
6227    /// dropped item replaces the item
6228    #[doc(alias = "GTK_ICON_VIEW_DROP_INTO")]
6229    DropInto,
6230    /// dropped item is inserted to the left
6231    #[doc(alias = "GTK_ICON_VIEW_DROP_LEFT")]
6232    DropLeft,
6233    /// dropped item is inserted to the right
6234    #[doc(alias = "GTK_ICON_VIEW_DROP_RIGHT")]
6235    DropRight,
6236    /// dropped item is inserted above
6237    #[doc(alias = "GTK_ICON_VIEW_DROP_ABOVE")]
6238    DropAbove,
6239    /// dropped item is inserted below
6240    #[doc(alias = "GTK_ICON_VIEW_DROP_BELOW")]
6241    DropBelow,
6242    #[doc(hidden)]
6243    __Unknown(i32),
6244}
6245
6246#[allow(deprecated)]
6247#[doc(hidden)]
6248impl IntoGlib for IconViewDropPosition {
6249    type GlibType = ffi::GtkIconViewDropPosition;
6250
6251    #[inline]
6252    fn into_glib(self) -> ffi::GtkIconViewDropPosition {
6253        match self {
6254            Self::NoDrop => ffi::GTK_ICON_VIEW_NO_DROP,
6255            Self::DropInto => ffi::GTK_ICON_VIEW_DROP_INTO,
6256            Self::DropLeft => ffi::GTK_ICON_VIEW_DROP_LEFT,
6257            Self::DropRight => ffi::GTK_ICON_VIEW_DROP_RIGHT,
6258            Self::DropAbove => ffi::GTK_ICON_VIEW_DROP_ABOVE,
6259            Self::DropBelow => ffi::GTK_ICON_VIEW_DROP_BELOW,
6260            Self::__Unknown(value) => value,
6261        }
6262    }
6263}
6264
6265#[allow(deprecated)]
6266#[doc(hidden)]
6267impl FromGlib<ffi::GtkIconViewDropPosition> for IconViewDropPosition {
6268    #[inline]
6269    unsafe fn from_glib(value: ffi::GtkIconViewDropPosition) -> Self {
6270        skip_assert_initialized!();
6271
6272        match value {
6273            ffi::GTK_ICON_VIEW_NO_DROP => Self::NoDrop,
6274            ffi::GTK_ICON_VIEW_DROP_INTO => Self::DropInto,
6275            ffi::GTK_ICON_VIEW_DROP_LEFT => Self::DropLeft,
6276            ffi::GTK_ICON_VIEW_DROP_RIGHT => Self::DropRight,
6277            ffi::GTK_ICON_VIEW_DROP_ABOVE => Self::DropAbove,
6278            ffi::GTK_ICON_VIEW_DROP_BELOW => Self::DropBelow,
6279            value => Self::__Unknown(value),
6280        }
6281    }
6282}
6283
6284#[allow(deprecated)]
6285impl StaticType for IconViewDropPosition {
6286    #[inline]
6287    #[doc(alias = "gtk_icon_view_drop_position_get_type")]
6288    fn static_type() -> glib::Type {
6289        unsafe { from_glib(ffi::gtk_icon_view_drop_position_get_type()) }
6290    }
6291}
6292
6293#[allow(deprecated)]
6294impl glib::HasParamSpec for IconViewDropPosition {
6295    type ParamSpec = glib::ParamSpecEnum;
6296    type SetValue = Self;
6297    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6298
6299    fn param_spec_builder() -> Self::BuilderFn {
6300        Self::ParamSpec::builder_with_default
6301    }
6302}
6303
6304#[allow(deprecated)]
6305impl glib::value::ValueType for IconViewDropPosition {
6306    type Type = Self;
6307}
6308
6309#[allow(deprecated)]
6310unsafe impl<'a> glib::value::FromValue<'a> for IconViewDropPosition {
6311    type Checker = glib::value::GenericValueTypeChecker<Self>;
6312
6313    #[inline]
6314    unsafe fn from_value(value: &'a glib::Value) -> Self {
6315        skip_assert_initialized!();
6316        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6317    }
6318}
6319
6320#[allow(deprecated)]
6321impl ToValue for IconViewDropPosition {
6322    #[inline]
6323    fn to_value(&self) -> glib::Value {
6324        let mut value = glib::Value::for_value_type::<Self>();
6325        unsafe {
6326            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6327        }
6328        value
6329    }
6330
6331    #[inline]
6332    fn value_type(&self) -> glib::Type {
6333        Self::static_type()
6334    }
6335}
6336
6337#[allow(deprecated)]
6338impl From<IconViewDropPosition> for glib::Value {
6339    #[inline]
6340    fn from(v: IconViewDropPosition) -> Self {
6341        skip_assert_initialized!();
6342        ToValue::to_value(&v)
6343    }
6344}
6345
6346/// Describes the image data representation used by a [`Image`][crate::Image].
6347///
6348/// If you want to get the image from the widget, you can only get the
6349/// currently-stored representation; for instance, if the gtk_image_get_storage_type()
6350/// returns [`Paintable`][Self::Paintable], then you can call gtk_image_get_paintable().
6351///
6352/// For empty images, you can request any storage type (call any of the "get"
6353/// functions), but they will all return [`None`] values.
6354#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6355#[non_exhaustive]
6356#[doc(alias = "GtkImageType")]
6357pub enum ImageType {
6358    /// there is no image displayed by the widget
6359    #[doc(alias = "GTK_IMAGE_EMPTY")]
6360    Empty,
6361    /// the widget contains a named icon
6362    #[doc(alias = "GTK_IMAGE_ICON_NAME")]
6363    IconName,
6364    /// the widget contains a `GIcon`
6365    #[doc(alias = "GTK_IMAGE_GICON")]
6366    Gicon,
6367    /// the widget contains a [`gdk::Paintable`][crate::gdk::Paintable]
6368    #[doc(alias = "GTK_IMAGE_PAINTABLE")]
6369    Paintable,
6370    #[doc(hidden)]
6371    __Unknown(i32),
6372}
6373
6374#[doc(hidden)]
6375impl IntoGlib for ImageType {
6376    type GlibType = ffi::GtkImageType;
6377
6378    #[inline]
6379    fn into_glib(self) -> ffi::GtkImageType {
6380        match self {
6381            Self::Empty => ffi::GTK_IMAGE_EMPTY,
6382            Self::IconName => ffi::GTK_IMAGE_ICON_NAME,
6383            Self::Gicon => ffi::GTK_IMAGE_GICON,
6384            Self::Paintable => ffi::GTK_IMAGE_PAINTABLE,
6385            Self::__Unknown(value) => value,
6386        }
6387    }
6388}
6389
6390#[doc(hidden)]
6391impl FromGlib<ffi::GtkImageType> for ImageType {
6392    #[inline]
6393    unsafe fn from_glib(value: ffi::GtkImageType) -> Self {
6394        skip_assert_initialized!();
6395
6396        match value {
6397            ffi::GTK_IMAGE_EMPTY => Self::Empty,
6398            ffi::GTK_IMAGE_ICON_NAME => Self::IconName,
6399            ffi::GTK_IMAGE_GICON => Self::Gicon,
6400            ffi::GTK_IMAGE_PAINTABLE => Self::Paintable,
6401            value => Self::__Unknown(value),
6402        }
6403    }
6404}
6405
6406impl StaticType for ImageType {
6407    #[inline]
6408    #[doc(alias = "gtk_image_type_get_type")]
6409    fn static_type() -> glib::Type {
6410        unsafe { from_glib(ffi::gtk_image_type_get_type()) }
6411    }
6412}
6413
6414impl glib::HasParamSpec for ImageType {
6415    type ParamSpec = glib::ParamSpecEnum;
6416    type SetValue = Self;
6417    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6418
6419    fn param_spec_builder() -> Self::BuilderFn {
6420        Self::ParamSpec::builder_with_default
6421    }
6422}
6423
6424impl glib::value::ValueType for ImageType {
6425    type Type = Self;
6426}
6427
6428unsafe impl<'a> glib::value::FromValue<'a> for ImageType {
6429    type Checker = glib::value::GenericValueTypeChecker<Self>;
6430
6431    #[inline]
6432    unsafe fn from_value(value: &'a glib::Value) -> Self {
6433        skip_assert_initialized!();
6434        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6435    }
6436}
6437
6438impl ToValue for ImageType {
6439    #[inline]
6440    fn to_value(&self) -> glib::Value {
6441        let mut value = glib::Value::for_value_type::<Self>();
6442        unsafe {
6443            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6444        }
6445        value
6446    }
6447
6448    #[inline]
6449    fn value_type(&self) -> glib::Type {
6450        Self::static_type()
6451    }
6452}
6453
6454impl From<ImageType> for glib::Value {
6455    #[inline]
6456    fn from(v: ImageType) -> Self {
6457        skip_assert_initialized!();
6458        ToValue::to_value(&v)
6459    }
6460}
6461
6462/// Describes primary purpose of the input widget.
6463///
6464/// This information is useful for on-screen keyboards and similar input
6465/// methods to decide which keys should be presented to the user.
6466///
6467/// Note that the purpose is not meant to impose a totally strict rule
6468/// about allowed characters, and does not replace input validation.
6469/// It is fine for an on-screen keyboard to let the user override the
6470/// character set restriction that is expressed by the purpose. The
6471/// application is expected to validate the entry contents, even if
6472/// it specified a purpose.
6473///
6474/// The difference between [`Digits`][Self::Digits] and
6475/// [`Number`][Self::Number] is that the former accepts only digits
6476/// while the latter also some punctuation (like commas or points, plus,
6477/// minus) and “e” or “E” as in 3.14E+000.
6478///
6479/// This enumeration may be extended in the future; input methods should
6480/// interpret unknown values as “free form”.
6481#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6482#[non_exhaustive]
6483#[doc(alias = "GtkInputPurpose")]
6484pub enum InputPurpose {
6485    /// Allow any character
6486    #[doc(alias = "GTK_INPUT_PURPOSE_FREE_FORM")]
6487    FreeForm,
6488    /// Allow only alphabetic characters
6489    #[doc(alias = "GTK_INPUT_PURPOSE_ALPHA")]
6490    Alpha,
6491    /// Allow only digits
6492    #[doc(alias = "GTK_INPUT_PURPOSE_DIGITS")]
6493    Digits,
6494    /// Edited field expects numbers
6495    #[doc(alias = "GTK_INPUT_PURPOSE_NUMBER")]
6496    Number,
6497    /// Edited field expects phone number
6498    #[doc(alias = "GTK_INPUT_PURPOSE_PHONE")]
6499    Phone,
6500    /// Edited field expects URL
6501    #[doc(alias = "GTK_INPUT_PURPOSE_URL")]
6502    Url,
6503    /// Edited field expects email address
6504    #[doc(alias = "GTK_INPUT_PURPOSE_EMAIL")]
6505    Email,
6506    /// Edited field expects the name of a person
6507    #[doc(alias = "GTK_INPUT_PURPOSE_NAME")]
6508    Name,
6509    /// Like [`FreeForm`][Self::FreeForm], but characters are hidden
6510    #[doc(alias = "GTK_INPUT_PURPOSE_PASSWORD")]
6511    Password,
6512    /// Like [`Digits`][Self::Digits], but characters are hidden
6513    #[doc(alias = "GTK_INPUT_PURPOSE_PIN")]
6514    Pin,
6515    /// Allow any character, in addition to control codes
6516    #[doc(alias = "GTK_INPUT_PURPOSE_TERMINAL")]
6517    Terminal,
6518    #[doc(hidden)]
6519    __Unknown(i32),
6520}
6521
6522#[doc(hidden)]
6523impl IntoGlib for InputPurpose {
6524    type GlibType = ffi::GtkInputPurpose;
6525
6526    #[inline]
6527    fn into_glib(self) -> ffi::GtkInputPurpose {
6528        match self {
6529            Self::FreeForm => ffi::GTK_INPUT_PURPOSE_FREE_FORM,
6530            Self::Alpha => ffi::GTK_INPUT_PURPOSE_ALPHA,
6531            Self::Digits => ffi::GTK_INPUT_PURPOSE_DIGITS,
6532            Self::Number => ffi::GTK_INPUT_PURPOSE_NUMBER,
6533            Self::Phone => ffi::GTK_INPUT_PURPOSE_PHONE,
6534            Self::Url => ffi::GTK_INPUT_PURPOSE_URL,
6535            Self::Email => ffi::GTK_INPUT_PURPOSE_EMAIL,
6536            Self::Name => ffi::GTK_INPUT_PURPOSE_NAME,
6537            Self::Password => ffi::GTK_INPUT_PURPOSE_PASSWORD,
6538            Self::Pin => ffi::GTK_INPUT_PURPOSE_PIN,
6539            Self::Terminal => ffi::GTK_INPUT_PURPOSE_TERMINAL,
6540            Self::__Unknown(value) => value,
6541        }
6542    }
6543}
6544
6545#[doc(hidden)]
6546impl FromGlib<ffi::GtkInputPurpose> for InputPurpose {
6547    #[inline]
6548    unsafe fn from_glib(value: ffi::GtkInputPurpose) -> Self {
6549        skip_assert_initialized!();
6550
6551        match value {
6552            ffi::GTK_INPUT_PURPOSE_FREE_FORM => Self::FreeForm,
6553            ffi::GTK_INPUT_PURPOSE_ALPHA => Self::Alpha,
6554            ffi::GTK_INPUT_PURPOSE_DIGITS => Self::Digits,
6555            ffi::GTK_INPUT_PURPOSE_NUMBER => Self::Number,
6556            ffi::GTK_INPUT_PURPOSE_PHONE => Self::Phone,
6557            ffi::GTK_INPUT_PURPOSE_URL => Self::Url,
6558            ffi::GTK_INPUT_PURPOSE_EMAIL => Self::Email,
6559            ffi::GTK_INPUT_PURPOSE_NAME => Self::Name,
6560            ffi::GTK_INPUT_PURPOSE_PASSWORD => Self::Password,
6561            ffi::GTK_INPUT_PURPOSE_PIN => Self::Pin,
6562            ffi::GTK_INPUT_PURPOSE_TERMINAL => Self::Terminal,
6563            value => Self::__Unknown(value),
6564        }
6565    }
6566}
6567
6568impl StaticType for InputPurpose {
6569    #[inline]
6570    #[doc(alias = "gtk_input_purpose_get_type")]
6571    fn static_type() -> glib::Type {
6572        unsafe { from_glib(ffi::gtk_input_purpose_get_type()) }
6573    }
6574}
6575
6576impl glib::HasParamSpec for InputPurpose {
6577    type ParamSpec = glib::ParamSpecEnum;
6578    type SetValue = Self;
6579    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6580
6581    fn param_spec_builder() -> Self::BuilderFn {
6582        Self::ParamSpec::builder_with_default
6583    }
6584}
6585
6586impl glib::value::ValueType for InputPurpose {
6587    type Type = Self;
6588}
6589
6590unsafe impl<'a> glib::value::FromValue<'a> for InputPurpose {
6591    type Checker = glib::value::GenericValueTypeChecker<Self>;
6592
6593    #[inline]
6594    unsafe fn from_value(value: &'a glib::Value) -> Self {
6595        skip_assert_initialized!();
6596        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6597    }
6598}
6599
6600impl ToValue for InputPurpose {
6601    #[inline]
6602    fn to_value(&self) -> glib::Value {
6603        let mut value = glib::Value::for_value_type::<Self>();
6604        unsafe {
6605            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6606        }
6607        value
6608    }
6609
6610    #[inline]
6611    fn value_type(&self) -> glib::Type {
6612        Self::static_type()
6613    }
6614}
6615
6616impl From<InputPurpose> for glib::Value {
6617    #[inline]
6618    fn from(v: InputPurpose) -> Self {
6619        skip_assert_initialized!();
6620        ToValue::to_value(&v)
6621    }
6622}
6623
6624/// The different methods to handle text in #GtkInscription when it doesn't
6625/// fit the available space.
6626#[cfg(feature = "v4_8")]
6627#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6628#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6629#[non_exhaustive]
6630#[doc(alias = "GtkInscriptionOverflow")]
6631pub enum InscriptionOverflow {
6632    /// Clip the remaining text
6633    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_CLIP")]
6634    Clip,
6635    /// Omit characters at the start of the text
6636    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_START")]
6637    EllipsizeStart,
6638    /// Omit characters at the middle of the text
6639    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_MIDDLE")]
6640    EllipsizeMiddle,
6641    /// Omit characters at the end of the text
6642    #[doc(alias = "GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_END")]
6643    EllipsizeEnd,
6644    #[doc(hidden)]
6645    __Unknown(i32),
6646}
6647
6648#[cfg(feature = "v4_8")]
6649#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6650#[doc(hidden)]
6651impl IntoGlib for InscriptionOverflow {
6652    type GlibType = ffi::GtkInscriptionOverflow;
6653
6654    #[inline]
6655    fn into_glib(self) -> ffi::GtkInscriptionOverflow {
6656        match self {
6657            Self::Clip => ffi::GTK_INSCRIPTION_OVERFLOW_CLIP,
6658            Self::EllipsizeStart => ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_START,
6659            Self::EllipsizeMiddle => ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_MIDDLE,
6660            Self::EllipsizeEnd => ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_END,
6661            Self::__Unknown(value) => value,
6662        }
6663    }
6664}
6665
6666#[cfg(feature = "v4_8")]
6667#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6668#[doc(hidden)]
6669impl FromGlib<ffi::GtkInscriptionOverflow> for InscriptionOverflow {
6670    #[inline]
6671    unsafe fn from_glib(value: ffi::GtkInscriptionOverflow) -> Self {
6672        skip_assert_initialized!();
6673
6674        match value {
6675            ffi::GTK_INSCRIPTION_OVERFLOW_CLIP => Self::Clip,
6676            ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_START => Self::EllipsizeStart,
6677            ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_MIDDLE => Self::EllipsizeMiddle,
6678            ffi::GTK_INSCRIPTION_OVERFLOW_ELLIPSIZE_END => Self::EllipsizeEnd,
6679            value => Self::__Unknown(value),
6680        }
6681    }
6682}
6683
6684#[cfg(feature = "v4_8")]
6685#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6686impl StaticType for InscriptionOverflow {
6687    #[inline]
6688    #[doc(alias = "gtk_inscription_overflow_get_type")]
6689    fn static_type() -> glib::Type {
6690        unsafe { from_glib(ffi::gtk_inscription_overflow_get_type()) }
6691    }
6692}
6693
6694#[cfg(feature = "v4_8")]
6695#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6696impl glib::HasParamSpec for InscriptionOverflow {
6697    type ParamSpec = glib::ParamSpecEnum;
6698    type SetValue = Self;
6699    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6700
6701    fn param_spec_builder() -> Self::BuilderFn {
6702        Self::ParamSpec::builder_with_default
6703    }
6704}
6705
6706#[cfg(feature = "v4_8")]
6707#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6708impl glib::value::ValueType for InscriptionOverflow {
6709    type Type = Self;
6710}
6711
6712#[cfg(feature = "v4_8")]
6713#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6714unsafe impl<'a> glib::value::FromValue<'a> for InscriptionOverflow {
6715    type Checker = glib::value::GenericValueTypeChecker<Self>;
6716
6717    #[inline]
6718    unsafe fn from_value(value: &'a glib::Value) -> Self {
6719        skip_assert_initialized!();
6720        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6721    }
6722}
6723
6724#[cfg(feature = "v4_8")]
6725#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6726impl ToValue for InscriptionOverflow {
6727    #[inline]
6728    fn to_value(&self) -> glib::Value {
6729        let mut value = glib::Value::for_value_type::<Self>();
6730        unsafe {
6731            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6732        }
6733        value
6734    }
6735
6736    #[inline]
6737    fn value_type(&self) -> glib::Type {
6738        Self::static_type()
6739    }
6740}
6741
6742#[cfg(feature = "v4_8")]
6743#[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
6744impl From<InscriptionOverflow> for glib::Value {
6745    #[inline]
6746    fn from(v: InscriptionOverflow) -> Self {
6747        skip_assert_initialized!();
6748        ToValue::to_value(&v)
6749    }
6750}
6751
6752/// Values for the [`gtk-interface-color-scheme`][struct@crate::Settings#gtk-interface-color-scheme]
6753/// and [`prefers-color-scheme`][struct@crate::CssProvider#prefers-color-scheme] properties
6754/// that indicates what color scheme is used.
6755///
6756/// This information can be used inside CSS via media queries.
6757///
6758/// More values may be added to this enumeration. Unknown values
6759/// should be treated the same as `GTK_INTERFACE_COLOR_SCHEME_DEFAULT`.
6760#[cfg(feature = "v4_20")]
6761#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6762#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6763#[non_exhaustive]
6764#[doc(alias = "GtkInterfaceColorScheme")]
6765pub enum InterfaceColorScheme {
6766    /// The system doesn't support color schemes
6767    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_UNSUPPORTED")]
6768    Unsupported,
6769    /// The default color scheme is used
6770    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_DEFAULT")]
6771    Default,
6772    /// A dark color scheme is used
6773    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_DARK")]
6774    Dark,
6775    /// A light color scheme is used
6776    #[doc(alias = "GTK_INTERFACE_COLOR_SCHEME_LIGHT")]
6777    Light,
6778    #[doc(hidden)]
6779    __Unknown(i32),
6780}
6781
6782#[cfg(feature = "v4_20")]
6783#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6784#[doc(hidden)]
6785impl IntoGlib for InterfaceColorScheme {
6786    type GlibType = ffi::GtkInterfaceColorScheme;
6787
6788    #[inline]
6789    fn into_glib(self) -> ffi::GtkInterfaceColorScheme {
6790        match self {
6791            Self::Unsupported => ffi::GTK_INTERFACE_COLOR_SCHEME_UNSUPPORTED,
6792            Self::Default => ffi::GTK_INTERFACE_COLOR_SCHEME_DEFAULT,
6793            Self::Dark => ffi::GTK_INTERFACE_COLOR_SCHEME_DARK,
6794            Self::Light => ffi::GTK_INTERFACE_COLOR_SCHEME_LIGHT,
6795            Self::__Unknown(value) => value,
6796        }
6797    }
6798}
6799
6800#[cfg(feature = "v4_20")]
6801#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6802#[doc(hidden)]
6803impl FromGlib<ffi::GtkInterfaceColorScheme> for InterfaceColorScheme {
6804    #[inline]
6805    unsafe fn from_glib(value: ffi::GtkInterfaceColorScheme) -> Self {
6806        skip_assert_initialized!();
6807
6808        match value {
6809            ffi::GTK_INTERFACE_COLOR_SCHEME_UNSUPPORTED => Self::Unsupported,
6810            ffi::GTK_INTERFACE_COLOR_SCHEME_DEFAULT => Self::Default,
6811            ffi::GTK_INTERFACE_COLOR_SCHEME_DARK => Self::Dark,
6812            ffi::GTK_INTERFACE_COLOR_SCHEME_LIGHT => Self::Light,
6813            value => Self::__Unknown(value),
6814        }
6815    }
6816}
6817
6818#[cfg(feature = "v4_20")]
6819#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6820impl StaticType for InterfaceColorScheme {
6821    #[inline]
6822    #[doc(alias = "gtk_interface_color_scheme_get_type")]
6823    fn static_type() -> glib::Type {
6824        unsafe { from_glib(ffi::gtk_interface_color_scheme_get_type()) }
6825    }
6826}
6827
6828#[cfg(feature = "v4_20")]
6829#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6830impl glib::HasParamSpec for InterfaceColorScheme {
6831    type ParamSpec = glib::ParamSpecEnum;
6832    type SetValue = Self;
6833    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6834
6835    fn param_spec_builder() -> Self::BuilderFn {
6836        Self::ParamSpec::builder_with_default
6837    }
6838}
6839
6840#[cfg(feature = "v4_20")]
6841#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6842impl glib::value::ValueType for InterfaceColorScheme {
6843    type Type = Self;
6844}
6845
6846#[cfg(feature = "v4_20")]
6847#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6848unsafe impl<'a> glib::value::FromValue<'a> for InterfaceColorScheme {
6849    type Checker = glib::value::GenericValueTypeChecker<Self>;
6850
6851    #[inline]
6852    unsafe fn from_value(value: &'a glib::Value) -> Self {
6853        skip_assert_initialized!();
6854        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6855    }
6856}
6857
6858#[cfg(feature = "v4_20")]
6859#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6860impl ToValue for InterfaceColorScheme {
6861    #[inline]
6862    fn to_value(&self) -> glib::Value {
6863        let mut value = glib::Value::for_value_type::<Self>();
6864        unsafe {
6865            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
6866        }
6867        value
6868    }
6869
6870    #[inline]
6871    fn value_type(&self) -> glib::Type {
6872        Self::static_type()
6873    }
6874}
6875
6876#[cfg(feature = "v4_20")]
6877#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6878impl From<InterfaceColorScheme> for glib::Value {
6879    #[inline]
6880    fn from(v: InterfaceColorScheme) -> Self {
6881        skip_assert_initialized!();
6882        ToValue::to_value(&v)
6883    }
6884}
6885
6886/// Values for the [`gtk-interface-contrast`][struct@crate::Settings#gtk-interface-contrast]
6887/// and [`prefers-contrast`][struct@crate::CssProvider#prefers-contrast] properties
6888/// that indicates the preferred level of contrast.
6889///
6890/// This information can be used inside CSS via media queries.
6891///
6892/// More values may be added to this enumeration. Unknown values
6893/// should be treated the same as `GTK_INTERFACE_CONTRAST_NO_PREFERENCE`.
6894#[cfg(feature = "v4_20")]
6895#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6896#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
6897#[non_exhaustive]
6898#[doc(alias = "GtkInterfaceContrast")]
6899pub enum InterfaceContrast {
6900    /// The system doesn't support contrast levels
6901    #[doc(alias = "GTK_INTERFACE_CONTRAST_UNSUPPORTED")]
6902    Unsupported,
6903    /// No particular preference for contrast
6904    #[doc(alias = "GTK_INTERFACE_CONTRAST_NO_PREFERENCE")]
6905    NoPreference,
6906    /// More contrast is preferred
6907    #[doc(alias = "GTK_INTERFACE_CONTRAST_MORE")]
6908    More,
6909    /// Less contrast is preferred
6910    #[doc(alias = "GTK_INTERFACE_CONTRAST_LESS")]
6911    Less,
6912    #[doc(hidden)]
6913    __Unknown(i32),
6914}
6915
6916#[cfg(feature = "v4_20")]
6917#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6918#[doc(hidden)]
6919impl IntoGlib for InterfaceContrast {
6920    type GlibType = ffi::GtkInterfaceContrast;
6921
6922    #[inline]
6923    fn into_glib(self) -> ffi::GtkInterfaceContrast {
6924        match self {
6925            Self::Unsupported => ffi::GTK_INTERFACE_CONTRAST_UNSUPPORTED,
6926            Self::NoPreference => ffi::GTK_INTERFACE_CONTRAST_NO_PREFERENCE,
6927            Self::More => ffi::GTK_INTERFACE_CONTRAST_MORE,
6928            Self::Less => ffi::GTK_INTERFACE_CONTRAST_LESS,
6929            Self::__Unknown(value) => value,
6930        }
6931    }
6932}
6933
6934#[cfg(feature = "v4_20")]
6935#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6936#[doc(hidden)]
6937impl FromGlib<ffi::GtkInterfaceContrast> for InterfaceContrast {
6938    #[inline]
6939    unsafe fn from_glib(value: ffi::GtkInterfaceContrast) -> Self {
6940        skip_assert_initialized!();
6941
6942        match value {
6943            ffi::GTK_INTERFACE_CONTRAST_UNSUPPORTED => Self::Unsupported,
6944            ffi::GTK_INTERFACE_CONTRAST_NO_PREFERENCE => Self::NoPreference,
6945            ffi::GTK_INTERFACE_CONTRAST_MORE => Self::More,
6946            ffi::GTK_INTERFACE_CONTRAST_LESS => Self::Less,
6947            value => Self::__Unknown(value),
6948        }
6949    }
6950}
6951
6952#[cfg(feature = "v4_20")]
6953#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6954impl StaticType for InterfaceContrast {
6955    #[inline]
6956    #[doc(alias = "gtk_interface_contrast_get_type")]
6957    fn static_type() -> glib::Type {
6958        unsafe { from_glib(ffi::gtk_interface_contrast_get_type()) }
6959    }
6960}
6961
6962#[cfg(feature = "v4_20")]
6963#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6964impl glib::HasParamSpec for InterfaceContrast {
6965    type ParamSpec = glib::ParamSpecEnum;
6966    type SetValue = Self;
6967    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
6968
6969    fn param_spec_builder() -> Self::BuilderFn {
6970        Self::ParamSpec::builder_with_default
6971    }
6972}
6973
6974#[cfg(feature = "v4_20")]
6975#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6976impl glib::value::ValueType for InterfaceContrast {
6977    type Type = Self;
6978}
6979
6980#[cfg(feature = "v4_20")]
6981#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6982unsafe impl<'a> glib::value::FromValue<'a> for InterfaceContrast {
6983    type Checker = glib::value::GenericValueTypeChecker<Self>;
6984
6985    #[inline]
6986    unsafe fn from_value(value: &'a glib::Value) -> Self {
6987        skip_assert_initialized!();
6988        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
6989    }
6990}
6991
6992#[cfg(feature = "v4_20")]
6993#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
6994impl ToValue for InterfaceContrast {
6995    #[inline]
6996    fn to_value(&self) -> glib::Value {
6997        let mut value = glib::Value::for_value_type::<Self>();
6998        unsafe {
6999            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7000        }
7001        value
7002    }
7003
7004    #[inline]
7005    fn value_type(&self) -> glib::Type {
7006        Self::static_type()
7007    }
7008}
7009
7010#[cfg(feature = "v4_20")]
7011#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
7012impl From<InterfaceContrast> for glib::Value {
7013    #[inline]
7014    fn from(v: InterfaceContrast) -> Self {
7015        skip_assert_initialized!();
7016        ToValue::to_value(&v)
7017    }
7018}
7019
7020/// Used for justifying the text inside a [`Label`][crate::Label] widget.
7021#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7022#[non_exhaustive]
7023#[doc(alias = "GtkJustification")]
7024pub enum Justification {
7025    /// The text is placed at the left edge of the label.
7026    #[doc(alias = "GTK_JUSTIFY_LEFT")]
7027    Left,
7028    /// The text is placed at the right edge of the label.
7029    #[doc(alias = "GTK_JUSTIFY_RIGHT")]
7030    Right,
7031    /// The text is placed in the center of the label.
7032    #[doc(alias = "GTK_JUSTIFY_CENTER")]
7033    Center,
7034    /// The text is placed is distributed across the label.
7035    #[doc(alias = "GTK_JUSTIFY_FILL")]
7036    Fill,
7037    #[doc(hidden)]
7038    __Unknown(i32),
7039}
7040
7041#[doc(hidden)]
7042impl IntoGlib for Justification {
7043    type GlibType = ffi::GtkJustification;
7044
7045    #[inline]
7046    fn into_glib(self) -> ffi::GtkJustification {
7047        match self {
7048            Self::Left => ffi::GTK_JUSTIFY_LEFT,
7049            Self::Right => ffi::GTK_JUSTIFY_RIGHT,
7050            Self::Center => ffi::GTK_JUSTIFY_CENTER,
7051            Self::Fill => ffi::GTK_JUSTIFY_FILL,
7052            Self::__Unknown(value) => value,
7053        }
7054    }
7055}
7056
7057#[doc(hidden)]
7058impl FromGlib<ffi::GtkJustification> for Justification {
7059    #[inline]
7060    unsafe fn from_glib(value: ffi::GtkJustification) -> Self {
7061        skip_assert_initialized!();
7062
7063        match value {
7064            ffi::GTK_JUSTIFY_LEFT => Self::Left,
7065            ffi::GTK_JUSTIFY_RIGHT => Self::Right,
7066            ffi::GTK_JUSTIFY_CENTER => Self::Center,
7067            ffi::GTK_JUSTIFY_FILL => Self::Fill,
7068            value => Self::__Unknown(value),
7069        }
7070    }
7071}
7072
7073impl StaticType for Justification {
7074    #[inline]
7075    #[doc(alias = "gtk_justification_get_type")]
7076    fn static_type() -> glib::Type {
7077        unsafe { from_glib(ffi::gtk_justification_get_type()) }
7078    }
7079}
7080
7081impl glib::HasParamSpec for Justification {
7082    type ParamSpec = glib::ParamSpecEnum;
7083    type SetValue = Self;
7084    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7085
7086    fn param_spec_builder() -> Self::BuilderFn {
7087        Self::ParamSpec::builder_with_default
7088    }
7089}
7090
7091impl glib::value::ValueType for Justification {
7092    type Type = Self;
7093}
7094
7095unsafe impl<'a> glib::value::FromValue<'a> for Justification {
7096    type Checker = glib::value::GenericValueTypeChecker<Self>;
7097
7098    #[inline]
7099    unsafe fn from_value(value: &'a glib::Value) -> Self {
7100        skip_assert_initialized!();
7101        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7102    }
7103}
7104
7105impl ToValue for Justification {
7106    #[inline]
7107    fn to_value(&self) -> glib::Value {
7108        let mut value = glib::Value::for_value_type::<Self>();
7109        unsafe {
7110            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7111        }
7112        value
7113    }
7114
7115    #[inline]
7116    fn value_type(&self) -> glib::Type {
7117        Self::static_type()
7118    }
7119}
7120
7121impl From<Justification> for glib::Value {
7122    #[inline]
7123    fn from(v: Justification) -> Self {
7124        skip_assert_initialized!();
7125        ToValue::to_value(&v)
7126    }
7127}
7128
7129/// Describes how [`LevelBar`][crate::LevelBar] contents should be rendered.
7130///
7131/// Note that this enumeration could be extended with additional modes
7132/// in the future.
7133#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7134#[non_exhaustive]
7135#[doc(alias = "GtkLevelBarMode")]
7136pub enum LevelBarMode {
7137    /// the bar has a continuous mode
7138    #[doc(alias = "GTK_LEVEL_BAR_MODE_CONTINUOUS")]
7139    Continuous,
7140    /// the bar has a discrete mode
7141    #[doc(alias = "GTK_LEVEL_BAR_MODE_DISCRETE")]
7142    Discrete,
7143    #[doc(hidden)]
7144    __Unknown(i32),
7145}
7146
7147#[doc(hidden)]
7148impl IntoGlib for LevelBarMode {
7149    type GlibType = ffi::GtkLevelBarMode;
7150
7151    #[inline]
7152    fn into_glib(self) -> ffi::GtkLevelBarMode {
7153        match self {
7154            Self::Continuous => ffi::GTK_LEVEL_BAR_MODE_CONTINUOUS,
7155            Self::Discrete => ffi::GTK_LEVEL_BAR_MODE_DISCRETE,
7156            Self::__Unknown(value) => value,
7157        }
7158    }
7159}
7160
7161#[doc(hidden)]
7162impl FromGlib<ffi::GtkLevelBarMode> for LevelBarMode {
7163    #[inline]
7164    unsafe fn from_glib(value: ffi::GtkLevelBarMode) -> Self {
7165        skip_assert_initialized!();
7166
7167        match value {
7168            ffi::GTK_LEVEL_BAR_MODE_CONTINUOUS => Self::Continuous,
7169            ffi::GTK_LEVEL_BAR_MODE_DISCRETE => Self::Discrete,
7170            value => Self::__Unknown(value),
7171        }
7172    }
7173}
7174
7175impl StaticType for LevelBarMode {
7176    #[inline]
7177    #[doc(alias = "gtk_level_bar_mode_get_type")]
7178    fn static_type() -> glib::Type {
7179        unsafe { from_glib(ffi::gtk_level_bar_mode_get_type()) }
7180    }
7181}
7182
7183impl glib::HasParamSpec for LevelBarMode {
7184    type ParamSpec = glib::ParamSpecEnum;
7185    type SetValue = Self;
7186    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7187
7188    fn param_spec_builder() -> Self::BuilderFn {
7189        Self::ParamSpec::builder_with_default
7190    }
7191}
7192
7193impl glib::value::ValueType for LevelBarMode {
7194    type Type = Self;
7195}
7196
7197unsafe impl<'a> glib::value::FromValue<'a> for LevelBarMode {
7198    type Checker = glib::value::GenericValueTypeChecker<Self>;
7199
7200    #[inline]
7201    unsafe fn from_value(value: &'a glib::Value) -> Self {
7202        skip_assert_initialized!();
7203        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7204    }
7205}
7206
7207impl ToValue for LevelBarMode {
7208    #[inline]
7209    fn to_value(&self) -> glib::Value {
7210        let mut value = glib::Value::for_value_type::<Self>();
7211        unsafe {
7212            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7213        }
7214        value
7215    }
7216
7217    #[inline]
7218    fn value_type(&self) -> glib::Type {
7219        Self::static_type()
7220    }
7221}
7222
7223impl From<LevelBarMode> for glib::Value {
7224    #[inline]
7225    fn from(v: LevelBarMode) -> Self {
7226        skip_assert_initialized!();
7227        ToValue::to_value(&v)
7228    }
7229}
7230
7231/// The type of license for an application.
7232///
7233/// This enumeration can be expanded at later date.
7234#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7235#[non_exhaustive]
7236#[doc(alias = "GtkLicense")]
7237pub enum License {
7238    /// No license specified
7239    #[doc(alias = "GTK_LICENSE_UNKNOWN")]
7240    Unknown,
7241    /// A license text is going to be specified by the
7242    ///   developer
7243    #[doc(alias = "GTK_LICENSE_CUSTOM")]
7244    Custom,
7245    /// The GNU General Public License, version 2.0 or later
7246    #[doc(alias = "GTK_LICENSE_GPL_2_0")]
7247    Gpl20,
7248    /// The GNU General Public License, version 3.0 or later
7249    #[doc(alias = "GTK_LICENSE_GPL_3_0")]
7250    Gpl30,
7251    /// The GNU Lesser General Public License, version 2.1 or later
7252    #[doc(alias = "GTK_LICENSE_LGPL_2_1")]
7253    Lgpl21,
7254    /// The GNU Lesser General Public License, version 3.0 or later
7255    #[doc(alias = "GTK_LICENSE_LGPL_3_0")]
7256    Lgpl30,
7257    /// The BSD standard license
7258    #[doc(alias = "GTK_LICENSE_BSD")]
7259    Bsd,
7260    /// The MIT/X11 standard license
7261    #[doc(alias = "GTK_LICENSE_MIT_X11")]
7262    MitX11,
7263    /// The Artistic License, version 2.0
7264    #[doc(alias = "GTK_LICENSE_ARTISTIC")]
7265    Artistic,
7266    /// The GNU General Public License, version 2.0 only
7267    #[doc(alias = "GTK_LICENSE_GPL_2_0_ONLY")]
7268    Gpl20Only,
7269    /// The GNU General Public License, version 3.0 only
7270    #[doc(alias = "GTK_LICENSE_GPL_3_0_ONLY")]
7271    Gpl30Only,
7272    /// The GNU Lesser General Public License, version 2.1 only
7273    #[doc(alias = "GTK_LICENSE_LGPL_2_1_ONLY")]
7274    Lgpl21Only,
7275    /// The GNU Lesser General Public License, version 3.0 only
7276    #[doc(alias = "GTK_LICENSE_LGPL_3_0_ONLY")]
7277    Lgpl30Only,
7278    /// The GNU Affero General Public License, version 3.0 or later
7279    #[doc(alias = "GTK_LICENSE_AGPL_3_0")]
7280    Agpl30,
7281    /// The GNU Affero General Public License, version 3.0 only
7282    #[doc(alias = "GTK_LICENSE_AGPL_3_0_ONLY")]
7283    Agpl30Only,
7284    /// The 3-clause BSD licence
7285    #[doc(alias = "GTK_LICENSE_BSD_3")]
7286    Bsd3,
7287    /// The Apache License, version 2.0
7288    #[doc(alias = "GTK_LICENSE_APACHE_2_0")]
7289    Apache20,
7290    /// The Mozilla Public License, version 2.0
7291    #[doc(alias = "GTK_LICENSE_MPL_2_0")]
7292    Mpl20,
7293    /// Zero-Clause BSD license
7294    #[cfg(feature = "v4_14")]
7295    #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
7296    #[doc(alias = "GTK_LICENSE_0BSD")]
7297    _0bsd,
7298    #[doc(hidden)]
7299    __Unknown(i32),
7300}
7301
7302#[doc(hidden)]
7303impl IntoGlib for License {
7304    type GlibType = ffi::GtkLicense;
7305
7306    fn into_glib(self) -> ffi::GtkLicense {
7307        match self {
7308            Self::Unknown => ffi::GTK_LICENSE_UNKNOWN,
7309            Self::Custom => ffi::GTK_LICENSE_CUSTOM,
7310            Self::Gpl20 => ffi::GTK_LICENSE_GPL_2_0,
7311            Self::Gpl30 => ffi::GTK_LICENSE_GPL_3_0,
7312            Self::Lgpl21 => ffi::GTK_LICENSE_LGPL_2_1,
7313            Self::Lgpl30 => ffi::GTK_LICENSE_LGPL_3_0,
7314            Self::Bsd => ffi::GTK_LICENSE_BSD,
7315            Self::MitX11 => ffi::GTK_LICENSE_MIT_X11,
7316            Self::Artistic => ffi::GTK_LICENSE_ARTISTIC,
7317            Self::Gpl20Only => ffi::GTK_LICENSE_GPL_2_0_ONLY,
7318            Self::Gpl30Only => ffi::GTK_LICENSE_GPL_3_0_ONLY,
7319            Self::Lgpl21Only => ffi::GTK_LICENSE_LGPL_2_1_ONLY,
7320            Self::Lgpl30Only => ffi::GTK_LICENSE_LGPL_3_0_ONLY,
7321            Self::Agpl30 => ffi::GTK_LICENSE_AGPL_3_0,
7322            Self::Agpl30Only => ffi::GTK_LICENSE_AGPL_3_0_ONLY,
7323            Self::Bsd3 => ffi::GTK_LICENSE_BSD_3,
7324            Self::Apache20 => ffi::GTK_LICENSE_APACHE_2_0,
7325            Self::Mpl20 => ffi::GTK_LICENSE_MPL_2_0,
7326            #[cfg(feature = "v4_14")]
7327            Self::_0bsd => ffi::GTK_LICENSE_0BSD,
7328            Self::__Unknown(value) => value,
7329        }
7330    }
7331}
7332
7333#[doc(hidden)]
7334impl FromGlib<ffi::GtkLicense> for License {
7335    unsafe fn from_glib(value: ffi::GtkLicense) -> Self {
7336        skip_assert_initialized!();
7337
7338        match value {
7339            ffi::GTK_LICENSE_UNKNOWN => Self::Unknown,
7340            ffi::GTK_LICENSE_CUSTOM => Self::Custom,
7341            ffi::GTK_LICENSE_GPL_2_0 => Self::Gpl20,
7342            ffi::GTK_LICENSE_GPL_3_0 => Self::Gpl30,
7343            ffi::GTK_LICENSE_LGPL_2_1 => Self::Lgpl21,
7344            ffi::GTK_LICENSE_LGPL_3_0 => Self::Lgpl30,
7345            ffi::GTK_LICENSE_BSD => Self::Bsd,
7346            ffi::GTK_LICENSE_MIT_X11 => Self::MitX11,
7347            ffi::GTK_LICENSE_ARTISTIC => Self::Artistic,
7348            ffi::GTK_LICENSE_GPL_2_0_ONLY => Self::Gpl20Only,
7349            ffi::GTK_LICENSE_GPL_3_0_ONLY => Self::Gpl30Only,
7350            ffi::GTK_LICENSE_LGPL_2_1_ONLY => Self::Lgpl21Only,
7351            ffi::GTK_LICENSE_LGPL_3_0_ONLY => Self::Lgpl30Only,
7352            ffi::GTK_LICENSE_AGPL_3_0 => Self::Agpl30,
7353            ffi::GTK_LICENSE_AGPL_3_0_ONLY => Self::Agpl30Only,
7354            ffi::GTK_LICENSE_BSD_3 => Self::Bsd3,
7355            ffi::GTK_LICENSE_APACHE_2_0 => Self::Apache20,
7356            ffi::GTK_LICENSE_MPL_2_0 => Self::Mpl20,
7357            #[cfg(feature = "v4_14")]
7358            ffi::GTK_LICENSE_0BSD => Self::_0bsd,
7359            value => Self::__Unknown(value),
7360        }
7361    }
7362}
7363
7364impl StaticType for License {
7365    #[inline]
7366    #[doc(alias = "gtk_license_get_type")]
7367    fn static_type() -> glib::Type {
7368        unsafe { from_glib(ffi::gtk_license_get_type()) }
7369    }
7370}
7371
7372impl glib::HasParamSpec for License {
7373    type ParamSpec = glib::ParamSpecEnum;
7374    type SetValue = Self;
7375    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7376
7377    fn param_spec_builder() -> Self::BuilderFn {
7378        Self::ParamSpec::builder_with_default
7379    }
7380}
7381
7382impl glib::value::ValueType for License {
7383    type Type = Self;
7384}
7385
7386unsafe impl<'a> glib::value::FromValue<'a> for License {
7387    type Checker = glib::value::GenericValueTypeChecker<Self>;
7388
7389    #[inline]
7390    unsafe fn from_value(value: &'a glib::Value) -> Self {
7391        skip_assert_initialized!();
7392        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7393    }
7394}
7395
7396impl ToValue for License {
7397    #[inline]
7398    fn to_value(&self) -> glib::Value {
7399        let mut value = glib::Value::for_value_type::<Self>();
7400        unsafe {
7401            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7402        }
7403        value
7404    }
7405
7406    #[inline]
7407    fn value_type(&self) -> glib::Type {
7408        Self::static_type()
7409    }
7410}
7411
7412impl From<License> for glib::Value {
7413    #[inline]
7414    fn from(v: License) -> Self {
7415        skip_assert_initialized!();
7416        ToValue::to_value(&v)
7417    }
7418}
7419
7420/// Used to configure the focus behavior in the `GTK_DIR_TAB_FORWARD`
7421/// and `GTK_DIR_TAB_BACKWARD` direction, like the <kbd>Tab</kbd> key
7422/// in a [`ListView`][crate::ListView].
7423#[cfg(feature = "v4_12")]
7424#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7425#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7426#[non_exhaustive]
7427#[doc(alias = "GtkListTabBehavior")]
7428pub enum ListTabBehavior {
7429    /// Cycle through all focusable items of the list
7430    #[doc(alias = "GTK_LIST_TAB_ALL")]
7431    All,
7432    /// Cycle through a single list element, then move
7433    ///   focus out of the list. Moving focus between items needs to be
7434    ///   done with the arrow keys.
7435    #[doc(alias = "GTK_LIST_TAB_ITEM")]
7436    Item,
7437    /// Cycle only through a single cell, then
7438    ///   move focus out of the list. Moving focus between cells needs to
7439    ///   be done with the arrow keys. This is only relevant for
7440    ///   cell-based widgets like #GtkColumnView, otherwise it behaves
7441    ///   like `GTK_LIST_TAB_ITEM`.
7442    #[doc(alias = "GTK_LIST_TAB_CELL")]
7443    Cell,
7444    #[doc(hidden)]
7445    __Unknown(i32),
7446}
7447
7448#[cfg(feature = "v4_12")]
7449#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7450#[doc(hidden)]
7451impl IntoGlib for ListTabBehavior {
7452    type GlibType = ffi::GtkListTabBehavior;
7453
7454    #[inline]
7455    fn into_glib(self) -> ffi::GtkListTabBehavior {
7456        match self {
7457            Self::All => ffi::GTK_LIST_TAB_ALL,
7458            Self::Item => ffi::GTK_LIST_TAB_ITEM,
7459            Self::Cell => ffi::GTK_LIST_TAB_CELL,
7460            Self::__Unknown(value) => value,
7461        }
7462    }
7463}
7464
7465#[cfg(feature = "v4_12")]
7466#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7467#[doc(hidden)]
7468impl FromGlib<ffi::GtkListTabBehavior> for ListTabBehavior {
7469    #[inline]
7470    unsafe fn from_glib(value: ffi::GtkListTabBehavior) -> Self {
7471        skip_assert_initialized!();
7472
7473        match value {
7474            ffi::GTK_LIST_TAB_ALL => Self::All,
7475            ffi::GTK_LIST_TAB_ITEM => Self::Item,
7476            ffi::GTK_LIST_TAB_CELL => Self::Cell,
7477            value => Self::__Unknown(value),
7478        }
7479    }
7480}
7481
7482#[cfg(feature = "v4_12")]
7483#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7484impl StaticType for ListTabBehavior {
7485    #[inline]
7486    #[doc(alias = "gtk_list_tab_behavior_get_type")]
7487    fn static_type() -> glib::Type {
7488        unsafe { from_glib(ffi::gtk_list_tab_behavior_get_type()) }
7489    }
7490}
7491
7492#[cfg(feature = "v4_12")]
7493#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7494impl glib::HasParamSpec for ListTabBehavior {
7495    type ParamSpec = glib::ParamSpecEnum;
7496    type SetValue = Self;
7497    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7498
7499    fn param_spec_builder() -> Self::BuilderFn {
7500        Self::ParamSpec::builder_with_default
7501    }
7502}
7503
7504#[cfg(feature = "v4_12")]
7505#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7506impl glib::value::ValueType for ListTabBehavior {
7507    type Type = Self;
7508}
7509
7510#[cfg(feature = "v4_12")]
7511#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7512unsafe impl<'a> glib::value::FromValue<'a> for ListTabBehavior {
7513    type Checker = glib::value::GenericValueTypeChecker<Self>;
7514
7515    #[inline]
7516    unsafe fn from_value(value: &'a glib::Value) -> Self {
7517        skip_assert_initialized!();
7518        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7519    }
7520}
7521
7522#[cfg(feature = "v4_12")]
7523#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7524impl ToValue for ListTabBehavior {
7525    #[inline]
7526    fn to_value(&self) -> glib::Value {
7527        let mut value = glib::Value::for_value_type::<Self>();
7528        unsafe {
7529            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7530        }
7531        value
7532    }
7533
7534    #[inline]
7535    fn value_type(&self) -> glib::Type {
7536        Self::static_type()
7537    }
7538}
7539
7540#[cfg(feature = "v4_12")]
7541#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
7542impl From<ListTabBehavior> for glib::Value {
7543    #[inline]
7544    fn from(v: ListTabBehavior) -> Self {
7545        skip_assert_initialized!();
7546        ToValue::to_value(&v)
7547    }
7548}
7549
7550/// The type of message being displayed in a [`MessageDialog`][crate::MessageDialog].
7551#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7552#[non_exhaustive]
7553#[doc(alias = "GtkMessageType")]
7554pub enum MessageType {
7555    /// Informational message
7556    #[doc(alias = "GTK_MESSAGE_INFO")]
7557    Info,
7558    /// Non-fatal warning message
7559    #[doc(alias = "GTK_MESSAGE_WARNING")]
7560    Warning,
7561    /// Question requiring a choice
7562    #[doc(alias = "GTK_MESSAGE_QUESTION")]
7563    Question,
7564    /// Fatal error message
7565    #[doc(alias = "GTK_MESSAGE_ERROR")]
7566    Error,
7567    /// None of the above
7568    #[doc(alias = "GTK_MESSAGE_OTHER")]
7569    Other,
7570    #[doc(hidden)]
7571    __Unknown(i32),
7572}
7573
7574#[doc(hidden)]
7575impl IntoGlib for MessageType {
7576    type GlibType = ffi::GtkMessageType;
7577
7578    #[inline]
7579    fn into_glib(self) -> ffi::GtkMessageType {
7580        match self {
7581            Self::Info => ffi::GTK_MESSAGE_INFO,
7582            Self::Warning => ffi::GTK_MESSAGE_WARNING,
7583            Self::Question => ffi::GTK_MESSAGE_QUESTION,
7584            Self::Error => ffi::GTK_MESSAGE_ERROR,
7585            Self::Other => ffi::GTK_MESSAGE_OTHER,
7586            Self::__Unknown(value) => value,
7587        }
7588    }
7589}
7590
7591#[doc(hidden)]
7592impl FromGlib<ffi::GtkMessageType> for MessageType {
7593    #[inline]
7594    unsafe fn from_glib(value: ffi::GtkMessageType) -> Self {
7595        skip_assert_initialized!();
7596
7597        match value {
7598            ffi::GTK_MESSAGE_INFO => Self::Info,
7599            ffi::GTK_MESSAGE_WARNING => Self::Warning,
7600            ffi::GTK_MESSAGE_QUESTION => Self::Question,
7601            ffi::GTK_MESSAGE_ERROR => Self::Error,
7602            ffi::GTK_MESSAGE_OTHER => Self::Other,
7603            value => Self::__Unknown(value),
7604        }
7605    }
7606}
7607
7608impl StaticType for MessageType {
7609    #[inline]
7610    #[doc(alias = "gtk_message_type_get_type")]
7611    fn static_type() -> glib::Type {
7612        unsafe { from_glib(ffi::gtk_message_type_get_type()) }
7613    }
7614}
7615
7616impl glib::HasParamSpec for MessageType {
7617    type ParamSpec = glib::ParamSpecEnum;
7618    type SetValue = Self;
7619    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7620
7621    fn param_spec_builder() -> Self::BuilderFn {
7622        Self::ParamSpec::builder_with_default
7623    }
7624}
7625
7626impl glib::value::ValueType for MessageType {
7627    type Type = Self;
7628}
7629
7630unsafe impl<'a> glib::value::FromValue<'a> for MessageType {
7631    type Checker = glib::value::GenericValueTypeChecker<Self>;
7632
7633    #[inline]
7634    unsafe fn from_value(value: &'a glib::Value) -> Self {
7635        skip_assert_initialized!();
7636        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7637    }
7638}
7639
7640impl ToValue for MessageType {
7641    #[inline]
7642    fn to_value(&self) -> glib::Value {
7643        let mut value = glib::Value::for_value_type::<Self>();
7644        unsafe {
7645            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7646        }
7647        value
7648    }
7649
7650    #[inline]
7651    fn value_type(&self) -> glib::Type {
7652        Self::static_type()
7653    }
7654}
7655
7656impl From<MessageType> for glib::Value {
7657    #[inline]
7658    fn from(v: MessageType) -> Self {
7659        skip_assert_initialized!();
7660        ToValue::to_value(&v)
7661    }
7662}
7663
7664/// Passed as argument to various keybinding signals for moving the
7665/// cursor position.
7666#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7667#[non_exhaustive]
7668#[doc(alias = "GtkMovementStep")]
7669pub enum MovementStep {
7670    /// Move forward or back by graphemes
7671    #[doc(alias = "GTK_MOVEMENT_LOGICAL_POSITIONS")]
7672    LogicalPositions,
7673    /// Move left or right by graphemes
7674    #[doc(alias = "GTK_MOVEMENT_VISUAL_POSITIONS")]
7675    VisualPositions,
7676    /// Move forward or back by words
7677    #[doc(alias = "GTK_MOVEMENT_WORDS")]
7678    Words,
7679    /// Move up or down lines (wrapped lines)
7680    #[doc(alias = "GTK_MOVEMENT_DISPLAY_LINES")]
7681    DisplayLines,
7682    /// Move to either end of a line
7683    #[doc(alias = "GTK_MOVEMENT_DISPLAY_LINE_ENDS")]
7684    DisplayLineEnds,
7685    /// Move up or down paragraphs (newline-ended lines)
7686    #[doc(alias = "GTK_MOVEMENT_PARAGRAPHS")]
7687    Paragraphs,
7688    /// Move to either end of a paragraph
7689    #[doc(alias = "GTK_MOVEMENT_PARAGRAPH_ENDS")]
7690    ParagraphEnds,
7691    /// Move by pages
7692    #[doc(alias = "GTK_MOVEMENT_PAGES")]
7693    Pages,
7694    /// Move to ends of the buffer
7695    #[doc(alias = "GTK_MOVEMENT_BUFFER_ENDS")]
7696    BufferEnds,
7697    /// Move horizontally by pages
7698    #[doc(alias = "GTK_MOVEMENT_HORIZONTAL_PAGES")]
7699    HorizontalPages,
7700    #[doc(hidden)]
7701    __Unknown(i32),
7702}
7703
7704#[doc(hidden)]
7705impl IntoGlib for MovementStep {
7706    type GlibType = ffi::GtkMovementStep;
7707
7708    #[inline]
7709    fn into_glib(self) -> ffi::GtkMovementStep {
7710        match self {
7711            Self::LogicalPositions => ffi::GTK_MOVEMENT_LOGICAL_POSITIONS,
7712            Self::VisualPositions => ffi::GTK_MOVEMENT_VISUAL_POSITIONS,
7713            Self::Words => ffi::GTK_MOVEMENT_WORDS,
7714            Self::DisplayLines => ffi::GTK_MOVEMENT_DISPLAY_LINES,
7715            Self::DisplayLineEnds => ffi::GTK_MOVEMENT_DISPLAY_LINE_ENDS,
7716            Self::Paragraphs => ffi::GTK_MOVEMENT_PARAGRAPHS,
7717            Self::ParagraphEnds => ffi::GTK_MOVEMENT_PARAGRAPH_ENDS,
7718            Self::Pages => ffi::GTK_MOVEMENT_PAGES,
7719            Self::BufferEnds => ffi::GTK_MOVEMENT_BUFFER_ENDS,
7720            Self::HorizontalPages => ffi::GTK_MOVEMENT_HORIZONTAL_PAGES,
7721            Self::__Unknown(value) => value,
7722        }
7723    }
7724}
7725
7726#[doc(hidden)]
7727impl FromGlib<ffi::GtkMovementStep> for MovementStep {
7728    #[inline]
7729    unsafe fn from_glib(value: ffi::GtkMovementStep) -> Self {
7730        skip_assert_initialized!();
7731
7732        match value {
7733            ffi::GTK_MOVEMENT_LOGICAL_POSITIONS => Self::LogicalPositions,
7734            ffi::GTK_MOVEMENT_VISUAL_POSITIONS => Self::VisualPositions,
7735            ffi::GTK_MOVEMENT_WORDS => Self::Words,
7736            ffi::GTK_MOVEMENT_DISPLAY_LINES => Self::DisplayLines,
7737            ffi::GTK_MOVEMENT_DISPLAY_LINE_ENDS => Self::DisplayLineEnds,
7738            ffi::GTK_MOVEMENT_PARAGRAPHS => Self::Paragraphs,
7739            ffi::GTK_MOVEMENT_PARAGRAPH_ENDS => Self::ParagraphEnds,
7740            ffi::GTK_MOVEMENT_PAGES => Self::Pages,
7741            ffi::GTK_MOVEMENT_BUFFER_ENDS => Self::BufferEnds,
7742            ffi::GTK_MOVEMENT_HORIZONTAL_PAGES => Self::HorizontalPages,
7743            value => Self::__Unknown(value),
7744        }
7745    }
7746}
7747
7748impl StaticType for MovementStep {
7749    #[inline]
7750    #[doc(alias = "gtk_movement_step_get_type")]
7751    fn static_type() -> glib::Type {
7752        unsafe { from_glib(ffi::gtk_movement_step_get_type()) }
7753    }
7754}
7755
7756impl glib::HasParamSpec for MovementStep {
7757    type ParamSpec = glib::ParamSpecEnum;
7758    type SetValue = Self;
7759    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7760
7761    fn param_spec_builder() -> Self::BuilderFn {
7762        Self::ParamSpec::builder_with_default
7763    }
7764}
7765
7766impl glib::value::ValueType for MovementStep {
7767    type Type = Self;
7768}
7769
7770unsafe impl<'a> glib::value::FromValue<'a> for MovementStep {
7771    type Checker = glib::value::GenericValueTypeChecker<Self>;
7772
7773    #[inline]
7774    unsafe fn from_value(value: &'a glib::Value) -> Self {
7775        skip_assert_initialized!();
7776        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7777    }
7778}
7779
7780impl ToValue for MovementStep {
7781    #[inline]
7782    fn to_value(&self) -> glib::Value {
7783        let mut value = glib::Value::for_value_type::<Self>();
7784        unsafe {
7785            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7786        }
7787        value
7788    }
7789
7790    #[inline]
7791    fn value_type(&self) -> glib::Type {
7792        Self::static_type()
7793    }
7794}
7795
7796impl From<MovementStep> for glib::Value {
7797    #[inline]
7798    fn from(v: MovementStep) -> Self {
7799        skip_assert_initialized!();
7800        ToValue::to_value(&v)
7801    }
7802}
7803
7804/// Options for selecting a different wrap mode for natural size
7805/// requests.
7806///
7807/// See for example the [`natural-wrap-mode`][struct@crate::Label#natural-wrap-mode] property.
7808#[cfg(feature = "v4_6")]
7809#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7810#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7811#[non_exhaustive]
7812#[doc(alias = "GtkNaturalWrapMode")]
7813pub enum NaturalWrapMode {
7814    /// Inherit the minimum size request.
7815    ///   In particular, this should be used with [`pango::WrapMode::Char`][crate::pango::WrapMode::Char].
7816    #[doc(alias = "GTK_NATURAL_WRAP_INHERIT")]
7817    Inherit,
7818    /// Try not to wrap the text. This mode is the
7819    ///   closest to GTK3's behavior but can lead to a wide label leaving
7820    ///   lots of empty space below the text.
7821    #[doc(alias = "GTK_NATURAL_WRAP_NONE")]
7822    None,
7823    /// Attempt to wrap at word boundaries. This
7824    ///   is useful in particular when using [`pango::WrapMode::WordChar`][crate::pango::WrapMode::WordChar] as the
7825    ///   wrap mode.
7826    #[doc(alias = "GTK_NATURAL_WRAP_WORD")]
7827    Word,
7828    #[doc(hidden)]
7829    __Unknown(i32),
7830}
7831
7832#[cfg(feature = "v4_6")]
7833#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7834#[doc(hidden)]
7835impl IntoGlib for NaturalWrapMode {
7836    type GlibType = ffi::GtkNaturalWrapMode;
7837
7838    #[inline]
7839    fn into_glib(self) -> ffi::GtkNaturalWrapMode {
7840        match self {
7841            Self::Inherit => ffi::GTK_NATURAL_WRAP_INHERIT,
7842            Self::None => ffi::GTK_NATURAL_WRAP_NONE,
7843            Self::Word => ffi::GTK_NATURAL_WRAP_WORD,
7844            Self::__Unknown(value) => value,
7845        }
7846    }
7847}
7848
7849#[cfg(feature = "v4_6")]
7850#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7851#[doc(hidden)]
7852impl FromGlib<ffi::GtkNaturalWrapMode> for NaturalWrapMode {
7853    #[inline]
7854    unsafe fn from_glib(value: ffi::GtkNaturalWrapMode) -> Self {
7855        skip_assert_initialized!();
7856
7857        match value {
7858            ffi::GTK_NATURAL_WRAP_INHERIT => Self::Inherit,
7859            ffi::GTK_NATURAL_WRAP_NONE => Self::None,
7860            ffi::GTK_NATURAL_WRAP_WORD => Self::Word,
7861            value => Self::__Unknown(value),
7862        }
7863    }
7864}
7865
7866#[cfg(feature = "v4_6")]
7867#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7868impl StaticType for NaturalWrapMode {
7869    #[inline]
7870    #[doc(alias = "gtk_natural_wrap_mode_get_type")]
7871    fn static_type() -> glib::Type {
7872        unsafe { from_glib(ffi::gtk_natural_wrap_mode_get_type()) }
7873    }
7874}
7875
7876#[cfg(feature = "v4_6")]
7877#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7878impl glib::HasParamSpec for NaturalWrapMode {
7879    type ParamSpec = glib::ParamSpecEnum;
7880    type SetValue = Self;
7881    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7882
7883    fn param_spec_builder() -> Self::BuilderFn {
7884        Self::ParamSpec::builder_with_default
7885    }
7886}
7887
7888#[cfg(feature = "v4_6")]
7889#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7890impl glib::value::ValueType for NaturalWrapMode {
7891    type Type = Self;
7892}
7893
7894#[cfg(feature = "v4_6")]
7895#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7896unsafe impl<'a> glib::value::FromValue<'a> for NaturalWrapMode {
7897    type Checker = glib::value::GenericValueTypeChecker<Self>;
7898
7899    #[inline]
7900    unsafe fn from_value(value: &'a glib::Value) -> Self {
7901        skip_assert_initialized!();
7902        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
7903    }
7904}
7905
7906#[cfg(feature = "v4_6")]
7907#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7908impl ToValue for NaturalWrapMode {
7909    #[inline]
7910    fn to_value(&self) -> glib::Value {
7911        let mut value = glib::Value::for_value_type::<Self>();
7912        unsafe {
7913            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
7914        }
7915        value
7916    }
7917
7918    #[inline]
7919    fn value_type(&self) -> glib::Type {
7920        Self::static_type()
7921    }
7922}
7923
7924#[cfg(feature = "v4_6")]
7925#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
7926impl From<NaturalWrapMode> for glib::Value {
7927    #[inline]
7928    fn from(v: NaturalWrapMode) -> Self {
7929        skip_assert_initialized!();
7930        ToValue::to_value(&v)
7931    }
7932}
7933
7934/// The parameter used in the action signals of [`Notebook`][crate::Notebook].
7935#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
7936#[non_exhaustive]
7937#[doc(alias = "GtkNotebookTab")]
7938pub enum NotebookTab {
7939    /// the first tab in the notebook
7940    #[doc(alias = "GTK_NOTEBOOK_TAB_FIRST")]
7941    First,
7942    /// the last tab in the notebook
7943    #[doc(alias = "GTK_NOTEBOOK_TAB_LAST")]
7944    Last,
7945    #[doc(hidden)]
7946    __Unknown(i32),
7947}
7948
7949#[doc(hidden)]
7950impl IntoGlib for NotebookTab {
7951    type GlibType = ffi::GtkNotebookTab;
7952
7953    #[inline]
7954    fn into_glib(self) -> ffi::GtkNotebookTab {
7955        match self {
7956            Self::First => ffi::GTK_NOTEBOOK_TAB_FIRST,
7957            Self::Last => ffi::GTK_NOTEBOOK_TAB_LAST,
7958            Self::__Unknown(value) => value,
7959        }
7960    }
7961}
7962
7963#[doc(hidden)]
7964impl FromGlib<ffi::GtkNotebookTab> for NotebookTab {
7965    #[inline]
7966    unsafe fn from_glib(value: ffi::GtkNotebookTab) -> Self {
7967        skip_assert_initialized!();
7968
7969        match value {
7970            ffi::GTK_NOTEBOOK_TAB_FIRST => Self::First,
7971            ffi::GTK_NOTEBOOK_TAB_LAST => Self::Last,
7972            value => Self::__Unknown(value),
7973        }
7974    }
7975}
7976
7977impl StaticType for NotebookTab {
7978    #[inline]
7979    #[doc(alias = "gtk_notebook_tab_get_type")]
7980    fn static_type() -> glib::Type {
7981        unsafe { from_glib(ffi::gtk_notebook_tab_get_type()) }
7982    }
7983}
7984
7985impl glib::HasParamSpec for NotebookTab {
7986    type ParamSpec = glib::ParamSpecEnum;
7987    type SetValue = Self;
7988    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
7989
7990    fn param_spec_builder() -> Self::BuilderFn {
7991        Self::ParamSpec::builder_with_default
7992    }
7993}
7994
7995impl glib::value::ValueType for NotebookTab {
7996    type Type = Self;
7997}
7998
7999unsafe impl<'a> glib::value::FromValue<'a> for NotebookTab {
8000    type Checker = glib::value::GenericValueTypeChecker<Self>;
8001
8002    #[inline]
8003    unsafe fn from_value(value: &'a glib::Value) -> Self {
8004        skip_assert_initialized!();
8005        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8006    }
8007}
8008
8009impl ToValue for NotebookTab {
8010    #[inline]
8011    fn to_value(&self) -> glib::Value {
8012        let mut value = glib::Value::for_value_type::<Self>();
8013        unsafe {
8014            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8015        }
8016        value
8017    }
8018
8019    #[inline]
8020    fn value_type(&self) -> glib::Type {
8021        Self::static_type()
8022    }
8023}
8024
8025impl From<NotebookTab> for glib::Value {
8026    #[inline]
8027    fn from(v: NotebookTab) -> Self {
8028        skip_assert_initialized!();
8029        ToValue::to_value(&v)
8030    }
8031}
8032
8033/// Used to determine the layout of pages on a sheet when printing
8034/// multiple pages per sheet.
8035#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8036#[non_exhaustive]
8037#[doc(alias = "GtkNumberUpLayout")]
8038pub enum NumberUpLayout {
8039    /// ![](layout-lrtb.png)
8040    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM")]
8041    Lrtb,
8042    /// ![](layout-lrbt.png)
8043    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP")]
8044    Lrbt,
8045    /// ![](layout-rltb.png)
8046    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM")]
8047    Rltb,
8048    /// ![](layout-rlbt.png)
8049    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP")]
8050    Rlbt,
8051    /// ![](layout-tblr.png)
8052    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT")]
8053    Tblr,
8054    /// ![](layout-tbrl.png)
8055    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT")]
8056    Tbrl,
8057    /// ![](layout-btlr.png)
8058    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT")]
8059    Btlr,
8060    /// ![](layout-btrl.png)
8061    #[doc(alias = "GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT")]
8062    Btrl,
8063    #[doc(hidden)]
8064    __Unknown(i32),
8065}
8066
8067#[doc(hidden)]
8068impl IntoGlib for NumberUpLayout {
8069    type GlibType = ffi::GtkNumberUpLayout;
8070
8071    #[inline]
8072    fn into_glib(self) -> ffi::GtkNumberUpLayout {
8073        match self {
8074            Self::Lrtb => ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM,
8075            Self::Lrbt => ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP,
8076            Self::Rltb => ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM,
8077            Self::Rlbt => ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP,
8078            Self::Tblr => ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT,
8079            Self::Tbrl => ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT,
8080            Self::Btlr => ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT,
8081            Self::Btrl => ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT,
8082            Self::__Unknown(value) => value,
8083        }
8084    }
8085}
8086
8087#[doc(hidden)]
8088impl FromGlib<ffi::GtkNumberUpLayout> for NumberUpLayout {
8089    #[inline]
8090    unsafe fn from_glib(value: ffi::GtkNumberUpLayout) -> Self {
8091        skip_assert_initialized!();
8092
8093        match value {
8094            ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM => Self::Lrtb,
8095            ffi::GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP => Self::Lrbt,
8096            ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM => Self::Rltb,
8097            ffi::GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP => Self::Rlbt,
8098            ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT => Self::Tblr,
8099            ffi::GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT => Self::Tbrl,
8100            ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT => Self::Btlr,
8101            ffi::GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT => Self::Btrl,
8102            value => Self::__Unknown(value),
8103        }
8104    }
8105}
8106
8107impl StaticType for NumberUpLayout {
8108    #[inline]
8109    #[doc(alias = "gtk_number_up_layout_get_type")]
8110    fn static_type() -> glib::Type {
8111        unsafe { from_glib(ffi::gtk_number_up_layout_get_type()) }
8112    }
8113}
8114
8115impl glib::HasParamSpec for NumberUpLayout {
8116    type ParamSpec = glib::ParamSpecEnum;
8117    type SetValue = Self;
8118    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8119
8120    fn param_spec_builder() -> Self::BuilderFn {
8121        Self::ParamSpec::builder_with_default
8122    }
8123}
8124
8125impl glib::value::ValueType for NumberUpLayout {
8126    type Type = Self;
8127}
8128
8129unsafe impl<'a> glib::value::FromValue<'a> for NumberUpLayout {
8130    type Checker = glib::value::GenericValueTypeChecker<Self>;
8131
8132    #[inline]
8133    unsafe fn from_value(value: &'a glib::Value) -> Self {
8134        skip_assert_initialized!();
8135        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8136    }
8137}
8138
8139impl ToValue for NumberUpLayout {
8140    #[inline]
8141    fn to_value(&self) -> glib::Value {
8142        let mut value = glib::Value::for_value_type::<Self>();
8143        unsafe {
8144            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8145        }
8146        value
8147    }
8148
8149    #[inline]
8150    fn value_type(&self) -> glib::Type {
8151        Self::static_type()
8152    }
8153}
8154
8155impl From<NumberUpLayout> for glib::Value {
8156    #[inline]
8157    fn from(v: NumberUpLayout) -> Self {
8158        skip_assert_initialized!();
8159        ToValue::to_value(&v)
8160    }
8161}
8162
8163/// Describes the way two values can be compared.
8164///
8165/// These values can be used with a `callback::GLib::CompareFunc. However,
8166/// a `GCompareFunc` is allowed to return any integer values.
8167/// For converting such a value to a [`Ordering`][crate::Ordering] value, use
8168/// `Gtk::Ordering::from_cmpfunc()`.
8169#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8170#[non_exhaustive]
8171#[doc(alias = "GtkOrdering")]
8172pub enum Ordering {
8173    /// the first value is smaller than the second
8174    #[doc(alias = "GTK_ORDERING_SMALLER")]
8175    Smaller,
8176    /// the two values are equal
8177    #[doc(alias = "GTK_ORDERING_EQUAL")]
8178    Equal,
8179    /// the first value is larger than the second
8180    #[doc(alias = "GTK_ORDERING_LARGER")]
8181    Larger,
8182    #[doc(hidden)]
8183    __Unknown(i32),
8184}
8185
8186#[doc(hidden)]
8187impl IntoGlib for Ordering {
8188    type GlibType = ffi::GtkOrdering;
8189
8190    #[inline]
8191    fn into_glib(self) -> ffi::GtkOrdering {
8192        match self {
8193            Self::Smaller => ffi::GTK_ORDERING_SMALLER,
8194            Self::Equal => ffi::GTK_ORDERING_EQUAL,
8195            Self::Larger => ffi::GTK_ORDERING_LARGER,
8196            Self::__Unknown(value) => value,
8197        }
8198    }
8199}
8200
8201#[doc(hidden)]
8202impl FromGlib<ffi::GtkOrdering> for Ordering {
8203    #[inline]
8204    unsafe fn from_glib(value: ffi::GtkOrdering) -> Self {
8205        skip_assert_initialized!();
8206
8207        match value {
8208            ffi::GTK_ORDERING_SMALLER => Self::Smaller,
8209            ffi::GTK_ORDERING_EQUAL => Self::Equal,
8210            ffi::GTK_ORDERING_LARGER => Self::Larger,
8211            value => Self::__Unknown(value),
8212        }
8213    }
8214}
8215
8216impl StaticType for Ordering {
8217    #[inline]
8218    #[doc(alias = "gtk_ordering_get_type")]
8219    fn static_type() -> glib::Type {
8220        unsafe { from_glib(ffi::gtk_ordering_get_type()) }
8221    }
8222}
8223
8224impl glib::HasParamSpec for Ordering {
8225    type ParamSpec = glib::ParamSpecEnum;
8226    type SetValue = Self;
8227    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8228
8229    fn param_spec_builder() -> Self::BuilderFn {
8230        Self::ParamSpec::builder_with_default
8231    }
8232}
8233
8234impl glib::value::ValueType for Ordering {
8235    type Type = Self;
8236}
8237
8238unsafe impl<'a> glib::value::FromValue<'a> for Ordering {
8239    type Checker = glib::value::GenericValueTypeChecker<Self>;
8240
8241    #[inline]
8242    unsafe fn from_value(value: &'a glib::Value) -> Self {
8243        skip_assert_initialized!();
8244        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8245    }
8246}
8247
8248impl ToValue for Ordering {
8249    #[inline]
8250    fn to_value(&self) -> glib::Value {
8251        let mut value = glib::Value::for_value_type::<Self>();
8252        unsafe {
8253            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8254        }
8255        value
8256    }
8257
8258    #[inline]
8259    fn value_type(&self) -> glib::Type {
8260        Self::static_type()
8261    }
8262}
8263
8264impl From<Ordering> for glib::Value {
8265    #[inline]
8266    fn from(v: Ordering) -> Self {
8267        skip_assert_initialized!();
8268        ToValue::to_value(&v)
8269    }
8270}
8271
8272/// Represents the orientation of widgets and other objects.
8273///
8274/// Typical examples are [`Box`][crate::Box] or [`GesturePan`][crate::GesturePan].
8275#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8276#[non_exhaustive]
8277#[doc(alias = "GtkOrientation")]
8278pub enum Orientation {
8279    /// The element is in horizontal orientation.
8280    #[doc(alias = "GTK_ORIENTATION_HORIZONTAL")]
8281    Horizontal,
8282    /// The element is in vertical orientation.
8283    #[doc(alias = "GTK_ORIENTATION_VERTICAL")]
8284    Vertical,
8285    #[doc(hidden)]
8286    __Unknown(i32),
8287}
8288
8289#[doc(hidden)]
8290impl IntoGlib for Orientation {
8291    type GlibType = ffi::GtkOrientation;
8292
8293    #[inline]
8294    fn into_glib(self) -> ffi::GtkOrientation {
8295        match self {
8296            Self::Horizontal => ffi::GTK_ORIENTATION_HORIZONTAL,
8297            Self::Vertical => ffi::GTK_ORIENTATION_VERTICAL,
8298            Self::__Unknown(value) => value,
8299        }
8300    }
8301}
8302
8303#[doc(hidden)]
8304impl FromGlib<ffi::GtkOrientation> for Orientation {
8305    #[inline]
8306    unsafe fn from_glib(value: ffi::GtkOrientation) -> Self {
8307        skip_assert_initialized!();
8308
8309        match value {
8310            ffi::GTK_ORIENTATION_HORIZONTAL => Self::Horizontal,
8311            ffi::GTK_ORIENTATION_VERTICAL => Self::Vertical,
8312            value => Self::__Unknown(value),
8313        }
8314    }
8315}
8316
8317impl StaticType for Orientation {
8318    #[inline]
8319    #[doc(alias = "gtk_orientation_get_type")]
8320    fn static_type() -> glib::Type {
8321        unsafe { from_glib(ffi::gtk_orientation_get_type()) }
8322    }
8323}
8324
8325impl glib::HasParamSpec for Orientation {
8326    type ParamSpec = glib::ParamSpecEnum;
8327    type SetValue = Self;
8328    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8329
8330    fn param_spec_builder() -> Self::BuilderFn {
8331        Self::ParamSpec::builder_with_default
8332    }
8333}
8334
8335impl glib::value::ValueType for Orientation {
8336    type Type = Self;
8337}
8338
8339unsafe impl<'a> glib::value::FromValue<'a> for Orientation {
8340    type Checker = glib::value::GenericValueTypeChecker<Self>;
8341
8342    #[inline]
8343    unsafe fn from_value(value: &'a glib::Value) -> Self {
8344        skip_assert_initialized!();
8345        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8346    }
8347}
8348
8349impl ToValue for Orientation {
8350    #[inline]
8351    fn to_value(&self) -> glib::Value {
8352        let mut value = glib::Value::for_value_type::<Self>();
8353        unsafe {
8354            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8355        }
8356        value
8357    }
8358
8359    #[inline]
8360    fn value_type(&self) -> glib::Type {
8361        Self::static_type()
8362    }
8363}
8364
8365impl From<Orientation> for glib::Value {
8366    #[inline]
8367    fn from(v: Orientation) -> Self {
8368        skip_assert_initialized!();
8369        ToValue::to_value(&v)
8370    }
8371}
8372
8373/// Defines how content overflowing a given area should be handled.
8374///
8375/// This is used in [`WidgetExt::set_overflow()`][crate::prelude::WidgetExt::set_overflow()]. The
8376/// [`overflow`][struct@crate::Widget#overflow] property is modeled after the
8377/// CSS overflow property, but implements it only partially.
8378#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8379#[non_exhaustive]
8380#[doc(alias = "GtkOverflow")]
8381pub enum Overflow {
8382    /// No change is applied. Content is drawn at the specified
8383    ///   position.
8384    #[doc(alias = "GTK_OVERFLOW_VISIBLE")]
8385    Visible,
8386    /// Content is clipped to the bounds of the area. Content
8387    ///   outside the area is not drawn and cannot be interacted with.
8388    #[doc(alias = "GTK_OVERFLOW_HIDDEN")]
8389    Hidden,
8390    #[doc(hidden)]
8391    __Unknown(i32),
8392}
8393
8394#[doc(hidden)]
8395impl IntoGlib for Overflow {
8396    type GlibType = ffi::GtkOverflow;
8397
8398    #[inline]
8399    fn into_glib(self) -> ffi::GtkOverflow {
8400        match self {
8401            Self::Visible => ffi::GTK_OVERFLOW_VISIBLE,
8402            Self::Hidden => ffi::GTK_OVERFLOW_HIDDEN,
8403            Self::__Unknown(value) => value,
8404        }
8405    }
8406}
8407
8408#[doc(hidden)]
8409impl FromGlib<ffi::GtkOverflow> for Overflow {
8410    #[inline]
8411    unsafe fn from_glib(value: ffi::GtkOverflow) -> Self {
8412        skip_assert_initialized!();
8413
8414        match value {
8415            ffi::GTK_OVERFLOW_VISIBLE => Self::Visible,
8416            ffi::GTK_OVERFLOW_HIDDEN => Self::Hidden,
8417            value => Self::__Unknown(value),
8418        }
8419    }
8420}
8421
8422impl StaticType for Overflow {
8423    #[inline]
8424    #[doc(alias = "gtk_overflow_get_type")]
8425    fn static_type() -> glib::Type {
8426        unsafe { from_glib(ffi::gtk_overflow_get_type()) }
8427    }
8428}
8429
8430impl glib::HasParamSpec for Overflow {
8431    type ParamSpec = glib::ParamSpecEnum;
8432    type SetValue = Self;
8433    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8434
8435    fn param_spec_builder() -> Self::BuilderFn {
8436        Self::ParamSpec::builder_with_default
8437    }
8438}
8439
8440impl glib::value::ValueType for Overflow {
8441    type Type = Self;
8442}
8443
8444unsafe impl<'a> glib::value::FromValue<'a> for Overflow {
8445    type Checker = glib::value::GenericValueTypeChecker<Self>;
8446
8447    #[inline]
8448    unsafe fn from_value(value: &'a glib::Value) -> Self {
8449        skip_assert_initialized!();
8450        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8451    }
8452}
8453
8454impl ToValue for Overflow {
8455    #[inline]
8456    fn to_value(&self) -> glib::Value {
8457        let mut value = glib::Value::for_value_type::<Self>();
8458        unsafe {
8459            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8460        }
8461        value
8462    }
8463
8464    #[inline]
8465    fn value_type(&self) -> glib::Type {
8466        Self::static_type()
8467    }
8468}
8469
8470impl From<Overflow> for glib::Value {
8471    #[inline]
8472    fn from(v: Overflow) -> Self {
8473        skip_assert_initialized!();
8474        ToValue::to_value(&v)
8475    }
8476}
8477
8478/// Represents the packing location of a children in its parent.
8479///
8480/// See [`WindowControls`][crate::WindowControls] for example.
8481#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8482#[non_exhaustive]
8483#[doc(alias = "GtkPackType")]
8484pub enum PackType {
8485    /// The child is packed into the start of the widget
8486    #[doc(alias = "GTK_PACK_START")]
8487    Start,
8488    /// The child is packed into the end of the widget
8489    #[doc(alias = "GTK_PACK_END")]
8490    End,
8491    #[doc(hidden)]
8492    __Unknown(i32),
8493}
8494
8495#[doc(hidden)]
8496impl IntoGlib for PackType {
8497    type GlibType = ffi::GtkPackType;
8498
8499    #[inline]
8500    fn into_glib(self) -> ffi::GtkPackType {
8501        match self {
8502            Self::Start => ffi::GTK_PACK_START,
8503            Self::End => ffi::GTK_PACK_END,
8504            Self::__Unknown(value) => value,
8505        }
8506    }
8507}
8508
8509#[doc(hidden)]
8510impl FromGlib<ffi::GtkPackType> for PackType {
8511    #[inline]
8512    unsafe fn from_glib(value: ffi::GtkPackType) -> Self {
8513        skip_assert_initialized!();
8514
8515        match value {
8516            ffi::GTK_PACK_START => Self::Start,
8517            ffi::GTK_PACK_END => Self::End,
8518            value => Self::__Unknown(value),
8519        }
8520    }
8521}
8522
8523impl StaticType for PackType {
8524    #[inline]
8525    #[doc(alias = "gtk_pack_type_get_type")]
8526    fn static_type() -> glib::Type {
8527        unsafe { from_glib(ffi::gtk_pack_type_get_type()) }
8528    }
8529}
8530
8531impl glib::HasParamSpec for PackType {
8532    type ParamSpec = glib::ParamSpecEnum;
8533    type SetValue = Self;
8534    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8535
8536    fn param_spec_builder() -> Self::BuilderFn {
8537        Self::ParamSpec::builder_with_default
8538    }
8539}
8540
8541impl glib::value::ValueType for PackType {
8542    type Type = Self;
8543}
8544
8545unsafe impl<'a> glib::value::FromValue<'a> for PackType {
8546    type Checker = glib::value::GenericValueTypeChecker<Self>;
8547
8548    #[inline]
8549    unsafe fn from_value(value: &'a glib::Value) -> Self {
8550        skip_assert_initialized!();
8551        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8552    }
8553}
8554
8555impl ToValue for PackType {
8556    #[inline]
8557    fn to_value(&self) -> glib::Value {
8558        let mut value = glib::Value::for_value_type::<Self>();
8559        unsafe {
8560            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8561        }
8562        value
8563    }
8564
8565    #[inline]
8566    fn value_type(&self) -> glib::Type {
8567        Self::static_type()
8568    }
8569}
8570
8571impl From<PackType> for glib::Value {
8572    #[inline]
8573    fn from(v: PackType) -> Self {
8574        skip_assert_initialized!();
8575        ToValue::to_value(&v)
8576    }
8577}
8578
8579/// The type of a pad action.
8580#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8581#[non_exhaustive]
8582#[doc(alias = "GtkPadActionType")]
8583pub enum PadActionType {
8584    /// Action is triggered by a pad button
8585    #[doc(alias = "GTK_PAD_ACTION_BUTTON")]
8586    Button,
8587    /// Action is triggered by a pad ring
8588    #[doc(alias = "GTK_PAD_ACTION_RING")]
8589    Ring,
8590    /// Action is triggered by a pad strip
8591    #[doc(alias = "GTK_PAD_ACTION_STRIP")]
8592    Strip,
8593    /// Action is triggered by a pad dial
8594    #[doc(alias = "GTK_PAD_ACTION_DIAL")]
8595    Dial,
8596    #[doc(hidden)]
8597    __Unknown(i32),
8598}
8599
8600#[doc(hidden)]
8601impl IntoGlib for PadActionType {
8602    type GlibType = ffi::GtkPadActionType;
8603
8604    #[inline]
8605    fn into_glib(self) -> ffi::GtkPadActionType {
8606        match self {
8607            Self::Button => ffi::GTK_PAD_ACTION_BUTTON,
8608            Self::Ring => ffi::GTK_PAD_ACTION_RING,
8609            Self::Strip => ffi::GTK_PAD_ACTION_STRIP,
8610            Self::Dial => ffi::GTK_PAD_ACTION_DIAL,
8611            Self::__Unknown(value) => value,
8612        }
8613    }
8614}
8615
8616#[doc(hidden)]
8617impl FromGlib<ffi::GtkPadActionType> for PadActionType {
8618    #[inline]
8619    unsafe fn from_glib(value: ffi::GtkPadActionType) -> Self {
8620        skip_assert_initialized!();
8621
8622        match value {
8623            ffi::GTK_PAD_ACTION_BUTTON => Self::Button,
8624            ffi::GTK_PAD_ACTION_RING => Self::Ring,
8625            ffi::GTK_PAD_ACTION_STRIP => Self::Strip,
8626            ffi::GTK_PAD_ACTION_DIAL => Self::Dial,
8627            value => Self::__Unknown(value),
8628        }
8629    }
8630}
8631
8632impl StaticType for PadActionType {
8633    #[inline]
8634    #[doc(alias = "gtk_pad_action_type_get_type")]
8635    fn static_type() -> glib::Type {
8636        unsafe { from_glib(ffi::gtk_pad_action_type_get_type()) }
8637    }
8638}
8639
8640impl glib::HasParamSpec for PadActionType {
8641    type ParamSpec = glib::ParamSpecEnum;
8642    type SetValue = Self;
8643    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8644
8645    fn param_spec_builder() -> Self::BuilderFn {
8646        Self::ParamSpec::builder_with_default
8647    }
8648}
8649
8650impl glib::value::ValueType for PadActionType {
8651    type Type = Self;
8652}
8653
8654unsafe impl<'a> glib::value::FromValue<'a> for PadActionType {
8655    type Checker = glib::value::GenericValueTypeChecker<Self>;
8656
8657    #[inline]
8658    unsafe fn from_value(value: &'a glib::Value) -> Self {
8659        skip_assert_initialized!();
8660        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8661    }
8662}
8663
8664impl ToValue for PadActionType {
8665    #[inline]
8666    fn to_value(&self) -> glib::Value {
8667        let mut value = glib::Value::for_value_type::<Self>();
8668        unsafe {
8669            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8670        }
8671        value
8672    }
8673
8674    #[inline]
8675    fn value_type(&self) -> glib::Type {
8676        Self::static_type()
8677    }
8678}
8679
8680impl From<PadActionType> for glib::Value {
8681    #[inline]
8682    fn from(v: PadActionType) -> Self {
8683        skip_assert_initialized!();
8684        ToValue::to_value(&v)
8685    }
8686}
8687
8688/// See also gtk_print_settings_set_orientation().
8689#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8690#[non_exhaustive]
8691#[doc(alias = "GtkPageOrientation")]
8692pub enum PageOrientation {
8693    /// Portrait mode.
8694    #[doc(alias = "GTK_PAGE_ORIENTATION_PORTRAIT")]
8695    Portrait,
8696    /// Landscape mode.
8697    #[doc(alias = "GTK_PAGE_ORIENTATION_LANDSCAPE")]
8698    Landscape,
8699    /// Reverse portrait mode.
8700    #[doc(alias = "GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT")]
8701    ReversePortrait,
8702    /// Reverse landscape mode.
8703    #[doc(alias = "GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE")]
8704    ReverseLandscape,
8705    #[doc(hidden)]
8706    __Unknown(i32),
8707}
8708
8709#[doc(hidden)]
8710impl IntoGlib for PageOrientation {
8711    type GlibType = ffi::GtkPageOrientation;
8712
8713    #[inline]
8714    fn into_glib(self) -> ffi::GtkPageOrientation {
8715        match self {
8716            Self::Portrait => ffi::GTK_PAGE_ORIENTATION_PORTRAIT,
8717            Self::Landscape => ffi::GTK_PAGE_ORIENTATION_LANDSCAPE,
8718            Self::ReversePortrait => ffi::GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT,
8719            Self::ReverseLandscape => ffi::GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE,
8720            Self::__Unknown(value) => value,
8721        }
8722    }
8723}
8724
8725#[doc(hidden)]
8726impl FromGlib<ffi::GtkPageOrientation> for PageOrientation {
8727    #[inline]
8728    unsafe fn from_glib(value: ffi::GtkPageOrientation) -> Self {
8729        skip_assert_initialized!();
8730
8731        match value {
8732            ffi::GTK_PAGE_ORIENTATION_PORTRAIT => Self::Portrait,
8733            ffi::GTK_PAGE_ORIENTATION_LANDSCAPE => Self::Landscape,
8734            ffi::GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT => Self::ReversePortrait,
8735            ffi::GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE => Self::ReverseLandscape,
8736            value => Self::__Unknown(value),
8737        }
8738    }
8739}
8740
8741impl StaticType for PageOrientation {
8742    #[inline]
8743    #[doc(alias = "gtk_page_orientation_get_type")]
8744    fn static_type() -> glib::Type {
8745        unsafe { from_glib(ffi::gtk_page_orientation_get_type()) }
8746    }
8747}
8748
8749impl glib::HasParamSpec for PageOrientation {
8750    type ParamSpec = glib::ParamSpecEnum;
8751    type SetValue = Self;
8752    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8753
8754    fn param_spec_builder() -> Self::BuilderFn {
8755        Self::ParamSpec::builder_with_default
8756    }
8757}
8758
8759impl glib::value::ValueType for PageOrientation {
8760    type Type = Self;
8761}
8762
8763unsafe impl<'a> glib::value::FromValue<'a> for PageOrientation {
8764    type Checker = glib::value::GenericValueTypeChecker<Self>;
8765
8766    #[inline]
8767    unsafe fn from_value(value: &'a glib::Value) -> Self {
8768        skip_assert_initialized!();
8769        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8770    }
8771}
8772
8773impl ToValue for PageOrientation {
8774    #[inline]
8775    fn to_value(&self) -> glib::Value {
8776        let mut value = glib::Value::for_value_type::<Self>();
8777        unsafe {
8778            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8779        }
8780        value
8781    }
8782
8783    #[inline]
8784    fn value_type(&self) -> glib::Type {
8785        Self::static_type()
8786    }
8787}
8788
8789impl From<PageOrientation> for glib::Value {
8790    #[inline]
8791    fn from(v: PageOrientation) -> Self {
8792        skip_assert_initialized!();
8793        ToValue::to_value(&v)
8794    }
8795}
8796
8797/// See also gtk_print_job_set_page_set().
8798#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8799#[non_exhaustive]
8800#[doc(alias = "GtkPageSet")]
8801pub enum PageSet {
8802    /// All pages.
8803    #[doc(alias = "GTK_PAGE_SET_ALL")]
8804    All,
8805    /// Even pages.
8806    #[doc(alias = "GTK_PAGE_SET_EVEN")]
8807    Even,
8808    /// Odd pages.
8809    #[doc(alias = "GTK_PAGE_SET_ODD")]
8810    Odd,
8811    #[doc(hidden)]
8812    __Unknown(i32),
8813}
8814
8815#[doc(hidden)]
8816impl IntoGlib for PageSet {
8817    type GlibType = ffi::GtkPageSet;
8818
8819    #[inline]
8820    fn into_glib(self) -> ffi::GtkPageSet {
8821        match self {
8822            Self::All => ffi::GTK_PAGE_SET_ALL,
8823            Self::Even => ffi::GTK_PAGE_SET_EVEN,
8824            Self::Odd => ffi::GTK_PAGE_SET_ODD,
8825            Self::__Unknown(value) => value,
8826        }
8827    }
8828}
8829
8830#[doc(hidden)]
8831impl FromGlib<ffi::GtkPageSet> for PageSet {
8832    #[inline]
8833    unsafe fn from_glib(value: ffi::GtkPageSet) -> Self {
8834        skip_assert_initialized!();
8835
8836        match value {
8837            ffi::GTK_PAGE_SET_ALL => Self::All,
8838            ffi::GTK_PAGE_SET_EVEN => Self::Even,
8839            ffi::GTK_PAGE_SET_ODD => Self::Odd,
8840            value => Self::__Unknown(value),
8841        }
8842    }
8843}
8844
8845impl StaticType for PageSet {
8846    #[inline]
8847    #[doc(alias = "gtk_page_set_get_type")]
8848    fn static_type() -> glib::Type {
8849        unsafe { from_glib(ffi::gtk_page_set_get_type()) }
8850    }
8851}
8852
8853impl glib::HasParamSpec for PageSet {
8854    type ParamSpec = glib::ParamSpecEnum;
8855    type SetValue = Self;
8856    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8857
8858    fn param_spec_builder() -> Self::BuilderFn {
8859        Self::ParamSpec::builder_with_default
8860    }
8861}
8862
8863impl glib::value::ValueType for PageSet {
8864    type Type = Self;
8865}
8866
8867unsafe impl<'a> glib::value::FromValue<'a> for PageSet {
8868    type Checker = glib::value::GenericValueTypeChecker<Self>;
8869
8870    #[inline]
8871    unsafe fn from_value(value: &'a glib::Value) -> Self {
8872        skip_assert_initialized!();
8873        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8874    }
8875}
8876
8877impl ToValue for PageSet {
8878    #[inline]
8879    fn to_value(&self) -> glib::Value {
8880        let mut value = glib::Value::for_value_type::<Self>();
8881        unsafe {
8882            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8883        }
8884        value
8885    }
8886
8887    #[inline]
8888    fn value_type(&self) -> glib::Type {
8889        Self::static_type()
8890    }
8891}
8892
8893impl From<PageSet> for glib::Value {
8894    #[inline]
8895    fn from(v: PageSet) -> Self {
8896        skip_assert_initialized!();
8897        ToValue::to_value(&v)
8898    }
8899}
8900
8901/// Describes the panning direction of a [`GesturePan`][crate::GesturePan].
8902#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
8903#[non_exhaustive]
8904#[doc(alias = "GtkPanDirection")]
8905pub enum PanDirection {
8906    /// panned towards the left
8907    #[doc(alias = "GTK_PAN_DIRECTION_LEFT")]
8908    Left,
8909    /// panned towards the right
8910    #[doc(alias = "GTK_PAN_DIRECTION_RIGHT")]
8911    Right,
8912    /// panned upwards
8913    #[doc(alias = "GTK_PAN_DIRECTION_UP")]
8914    Up,
8915    /// panned downwards
8916    #[doc(alias = "GTK_PAN_DIRECTION_DOWN")]
8917    Down,
8918    #[doc(hidden)]
8919    __Unknown(i32),
8920}
8921
8922#[doc(hidden)]
8923impl IntoGlib for PanDirection {
8924    type GlibType = ffi::GtkPanDirection;
8925
8926    #[inline]
8927    fn into_glib(self) -> ffi::GtkPanDirection {
8928        match self {
8929            Self::Left => ffi::GTK_PAN_DIRECTION_LEFT,
8930            Self::Right => ffi::GTK_PAN_DIRECTION_RIGHT,
8931            Self::Up => ffi::GTK_PAN_DIRECTION_UP,
8932            Self::Down => ffi::GTK_PAN_DIRECTION_DOWN,
8933            Self::__Unknown(value) => value,
8934        }
8935    }
8936}
8937
8938#[doc(hidden)]
8939impl FromGlib<ffi::GtkPanDirection> for PanDirection {
8940    #[inline]
8941    unsafe fn from_glib(value: ffi::GtkPanDirection) -> Self {
8942        skip_assert_initialized!();
8943
8944        match value {
8945            ffi::GTK_PAN_DIRECTION_LEFT => Self::Left,
8946            ffi::GTK_PAN_DIRECTION_RIGHT => Self::Right,
8947            ffi::GTK_PAN_DIRECTION_UP => Self::Up,
8948            ffi::GTK_PAN_DIRECTION_DOWN => Self::Down,
8949            value => Self::__Unknown(value),
8950        }
8951    }
8952}
8953
8954impl StaticType for PanDirection {
8955    #[inline]
8956    #[doc(alias = "gtk_pan_direction_get_type")]
8957    fn static_type() -> glib::Type {
8958        unsafe { from_glib(ffi::gtk_pan_direction_get_type()) }
8959    }
8960}
8961
8962impl glib::HasParamSpec for PanDirection {
8963    type ParamSpec = glib::ParamSpecEnum;
8964    type SetValue = Self;
8965    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
8966
8967    fn param_spec_builder() -> Self::BuilderFn {
8968        Self::ParamSpec::builder_with_default
8969    }
8970}
8971
8972impl glib::value::ValueType for PanDirection {
8973    type Type = Self;
8974}
8975
8976unsafe impl<'a> glib::value::FromValue<'a> for PanDirection {
8977    type Checker = glib::value::GenericValueTypeChecker<Self>;
8978
8979    #[inline]
8980    unsafe fn from_value(value: &'a glib::Value) -> Self {
8981        skip_assert_initialized!();
8982        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
8983    }
8984}
8985
8986impl ToValue for PanDirection {
8987    #[inline]
8988    fn to_value(&self) -> glib::Value {
8989        let mut value = glib::Value::for_value_type::<Self>();
8990        unsafe {
8991            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
8992        }
8993        value
8994    }
8995
8996    #[inline]
8997    fn value_type(&self) -> glib::Type {
8998        Self::static_type()
8999    }
9000}
9001
9002impl From<PanDirection> for glib::Value {
9003    #[inline]
9004    fn from(v: PanDirection) -> Self {
9005        skip_assert_initialized!();
9006        ToValue::to_value(&v)
9007    }
9008}
9009
9010/// Determines how the size should be computed to achieve the one of the
9011/// visibility mode for the scrollbars.
9012#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9013#[non_exhaustive]
9014#[doc(alias = "GtkPolicyType")]
9015pub enum PolicyType {
9016    /// The scrollbar is always visible. The view size is
9017    ///   independent of the content.
9018    #[doc(alias = "GTK_POLICY_ALWAYS")]
9019    Always,
9020    /// The scrollbar will appear and disappear as necessary.
9021    ///   For example, when all of a [`TreeView`][crate::TreeView] can not be seen.
9022    #[doc(alias = "GTK_POLICY_AUTOMATIC")]
9023    Automatic,
9024    /// The scrollbar should never appear. In this mode the
9025    ///   content determines the size.
9026    #[doc(alias = "GTK_POLICY_NEVER")]
9027    Never,
9028    /// Don't show a scrollbar, but don't force the
9029    ///   size to follow the content. This can be used e.g. to make multiple
9030    ///   scrolled windows share a scrollbar.
9031    #[doc(alias = "GTK_POLICY_EXTERNAL")]
9032    External,
9033    #[doc(hidden)]
9034    __Unknown(i32),
9035}
9036
9037#[doc(hidden)]
9038impl IntoGlib for PolicyType {
9039    type GlibType = ffi::GtkPolicyType;
9040
9041    #[inline]
9042    fn into_glib(self) -> ffi::GtkPolicyType {
9043        match self {
9044            Self::Always => ffi::GTK_POLICY_ALWAYS,
9045            Self::Automatic => ffi::GTK_POLICY_AUTOMATIC,
9046            Self::Never => ffi::GTK_POLICY_NEVER,
9047            Self::External => ffi::GTK_POLICY_EXTERNAL,
9048            Self::__Unknown(value) => value,
9049        }
9050    }
9051}
9052
9053#[doc(hidden)]
9054impl FromGlib<ffi::GtkPolicyType> for PolicyType {
9055    #[inline]
9056    unsafe fn from_glib(value: ffi::GtkPolicyType) -> Self {
9057        skip_assert_initialized!();
9058
9059        match value {
9060            ffi::GTK_POLICY_ALWAYS => Self::Always,
9061            ffi::GTK_POLICY_AUTOMATIC => Self::Automatic,
9062            ffi::GTK_POLICY_NEVER => Self::Never,
9063            ffi::GTK_POLICY_EXTERNAL => Self::External,
9064            value => Self::__Unknown(value),
9065        }
9066    }
9067}
9068
9069impl StaticType for PolicyType {
9070    #[inline]
9071    #[doc(alias = "gtk_policy_type_get_type")]
9072    fn static_type() -> glib::Type {
9073        unsafe { from_glib(ffi::gtk_policy_type_get_type()) }
9074    }
9075}
9076
9077impl glib::HasParamSpec for PolicyType {
9078    type ParamSpec = glib::ParamSpecEnum;
9079    type SetValue = Self;
9080    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9081
9082    fn param_spec_builder() -> Self::BuilderFn {
9083        Self::ParamSpec::builder_with_default
9084    }
9085}
9086
9087impl glib::value::ValueType for PolicyType {
9088    type Type = Self;
9089}
9090
9091unsafe impl<'a> glib::value::FromValue<'a> for PolicyType {
9092    type Checker = glib::value::GenericValueTypeChecker<Self>;
9093
9094    #[inline]
9095    unsafe fn from_value(value: &'a glib::Value) -> Self {
9096        skip_assert_initialized!();
9097        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9098    }
9099}
9100
9101impl ToValue for PolicyType {
9102    #[inline]
9103    fn to_value(&self) -> glib::Value {
9104        let mut value = glib::Value::for_value_type::<Self>();
9105        unsafe {
9106            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9107        }
9108        value
9109    }
9110
9111    #[inline]
9112    fn value_type(&self) -> glib::Type {
9113        Self::static_type()
9114    }
9115}
9116
9117impl From<PolicyType> for glib::Value {
9118    #[inline]
9119    fn from(v: PolicyType) -> Self {
9120        skip_assert_initialized!();
9121        ToValue::to_value(&v)
9122    }
9123}
9124
9125/// Describes which edge of a widget a certain feature is positioned at.
9126///
9127/// For examples, see the tabs of a [`Notebook`][crate::Notebook], or the label
9128/// of a [`Scale`][crate::Scale].
9129#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9130#[non_exhaustive]
9131#[doc(alias = "GtkPositionType")]
9132pub enum PositionType {
9133    /// The feature is at the left edge.
9134    #[doc(alias = "GTK_POS_LEFT")]
9135    Left,
9136    /// The feature is at the right edge.
9137    #[doc(alias = "GTK_POS_RIGHT")]
9138    Right,
9139    /// The feature is at the top edge.
9140    #[doc(alias = "GTK_POS_TOP")]
9141    Top,
9142    /// The feature is at the bottom edge.
9143    #[doc(alias = "GTK_POS_BOTTOM")]
9144    Bottom,
9145    #[doc(hidden)]
9146    __Unknown(i32),
9147}
9148
9149#[doc(hidden)]
9150impl IntoGlib for PositionType {
9151    type GlibType = ffi::GtkPositionType;
9152
9153    #[inline]
9154    fn into_glib(self) -> ffi::GtkPositionType {
9155        match self {
9156            Self::Left => ffi::GTK_POS_LEFT,
9157            Self::Right => ffi::GTK_POS_RIGHT,
9158            Self::Top => ffi::GTK_POS_TOP,
9159            Self::Bottom => ffi::GTK_POS_BOTTOM,
9160            Self::__Unknown(value) => value,
9161        }
9162    }
9163}
9164
9165#[doc(hidden)]
9166impl FromGlib<ffi::GtkPositionType> for PositionType {
9167    #[inline]
9168    unsafe fn from_glib(value: ffi::GtkPositionType) -> Self {
9169        skip_assert_initialized!();
9170
9171        match value {
9172            ffi::GTK_POS_LEFT => Self::Left,
9173            ffi::GTK_POS_RIGHT => Self::Right,
9174            ffi::GTK_POS_TOP => Self::Top,
9175            ffi::GTK_POS_BOTTOM => Self::Bottom,
9176            value => Self::__Unknown(value),
9177        }
9178    }
9179}
9180
9181impl StaticType for PositionType {
9182    #[inline]
9183    #[doc(alias = "gtk_position_type_get_type")]
9184    fn static_type() -> glib::Type {
9185        unsafe { from_glib(ffi::gtk_position_type_get_type()) }
9186    }
9187}
9188
9189impl glib::HasParamSpec for PositionType {
9190    type ParamSpec = glib::ParamSpecEnum;
9191    type SetValue = Self;
9192    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9193
9194    fn param_spec_builder() -> Self::BuilderFn {
9195        Self::ParamSpec::builder_with_default
9196    }
9197}
9198
9199impl glib::value::ValueType for PositionType {
9200    type Type = Self;
9201}
9202
9203unsafe impl<'a> glib::value::FromValue<'a> for PositionType {
9204    type Checker = glib::value::GenericValueTypeChecker<Self>;
9205
9206    #[inline]
9207    unsafe fn from_value(value: &'a glib::Value) -> Self {
9208        skip_assert_initialized!();
9209        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9210    }
9211}
9212
9213impl ToValue for PositionType {
9214    #[inline]
9215    fn to_value(&self) -> glib::Value {
9216        let mut value = glib::Value::for_value_type::<Self>();
9217        unsafe {
9218            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9219        }
9220        value
9221    }
9222
9223    #[inline]
9224    fn value_type(&self) -> glib::Type {
9225        Self::static_type()
9226    }
9227}
9228
9229impl From<PositionType> for glib::Value {
9230    #[inline]
9231    fn from(v: PositionType) -> Self {
9232        skip_assert_initialized!();
9233        ToValue::to_value(&v)
9234    }
9235}
9236
9237/// See also gtk_print_settings_set_duplex().
9238#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9239#[non_exhaustive]
9240#[doc(alias = "GtkPrintDuplex")]
9241pub enum PrintDuplex {
9242    /// No duplex.
9243    #[doc(alias = "GTK_PRINT_DUPLEX_SIMPLEX")]
9244    Simplex,
9245    /// Horizontal duplex.
9246    #[doc(alias = "GTK_PRINT_DUPLEX_HORIZONTAL")]
9247    Horizontal,
9248    /// Vertical duplex.
9249    #[doc(alias = "GTK_PRINT_DUPLEX_VERTICAL")]
9250    Vertical,
9251    #[doc(hidden)]
9252    __Unknown(i32),
9253}
9254
9255#[doc(hidden)]
9256impl IntoGlib for PrintDuplex {
9257    type GlibType = ffi::GtkPrintDuplex;
9258
9259    #[inline]
9260    fn into_glib(self) -> ffi::GtkPrintDuplex {
9261        match self {
9262            Self::Simplex => ffi::GTK_PRINT_DUPLEX_SIMPLEX,
9263            Self::Horizontal => ffi::GTK_PRINT_DUPLEX_HORIZONTAL,
9264            Self::Vertical => ffi::GTK_PRINT_DUPLEX_VERTICAL,
9265            Self::__Unknown(value) => value,
9266        }
9267    }
9268}
9269
9270#[doc(hidden)]
9271impl FromGlib<ffi::GtkPrintDuplex> for PrintDuplex {
9272    #[inline]
9273    unsafe fn from_glib(value: ffi::GtkPrintDuplex) -> Self {
9274        skip_assert_initialized!();
9275
9276        match value {
9277            ffi::GTK_PRINT_DUPLEX_SIMPLEX => Self::Simplex,
9278            ffi::GTK_PRINT_DUPLEX_HORIZONTAL => Self::Horizontal,
9279            ffi::GTK_PRINT_DUPLEX_VERTICAL => Self::Vertical,
9280            value => Self::__Unknown(value),
9281        }
9282    }
9283}
9284
9285impl StaticType for PrintDuplex {
9286    #[inline]
9287    #[doc(alias = "gtk_print_duplex_get_type")]
9288    fn static_type() -> glib::Type {
9289        unsafe { from_glib(ffi::gtk_print_duplex_get_type()) }
9290    }
9291}
9292
9293impl glib::HasParamSpec for PrintDuplex {
9294    type ParamSpec = glib::ParamSpecEnum;
9295    type SetValue = Self;
9296    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9297
9298    fn param_spec_builder() -> Self::BuilderFn {
9299        Self::ParamSpec::builder_with_default
9300    }
9301}
9302
9303impl glib::value::ValueType for PrintDuplex {
9304    type Type = Self;
9305}
9306
9307unsafe impl<'a> glib::value::FromValue<'a> for PrintDuplex {
9308    type Checker = glib::value::GenericValueTypeChecker<Self>;
9309
9310    #[inline]
9311    unsafe fn from_value(value: &'a glib::Value) -> Self {
9312        skip_assert_initialized!();
9313        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9314    }
9315}
9316
9317impl ToValue for PrintDuplex {
9318    #[inline]
9319    fn to_value(&self) -> glib::Value {
9320        let mut value = glib::Value::for_value_type::<Self>();
9321        unsafe {
9322            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9323        }
9324        value
9325    }
9326
9327    #[inline]
9328    fn value_type(&self) -> glib::Type {
9329        Self::static_type()
9330    }
9331}
9332
9333impl From<PrintDuplex> for glib::Value {
9334    #[inline]
9335    fn from(v: PrintDuplex) -> Self {
9336        skip_assert_initialized!();
9337        ToValue::to_value(&v)
9338    }
9339}
9340
9341/// Error codes that identify various errors that can occur while
9342/// using the GTK printing support.
9343#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9344#[non_exhaustive]
9345#[doc(alias = "GtkPrintError")]
9346pub enum PrintError {
9347    /// An unspecified error occurred.
9348    #[doc(alias = "GTK_PRINT_ERROR_GENERAL")]
9349    General,
9350    /// An internal error occurred.
9351    #[doc(alias = "GTK_PRINT_ERROR_INTERNAL_ERROR")]
9352    InternalError,
9353    /// A memory allocation failed.
9354    #[doc(alias = "GTK_PRINT_ERROR_NOMEM")]
9355    Nomem,
9356    /// An error occurred while loading a page setup
9357    ///   or paper size from a key file.
9358    #[doc(alias = "GTK_PRINT_ERROR_INVALID_FILE")]
9359    InvalidFile,
9360    #[doc(hidden)]
9361    __Unknown(i32),
9362}
9363
9364#[doc(hidden)]
9365impl IntoGlib for PrintError {
9366    type GlibType = ffi::GtkPrintError;
9367
9368    #[inline]
9369    fn into_glib(self) -> ffi::GtkPrintError {
9370        match self {
9371            Self::General => ffi::GTK_PRINT_ERROR_GENERAL,
9372            Self::InternalError => ffi::GTK_PRINT_ERROR_INTERNAL_ERROR,
9373            Self::Nomem => ffi::GTK_PRINT_ERROR_NOMEM,
9374            Self::InvalidFile => ffi::GTK_PRINT_ERROR_INVALID_FILE,
9375            Self::__Unknown(value) => value,
9376        }
9377    }
9378}
9379
9380#[doc(hidden)]
9381impl FromGlib<ffi::GtkPrintError> for PrintError {
9382    #[inline]
9383    unsafe fn from_glib(value: ffi::GtkPrintError) -> Self {
9384        skip_assert_initialized!();
9385
9386        match value {
9387            ffi::GTK_PRINT_ERROR_GENERAL => Self::General,
9388            ffi::GTK_PRINT_ERROR_INTERNAL_ERROR => Self::InternalError,
9389            ffi::GTK_PRINT_ERROR_NOMEM => Self::Nomem,
9390            ffi::GTK_PRINT_ERROR_INVALID_FILE => Self::InvalidFile,
9391            value => Self::__Unknown(value),
9392        }
9393    }
9394}
9395
9396impl glib::error::ErrorDomain for PrintError {
9397    #[inline]
9398    fn domain() -> glib::Quark {
9399        skip_assert_initialized!();
9400
9401        unsafe { from_glib(ffi::gtk_print_error_quark()) }
9402    }
9403
9404    #[inline]
9405    fn code(self) -> i32 {
9406        self.into_glib()
9407    }
9408
9409    #[inline]
9410    #[allow(clippy::match_single_binding)]
9411    fn from(code: i32) -> Option<Self> {
9412        skip_assert_initialized!();
9413        match unsafe { from_glib(code) } {
9414            value => Some(value),
9415        }
9416    }
9417}
9418
9419impl StaticType for PrintError {
9420    #[inline]
9421    #[doc(alias = "gtk_print_error_get_type")]
9422    fn static_type() -> glib::Type {
9423        unsafe { from_glib(ffi::gtk_print_error_get_type()) }
9424    }
9425}
9426
9427impl glib::HasParamSpec for PrintError {
9428    type ParamSpec = glib::ParamSpecEnum;
9429    type SetValue = Self;
9430    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9431
9432    fn param_spec_builder() -> Self::BuilderFn {
9433        Self::ParamSpec::builder_with_default
9434    }
9435}
9436
9437impl glib::value::ValueType for PrintError {
9438    type Type = Self;
9439}
9440
9441unsafe impl<'a> glib::value::FromValue<'a> for PrintError {
9442    type Checker = glib::value::GenericValueTypeChecker<Self>;
9443
9444    #[inline]
9445    unsafe fn from_value(value: &'a glib::Value) -> Self {
9446        skip_assert_initialized!();
9447        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9448    }
9449}
9450
9451impl ToValue for PrintError {
9452    #[inline]
9453    fn to_value(&self) -> glib::Value {
9454        let mut value = glib::Value::for_value_type::<Self>();
9455        unsafe {
9456            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9457        }
9458        value
9459    }
9460
9461    #[inline]
9462    fn value_type(&self) -> glib::Type {
9463        Self::static_type()
9464    }
9465}
9466
9467impl From<PrintError> for glib::Value {
9468    #[inline]
9469    fn from(v: PrintError) -> Self {
9470        skip_assert_initialized!();
9471        ToValue::to_value(&v)
9472    }
9473}
9474
9475/// Determines what action the print operation should perform.
9476///
9477/// A parameter of this typs is passed to [`PrintOperationExt::run()`][crate::prelude::PrintOperationExt::run()].
9478#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9479#[non_exhaustive]
9480#[doc(alias = "GtkPrintOperationAction")]
9481pub enum PrintOperationAction {
9482    /// Show the print dialog.
9483    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG")]
9484    PrintDialog,
9485    /// Start to print without showing
9486    ///   the print dialog, based on the current print settings, if possible.
9487    ///   Depending on the platform, a print dialog might appear anyway.
9488    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_PRINT")]
9489    Print,
9490    /// Show the print preview.
9491    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_PREVIEW")]
9492    Preview,
9493    /// Export to a file. This requires
9494    ///   the export-filename property to be set.
9495    #[doc(alias = "GTK_PRINT_OPERATION_ACTION_EXPORT")]
9496    Export,
9497    #[doc(hidden)]
9498    __Unknown(i32),
9499}
9500
9501#[doc(hidden)]
9502impl IntoGlib for PrintOperationAction {
9503    type GlibType = ffi::GtkPrintOperationAction;
9504
9505    #[inline]
9506    fn into_glib(self) -> ffi::GtkPrintOperationAction {
9507        match self {
9508            Self::PrintDialog => ffi::GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
9509            Self::Print => ffi::GTK_PRINT_OPERATION_ACTION_PRINT,
9510            Self::Preview => ffi::GTK_PRINT_OPERATION_ACTION_PREVIEW,
9511            Self::Export => ffi::GTK_PRINT_OPERATION_ACTION_EXPORT,
9512            Self::__Unknown(value) => value,
9513        }
9514    }
9515}
9516
9517#[doc(hidden)]
9518impl FromGlib<ffi::GtkPrintOperationAction> for PrintOperationAction {
9519    #[inline]
9520    unsafe fn from_glib(value: ffi::GtkPrintOperationAction) -> Self {
9521        skip_assert_initialized!();
9522
9523        match value {
9524            ffi::GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG => Self::PrintDialog,
9525            ffi::GTK_PRINT_OPERATION_ACTION_PRINT => Self::Print,
9526            ffi::GTK_PRINT_OPERATION_ACTION_PREVIEW => Self::Preview,
9527            ffi::GTK_PRINT_OPERATION_ACTION_EXPORT => Self::Export,
9528            value => Self::__Unknown(value),
9529        }
9530    }
9531}
9532
9533impl StaticType for PrintOperationAction {
9534    #[inline]
9535    #[doc(alias = "gtk_print_operation_action_get_type")]
9536    fn static_type() -> glib::Type {
9537        unsafe { from_glib(ffi::gtk_print_operation_action_get_type()) }
9538    }
9539}
9540
9541impl glib::HasParamSpec for PrintOperationAction {
9542    type ParamSpec = glib::ParamSpecEnum;
9543    type SetValue = Self;
9544    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9545
9546    fn param_spec_builder() -> Self::BuilderFn {
9547        Self::ParamSpec::builder_with_default
9548    }
9549}
9550
9551impl glib::value::ValueType for PrintOperationAction {
9552    type Type = Self;
9553}
9554
9555unsafe impl<'a> glib::value::FromValue<'a> for PrintOperationAction {
9556    type Checker = glib::value::GenericValueTypeChecker<Self>;
9557
9558    #[inline]
9559    unsafe fn from_value(value: &'a glib::Value) -> Self {
9560        skip_assert_initialized!();
9561        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9562    }
9563}
9564
9565impl ToValue for PrintOperationAction {
9566    #[inline]
9567    fn to_value(&self) -> glib::Value {
9568        let mut value = glib::Value::for_value_type::<Self>();
9569        unsafe {
9570            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9571        }
9572        value
9573    }
9574
9575    #[inline]
9576    fn value_type(&self) -> glib::Type {
9577        Self::static_type()
9578    }
9579}
9580
9581impl From<PrintOperationAction> for glib::Value {
9582    #[inline]
9583    fn from(v: PrintOperationAction) -> Self {
9584        skip_assert_initialized!();
9585        ToValue::to_value(&v)
9586    }
9587}
9588
9589/// The result of a print operation.
9590///
9591/// A value of this type is returned by [`PrintOperationExt::run()`][crate::prelude::PrintOperationExt::run()].
9592#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9593#[non_exhaustive]
9594#[doc(alias = "GtkPrintOperationResult")]
9595pub enum PrintOperationResult {
9596    /// An error has occurred.
9597    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_ERROR")]
9598    Error,
9599    /// The print settings should be stored.
9600    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_APPLY")]
9601    Apply,
9602    /// The print operation has been canceled,
9603    ///   the print settings should not be stored.
9604    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_CANCEL")]
9605    Cancel,
9606    /// The print operation is not complete
9607    ///   yet. This value will only be returned when running asynchronously.
9608    #[doc(alias = "GTK_PRINT_OPERATION_RESULT_IN_PROGRESS")]
9609    InProgress,
9610    #[doc(hidden)]
9611    __Unknown(i32),
9612}
9613
9614#[doc(hidden)]
9615impl IntoGlib for PrintOperationResult {
9616    type GlibType = ffi::GtkPrintOperationResult;
9617
9618    #[inline]
9619    fn into_glib(self) -> ffi::GtkPrintOperationResult {
9620        match self {
9621            Self::Error => ffi::GTK_PRINT_OPERATION_RESULT_ERROR,
9622            Self::Apply => ffi::GTK_PRINT_OPERATION_RESULT_APPLY,
9623            Self::Cancel => ffi::GTK_PRINT_OPERATION_RESULT_CANCEL,
9624            Self::InProgress => ffi::GTK_PRINT_OPERATION_RESULT_IN_PROGRESS,
9625            Self::__Unknown(value) => value,
9626        }
9627    }
9628}
9629
9630#[doc(hidden)]
9631impl FromGlib<ffi::GtkPrintOperationResult> for PrintOperationResult {
9632    #[inline]
9633    unsafe fn from_glib(value: ffi::GtkPrintOperationResult) -> Self {
9634        skip_assert_initialized!();
9635
9636        match value {
9637            ffi::GTK_PRINT_OPERATION_RESULT_ERROR => Self::Error,
9638            ffi::GTK_PRINT_OPERATION_RESULT_APPLY => Self::Apply,
9639            ffi::GTK_PRINT_OPERATION_RESULT_CANCEL => Self::Cancel,
9640            ffi::GTK_PRINT_OPERATION_RESULT_IN_PROGRESS => Self::InProgress,
9641            value => Self::__Unknown(value),
9642        }
9643    }
9644}
9645
9646impl StaticType for PrintOperationResult {
9647    #[inline]
9648    #[doc(alias = "gtk_print_operation_result_get_type")]
9649    fn static_type() -> glib::Type {
9650        unsafe { from_glib(ffi::gtk_print_operation_result_get_type()) }
9651    }
9652}
9653
9654impl glib::HasParamSpec for PrintOperationResult {
9655    type ParamSpec = glib::ParamSpecEnum;
9656    type SetValue = Self;
9657    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9658
9659    fn param_spec_builder() -> Self::BuilderFn {
9660        Self::ParamSpec::builder_with_default
9661    }
9662}
9663
9664impl glib::value::ValueType for PrintOperationResult {
9665    type Type = Self;
9666}
9667
9668unsafe impl<'a> glib::value::FromValue<'a> for PrintOperationResult {
9669    type Checker = glib::value::GenericValueTypeChecker<Self>;
9670
9671    #[inline]
9672    unsafe fn from_value(value: &'a glib::Value) -> Self {
9673        skip_assert_initialized!();
9674        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9675    }
9676}
9677
9678impl ToValue for PrintOperationResult {
9679    #[inline]
9680    fn to_value(&self) -> glib::Value {
9681        let mut value = glib::Value::for_value_type::<Self>();
9682        unsafe {
9683            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9684        }
9685        value
9686    }
9687
9688    #[inline]
9689    fn value_type(&self) -> glib::Type {
9690        Self::static_type()
9691    }
9692}
9693
9694impl From<PrintOperationResult> for glib::Value {
9695    #[inline]
9696    fn from(v: PrintOperationResult) -> Self {
9697        skip_assert_initialized!();
9698        ToValue::to_value(&v)
9699    }
9700}
9701
9702/// See also gtk_print_job_set_pages()
9703#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9704#[non_exhaustive]
9705#[doc(alias = "GtkPrintPages")]
9706pub enum PrintPages {
9707    /// All pages.
9708    #[doc(alias = "GTK_PRINT_PAGES_ALL")]
9709    All,
9710    /// Current page.
9711    #[doc(alias = "GTK_PRINT_PAGES_CURRENT")]
9712    Current,
9713    /// Range of pages.
9714    #[doc(alias = "GTK_PRINT_PAGES_RANGES")]
9715    Ranges,
9716    /// Selected pages.
9717    #[doc(alias = "GTK_PRINT_PAGES_SELECTION")]
9718    Selection,
9719    #[doc(hidden)]
9720    __Unknown(i32),
9721}
9722
9723#[doc(hidden)]
9724impl IntoGlib for PrintPages {
9725    type GlibType = ffi::GtkPrintPages;
9726
9727    #[inline]
9728    fn into_glib(self) -> ffi::GtkPrintPages {
9729        match self {
9730            Self::All => ffi::GTK_PRINT_PAGES_ALL,
9731            Self::Current => ffi::GTK_PRINT_PAGES_CURRENT,
9732            Self::Ranges => ffi::GTK_PRINT_PAGES_RANGES,
9733            Self::Selection => ffi::GTK_PRINT_PAGES_SELECTION,
9734            Self::__Unknown(value) => value,
9735        }
9736    }
9737}
9738
9739#[doc(hidden)]
9740impl FromGlib<ffi::GtkPrintPages> for PrintPages {
9741    #[inline]
9742    unsafe fn from_glib(value: ffi::GtkPrintPages) -> Self {
9743        skip_assert_initialized!();
9744
9745        match value {
9746            ffi::GTK_PRINT_PAGES_ALL => Self::All,
9747            ffi::GTK_PRINT_PAGES_CURRENT => Self::Current,
9748            ffi::GTK_PRINT_PAGES_RANGES => Self::Ranges,
9749            ffi::GTK_PRINT_PAGES_SELECTION => Self::Selection,
9750            value => Self::__Unknown(value),
9751        }
9752    }
9753}
9754
9755impl StaticType for PrintPages {
9756    #[inline]
9757    #[doc(alias = "gtk_print_pages_get_type")]
9758    fn static_type() -> glib::Type {
9759        unsafe { from_glib(ffi::gtk_print_pages_get_type()) }
9760    }
9761}
9762
9763impl glib::HasParamSpec for PrintPages {
9764    type ParamSpec = glib::ParamSpecEnum;
9765    type SetValue = Self;
9766    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9767
9768    fn param_spec_builder() -> Self::BuilderFn {
9769        Self::ParamSpec::builder_with_default
9770    }
9771}
9772
9773impl glib::value::ValueType for PrintPages {
9774    type Type = Self;
9775}
9776
9777unsafe impl<'a> glib::value::FromValue<'a> for PrintPages {
9778    type Checker = glib::value::GenericValueTypeChecker<Self>;
9779
9780    #[inline]
9781    unsafe fn from_value(value: &'a glib::Value) -> Self {
9782        skip_assert_initialized!();
9783        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9784    }
9785}
9786
9787impl ToValue for PrintPages {
9788    #[inline]
9789    fn to_value(&self) -> glib::Value {
9790        let mut value = glib::Value::for_value_type::<Self>();
9791        unsafe {
9792            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9793        }
9794        value
9795    }
9796
9797    #[inline]
9798    fn value_type(&self) -> glib::Type {
9799        Self::static_type()
9800    }
9801}
9802
9803impl From<PrintPages> for glib::Value {
9804    #[inline]
9805    fn from(v: PrintPages) -> Self {
9806        skip_assert_initialized!();
9807        ToValue::to_value(&v)
9808    }
9809}
9810
9811/// See also gtk_print_settings_set_quality().
9812#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9813#[non_exhaustive]
9814#[doc(alias = "GtkPrintQuality")]
9815pub enum PrintQuality {
9816    /// Low quality.
9817    #[doc(alias = "GTK_PRINT_QUALITY_LOW")]
9818    Low,
9819    /// Normal quality.
9820    #[doc(alias = "GTK_PRINT_QUALITY_NORMAL")]
9821    Normal,
9822    /// High quality.
9823    #[doc(alias = "GTK_PRINT_QUALITY_HIGH")]
9824    High,
9825    /// Draft quality.
9826    #[doc(alias = "GTK_PRINT_QUALITY_DRAFT")]
9827    Draft,
9828    #[doc(hidden)]
9829    __Unknown(i32),
9830}
9831
9832#[doc(hidden)]
9833impl IntoGlib for PrintQuality {
9834    type GlibType = ffi::GtkPrintQuality;
9835
9836    #[inline]
9837    fn into_glib(self) -> ffi::GtkPrintQuality {
9838        match self {
9839            Self::Low => ffi::GTK_PRINT_QUALITY_LOW,
9840            Self::Normal => ffi::GTK_PRINT_QUALITY_NORMAL,
9841            Self::High => ffi::GTK_PRINT_QUALITY_HIGH,
9842            Self::Draft => ffi::GTK_PRINT_QUALITY_DRAFT,
9843            Self::__Unknown(value) => value,
9844        }
9845    }
9846}
9847
9848#[doc(hidden)]
9849impl FromGlib<ffi::GtkPrintQuality> for PrintQuality {
9850    #[inline]
9851    unsafe fn from_glib(value: ffi::GtkPrintQuality) -> Self {
9852        skip_assert_initialized!();
9853
9854        match value {
9855            ffi::GTK_PRINT_QUALITY_LOW => Self::Low,
9856            ffi::GTK_PRINT_QUALITY_NORMAL => Self::Normal,
9857            ffi::GTK_PRINT_QUALITY_HIGH => Self::High,
9858            ffi::GTK_PRINT_QUALITY_DRAFT => Self::Draft,
9859            value => Self::__Unknown(value),
9860        }
9861    }
9862}
9863
9864impl StaticType for PrintQuality {
9865    #[inline]
9866    #[doc(alias = "gtk_print_quality_get_type")]
9867    fn static_type() -> glib::Type {
9868        unsafe { from_glib(ffi::gtk_print_quality_get_type()) }
9869    }
9870}
9871
9872impl glib::HasParamSpec for PrintQuality {
9873    type ParamSpec = glib::ParamSpecEnum;
9874    type SetValue = Self;
9875    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
9876
9877    fn param_spec_builder() -> Self::BuilderFn {
9878        Self::ParamSpec::builder_with_default
9879    }
9880}
9881
9882impl glib::value::ValueType for PrintQuality {
9883    type Type = Self;
9884}
9885
9886unsafe impl<'a> glib::value::FromValue<'a> for PrintQuality {
9887    type Checker = glib::value::GenericValueTypeChecker<Self>;
9888
9889    #[inline]
9890    unsafe fn from_value(value: &'a glib::Value) -> Self {
9891        skip_assert_initialized!();
9892        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
9893    }
9894}
9895
9896impl ToValue for PrintQuality {
9897    #[inline]
9898    fn to_value(&self) -> glib::Value {
9899        let mut value = glib::Value::for_value_type::<Self>();
9900        unsafe {
9901            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
9902        }
9903        value
9904    }
9905
9906    #[inline]
9907    fn value_type(&self) -> glib::Type {
9908        Self::static_type()
9909    }
9910}
9911
9912impl From<PrintQuality> for glib::Value {
9913    #[inline]
9914    fn from(v: PrintQuality) -> Self {
9915        skip_assert_initialized!();
9916        ToValue::to_value(&v)
9917    }
9918}
9919
9920/// The status gives a rough indication of the completion of a running
9921/// print operation.
9922#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
9923#[non_exhaustive]
9924#[doc(alias = "GtkPrintStatus")]
9925pub enum PrintStatus {
9926    /// The printing has not started yet; this
9927    ///   status is set initially, and while the print dialog is shown.
9928    #[doc(alias = "GTK_PRINT_STATUS_INITIAL")]
9929    Initial,
9930    /// This status is set while the begin-print
9931    ///   signal is emitted and during pagination.
9932    #[doc(alias = "GTK_PRINT_STATUS_PREPARING")]
9933    Preparing,
9934    /// This status is set while the
9935    ///   pages are being rendered.
9936    #[doc(alias = "GTK_PRINT_STATUS_GENERATING_DATA")]
9937    GeneratingData,
9938    /// The print job is being sent off to the
9939    ///   printer.
9940    #[doc(alias = "GTK_PRINT_STATUS_SENDING_DATA")]
9941    SendingData,
9942    /// The print job has been sent to the printer,
9943    ///   but is not printed for some reason, e.g. the printer may be stopped.
9944    #[doc(alias = "GTK_PRINT_STATUS_PENDING")]
9945    Pending,
9946    /// Some problem has occurred during
9947    ///   printing, e.g. a paper jam.
9948    #[doc(alias = "GTK_PRINT_STATUS_PENDING_ISSUE")]
9949    PendingIssue,
9950    /// The printer is processing the print job.
9951    #[doc(alias = "GTK_PRINT_STATUS_PRINTING")]
9952    Printing,
9953    /// The printing has been completed successfully.
9954    #[doc(alias = "GTK_PRINT_STATUS_FINISHED")]
9955    Finished,
9956    /// The printing has been aborted.
9957    #[doc(alias = "GTK_PRINT_STATUS_FINISHED_ABORTED")]
9958    FinishedAborted,
9959    #[doc(hidden)]
9960    __Unknown(i32),
9961}
9962
9963#[doc(hidden)]
9964impl IntoGlib for PrintStatus {
9965    type GlibType = ffi::GtkPrintStatus;
9966
9967    #[inline]
9968    fn into_glib(self) -> ffi::GtkPrintStatus {
9969        match self {
9970            Self::Initial => ffi::GTK_PRINT_STATUS_INITIAL,
9971            Self::Preparing => ffi::GTK_PRINT_STATUS_PREPARING,
9972            Self::GeneratingData => ffi::GTK_PRINT_STATUS_GENERATING_DATA,
9973            Self::SendingData => ffi::GTK_PRINT_STATUS_SENDING_DATA,
9974            Self::Pending => ffi::GTK_PRINT_STATUS_PENDING,
9975            Self::PendingIssue => ffi::GTK_PRINT_STATUS_PENDING_ISSUE,
9976            Self::Printing => ffi::GTK_PRINT_STATUS_PRINTING,
9977            Self::Finished => ffi::GTK_PRINT_STATUS_FINISHED,
9978            Self::FinishedAborted => ffi::GTK_PRINT_STATUS_FINISHED_ABORTED,
9979            Self::__Unknown(value) => value,
9980        }
9981    }
9982}
9983
9984#[doc(hidden)]
9985impl FromGlib<ffi::GtkPrintStatus> for PrintStatus {
9986    #[inline]
9987    unsafe fn from_glib(value: ffi::GtkPrintStatus) -> Self {
9988        skip_assert_initialized!();
9989
9990        match value {
9991            ffi::GTK_PRINT_STATUS_INITIAL => Self::Initial,
9992            ffi::GTK_PRINT_STATUS_PREPARING => Self::Preparing,
9993            ffi::GTK_PRINT_STATUS_GENERATING_DATA => Self::GeneratingData,
9994            ffi::GTK_PRINT_STATUS_SENDING_DATA => Self::SendingData,
9995            ffi::GTK_PRINT_STATUS_PENDING => Self::Pending,
9996            ffi::GTK_PRINT_STATUS_PENDING_ISSUE => Self::PendingIssue,
9997            ffi::GTK_PRINT_STATUS_PRINTING => Self::Printing,
9998            ffi::GTK_PRINT_STATUS_FINISHED => Self::Finished,
9999            ffi::GTK_PRINT_STATUS_FINISHED_ABORTED => Self::FinishedAborted,
10000            value => Self::__Unknown(value),
10001        }
10002    }
10003}
10004
10005impl StaticType for PrintStatus {
10006    #[inline]
10007    #[doc(alias = "gtk_print_status_get_type")]
10008    fn static_type() -> glib::Type {
10009        unsafe { from_glib(ffi::gtk_print_status_get_type()) }
10010    }
10011}
10012
10013impl glib::HasParamSpec for PrintStatus {
10014    type ParamSpec = glib::ParamSpecEnum;
10015    type SetValue = Self;
10016    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10017
10018    fn param_spec_builder() -> Self::BuilderFn {
10019        Self::ParamSpec::builder_with_default
10020    }
10021}
10022
10023impl glib::value::ValueType for PrintStatus {
10024    type Type = Self;
10025}
10026
10027unsafe impl<'a> glib::value::FromValue<'a> for PrintStatus {
10028    type Checker = glib::value::GenericValueTypeChecker<Self>;
10029
10030    #[inline]
10031    unsafe fn from_value(value: &'a glib::Value) -> Self {
10032        skip_assert_initialized!();
10033        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10034    }
10035}
10036
10037impl ToValue for PrintStatus {
10038    #[inline]
10039    fn to_value(&self) -> glib::Value {
10040        let mut value = glib::Value::for_value_type::<Self>();
10041        unsafe {
10042            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10043        }
10044        value
10045    }
10046
10047    #[inline]
10048    fn value_type(&self) -> glib::Type {
10049        Self::static_type()
10050    }
10051}
10052
10053impl From<PrintStatus> for glib::Value {
10054    #[inline]
10055    fn from(v: PrintStatus) -> Self {
10056        skip_assert_initialized!();
10057        ToValue::to_value(&v)
10058    }
10059}
10060
10061/// Describes limits of a [`EventController`][crate::EventController] for handling events
10062/// targeting other widgets.
10063#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10064#[non_exhaustive]
10065#[doc(alias = "GtkPropagationLimit")]
10066pub enum PropagationLimit {
10067    /// Events are handled regardless of what their
10068    ///   target is.
10069    #[doc(alias = "GTK_LIMIT_NONE")]
10070    None,
10071    /// Events are only handled if their target is in
10072    ///   the same [`Native`][crate::Native] (or widget with [`limit-events`][struct@crate::Widget#limit-events]
10073    ///   set) as the event controllers widget.
10074    ///   Note that some event types have two targets (origin and destination).
10075    #[doc(alias = "GTK_LIMIT_SAME_NATIVE")]
10076    SameNative,
10077    #[doc(hidden)]
10078    __Unknown(i32),
10079}
10080
10081#[doc(hidden)]
10082impl IntoGlib for PropagationLimit {
10083    type GlibType = ffi::GtkPropagationLimit;
10084
10085    #[inline]
10086    fn into_glib(self) -> ffi::GtkPropagationLimit {
10087        match self {
10088            Self::None => ffi::GTK_LIMIT_NONE,
10089            Self::SameNative => ffi::GTK_LIMIT_SAME_NATIVE,
10090            Self::__Unknown(value) => value,
10091        }
10092    }
10093}
10094
10095#[doc(hidden)]
10096impl FromGlib<ffi::GtkPropagationLimit> for PropagationLimit {
10097    #[inline]
10098    unsafe fn from_glib(value: ffi::GtkPropagationLimit) -> Self {
10099        skip_assert_initialized!();
10100
10101        match value {
10102            ffi::GTK_LIMIT_NONE => Self::None,
10103            ffi::GTK_LIMIT_SAME_NATIVE => Self::SameNative,
10104            value => Self::__Unknown(value),
10105        }
10106    }
10107}
10108
10109impl StaticType for PropagationLimit {
10110    #[inline]
10111    #[doc(alias = "gtk_propagation_limit_get_type")]
10112    fn static_type() -> glib::Type {
10113        unsafe { from_glib(ffi::gtk_propagation_limit_get_type()) }
10114    }
10115}
10116
10117impl glib::HasParamSpec for PropagationLimit {
10118    type ParamSpec = glib::ParamSpecEnum;
10119    type SetValue = Self;
10120    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10121
10122    fn param_spec_builder() -> Self::BuilderFn {
10123        Self::ParamSpec::builder_with_default
10124    }
10125}
10126
10127impl glib::value::ValueType for PropagationLimit {
10128    type Type = Self;
10129}
10130
10131unsafe impl<'a> glib::value::FromValue<'a> for PropagationLimit {
10132    type Checker = glib::value::GenericValueTypeChecker<Self>;
10133
10134    #[inline]
10135    unsafe fn from_value(value: &'a glib::Value) -> Self {
10136        skip_assert_initialized!();
10137        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10138    }
10139}
10140
10141impl ToValue for PropagationLimit {
10142    #[inline]
10143    fn to_value(&self) -> glib::Value {
10144        let mut value = glib::Value::for_value_type::<Self>();
10145        unsafe {
10146            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10147        }
10148        value
10149    }
10150
10151    #[inline]
10152    fn value_type(&self) -> glib::Type {
10153        Self::static_type()
10154    }
10155}
10156
10157impl From<PropagationLimit> for glib::Value {
10158    #[inline]
10159    fn from(v: PropagationLimit) -> Self {
10160        skip_assert_initialized!();
10161        ToValue::to_value(&v)
10162    }
10163}
10164
10165/// Describes the stage at which events are fed into a [`EventController`][crate::EventController].
10166#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10167#[non_exhaustive]
10168#[doc(alias = "GtkPropagationPhase")]
10169pub enum PropagationPhase {
10170    /// Events are not delivered.
10171    #[doc(alias = "GTK_PHASE_NONE")]
10172    None,
10173    /// Events are delivered in the capture phase. The
10174    ///   capture phase happens before the bubble phase, runs from the toplevel down
10175    ///   to the event widget. This option should only be used on containers that
10176    ///   might possibly handle events before their children do.
10177    #[doc(alias = "GTK_PHASE_CAPTURE")]
10178    Capture,
10179    /// Events are delivered in the bubble phase. The bubble
10180    ///   phase happens after the capture phase, and before the default handlers
10181    ///   are run. This phase runs from the event widget, up to the toplevel.
10182    #[doc(alias = "GTK_PHASE_BUBBLE")]
10183    Bubble,
10184    /// Events are delivered in the default widget event handlers,
10185    ///   note that widget implementations must chain up on button, motion, touch and
10186    ///   grab broken handlers for controllers in this phase to be run.
10187    #[doc(alias = "GTK_PHASE_TARGET")]
10188    Target,
10189    #[doc(hidden)]
10190    __Unknown(i32),
10191}
10192
10193#[doc(hidden)]
10194impl IntoGlib for PropagationPhase {
10195    type GlibType = ffi::GtkPropagationPhase;
10196
10197    #[inline]
10198    fn into_glib(self) -> ffi::GtkPropagationPhase {
10199        match self {
10200            Self::None => ffi::GTK_PHASE_NONE,
10201            Self::Capture => ffi::GTK_PHASE_CAPTURE,
10202            Self::Bubble => ffi::GTK_PHASE_BUBBLE,
10203            Self::Target => ffi::GTK_PHASE_TARGET,
10204            Self::__Unknown(value) => value,
10205        }
10206    }
10207}
10208
10209#[doc(hidden)]
10210impl FromGlib<ffi::GtkPropagationPhase> for PropagationPhase {
10211    #[inline]
10212    unsafe fn from_glib(value: ffi::GtkPropagationPhase) -> Self {
10213        skip_assert_initialized!();
10214
10215        match value {
10216            ffi::GTK_PHASE_NONE => Self::None,
10217            ffi::GTK_PHASE_CAPTURE => Self::Capture,
10218            ffi::GTK_PHASE_BUBBLE => Self::Bubble,
10219            ffi::GTK_PHASE_TARGET => Self::Target,
10220            value => Self::__Unknown(value),
10221        }
10222    }
10223}
10224
10225impl StaticType for PropagationPhase {
10226    #[inline]
10227    #[doc(alias = "gtk_propagation_phase_get_type")]
10228    fn static_type() -> glib::Type {
10229        unsafe { from_glib(ffi::gtk_propagation_phase_get_type()) }
10230    }
10231}
10232
10233impl glib::HasParamSpec for PropagationPhase {
10234    type ParamSpec = glib::ParamSpecEnum;
10235    type SetValue = Self;
10236    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10237
10238    fn param_spec_builder() -> Self::BuilderFn {
10239        Self::ParamSpec::builder_with_default
10240    }
10241}
10242
10243impl glib::value::ValueType for PropagationPhase {
10244    type Type = Self;
10245}
10246
10247unsafe impl<'a> glib::value::FromValue<'a> for PropagationPhase {
10248    type Checker = glib::value::GenericValueTypeChecker<Self>;
10249
10250    #[inline]
10251    unsafe fn from_value(value: &'a glib::Value) -> Self {
10252        skip_assert_initialized!();
10253        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10254    }
10255}
10256
10257impl ToValue for PropagationPhase {
10258    #[inline]
10259    fn to_value(&self) -> glib::Value {
10260        let mut value = glib::Value::for_value_type::<Self>();
10261        unsafe {
10262            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10263        }
10264        value
10265    }
10266
10267    #[inline]
10268    fn value_type(&self) -> glib::Type {
10269        Self::static_type()
10270    }
10271}
10272
10273impl From<PropagationPhase> for glib::Value {
10274    #[inline]
10275    fn from(v: PropagationPhase) -> Self {
10276        skip_assert_initialized!();
10277        ToValue::to_value(&v)
10278    }
10279}
10280
10281/// Error codes for [`RecentManager`][crate::RecentManager] operations
10282#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10283#[non_exhaustive]
10284#[doc(alias = "GtkRecentManagerError")]
10285pub enum RecentManagerError {
10286    /// the URI specified does not exists in
10287    ///   the recently used resources list.
10288    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_NOT_FOUND")]
10289    NotFound,
10290    /// the URI specified is not valid.
10291    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_INVALID_URI")]
10292    InvalidUri,
10293    /// the supplied string is not
10294    ///   UTF-8 encoded.
10295    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING")]
10296    InvalidEncoding,
10297    /// no application has registered
10298    ///   the specified item.
10299    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED")]
10300    NotRegistered,
10301    /// failure while reading the recently used
10302    ///   resources file.
10303    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_READ")]
10304    Read,
10305    /// failure while writing the recently used
10306    ///   resources file.
10307    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_WRITE")]
10308    Write,
10309    /// unspecified error.
10310    #[doc(alias = "GTK_RECENT_MANAGER_ERROR_UNKNOWN")]
10311    Unknown,
10312    #[doc(hidden)]
10313    __Unknown(i32),
10314}
10315
10316#[doc(hidden)]
10317impl IntoGlib for RecentManagerError {
10318    type GlibType = ffi::GtkRecentManagerError;
10319
10320    #[inline]
10321    fn into_glib(self) -> ffi::GtkRecentManagerError {
10322        match self {
10323            Self::NotFound => ffi::GTK_RECENT_MANAGER_ERROR_NOT_FOUND,
10324            Self::InvalidUri => ffi::GTK_RECENT_MANAGER_ERROR_INVALID_URI,
10325            Self::InvalidEncoding => ffi::GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING,
10326            Self::NotRegistered => ffi::GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED,
10327            Self::Read => ffi::GTK_RECENT_MANAGER_ERROR_READ,
10328            Self::Write => ffi::GTK_RECENT_MANAGER_ERROR_WRITE,
10329            Self::Unknown => ffi::GTK_RECENT_MANAGER_ERROR_UNKNOWN,
10330            Self::__Unknown(value) => value,
10331        }
10332    }
10333}
10334
10335#[doc(hidden)]
10336impl FromGlib<ffi::GtkRecentManagerError> for RecentManagerError {
10337    #[inline]
10338    unsafe fn from_glib(value: ffi::GtkRecentManagerError) -> Self {
10339        skip_assert_initialized!();
10340
10341        match value {
10342            ffi::GTK_RECENT_MANAGER_ERROR_NOT_FOUND => Self::NotFound,
10343            ffi::GTK_RECENT_MANAGER_ERROR_INVALID_URI => Self::InvalidUri,
10344            ffi::GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING => Self::InvalidEncoding,
10345            ffi::GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED => Self::NotRegistered,
10346            ffi::GTK_RECENT_MANAGER_ERROR_READ => Self::Read,
10347            ffi::GTK_RECENT_MANAGER_ERROR_WRITE => Self::Write,
10348            ffi::GTK_RECENT_MANAGER_ERROR_UNKNOWN => Self::Unknown,
10349            value => Self::__Unknown(value),
10350        }
10351    }
10352}
10353
10354impl glib::error::ErrorDomain for RecentManagerError {
10355    #[inline]
10356    fn domain() -> glib::Quark {
10357        skip_assert_initialized!();
10358
10359        unsafe { from_glib(ffi::gtk_recent_manager_error_quark()) }
10360    }
10361
10362    #[inline]
10363    fn code(self) -> i32 {
10364        self.into_glib()
10365    }
10366
10367    #[inline]
10368    #[allow(clippy::match_single_binding)]
10369    fn from(code: i32) -> Option<Self> {
10370        skip_assert_initialized!();
10371        match unsafe { from_glib(code) } {
10372            value => Some(value),
10373        }
10374    }
10375}
10376
10377impl StaticType for RecentManagerError {
10378    #[inline]
10379    #[doc(alias = "gtk_recent_manager_error_get_type")]
10380    fn static_type() -> glib::Type {
10381        unsafe { from_glib(ffi::gtk_recent_manager_error_get_type()) }
10382    }
10383}
10384
10385impl glib::HasParamSpec for RecentManagerError {
10386    type ParamSpec = glib::ParamSpecEnum;
10387    type SetValue = Self;
10388    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10389
10390    fn param_spec_builder() -> Self::BuilderFn {
10391        Self::ParamSpec::builder_with_default
10392    }
10393}
10394
10395impl glib::value::ValueType for RecentManagerError {
10396    type Type = Self;
10397}
10398
10399unsafe impl<'a> glib::value::FromValue<'a> for RecentManagerError {
10400    type Checker = glib::value::GenericValueTypeChecker<Self>;
10401
10402    #[inline]
10403    unsafe fn from_value(value: &'a glib::Value) -> Self {
10404        skip_assert_initialized!();
10405        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10406    }
10407}
10408
10409impl ToValue for RecentManagerError {
10410    #[inline]
10411    fn to_value(&self) -> glib::Value {
10412        let mut value = glib::Value::for_value_type::<Self>();
10413        unsafe {
10414            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10415        }
10416        value
10417    }
10418
10419    #[inline]
10420    fn value_type(&self) -> glib::Type {
10421        Self::static_type()
10422    }
10423}
10424
10425impl From<RecentManagerError> for glib::Value {
10426    #[inline]
10427    fn from(v: RecentManagerError) -> Self {
10428        skip_assert_initialized!();
10429        ToValue::to_value(&v)
10430    }
10431}
10432
10433/// Values for the [`gtk-interface-reduced-motion`][struct@crate::Settings#gtk-interface-reduced-motion]
10434/// and [`prefers-reduced-motion`][struct@crate::CssProvider#prefers-reduced-motion] properties
10435/// that indicates the preferred level of motion animations.
10436///
10437/// This information can be used inside CSS via media queries.
10438#[cfg(feature = "v4_22")]
10439#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10440#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10441#[non_exhaustive]
10442#[doc(alias = "GtkReducedMotion")]
10443pub enum ReducedMotion {
10444    /// The user has made no preference known to the system
10445    #[doc(alias = "GTK_REDUCED_MOTION_NO_PREFERENCE")]
10446    NoPreference,
10447    /// The user has notified the system that they
10448    ///   prefer an interface that removes or replaces the types of motion-based
10449    ///   animation that either trigger discomfort for those with vestibular
10450    ///   motion sensitivity, or distraction for those with attention deficits
10451    #[doc(alias = "GTK_REDUCED_MOTION_REDUCE")]
10452    Reduce,
10453    #[doc(hidden)]
10454    __Unknown(i32),
10455}
10456
10457#[cfg(feature = "v4_22")]
10458#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10459#[doc(hidden)]
10460impl IntoGlib for ReducedMotion {
10461    type GlibType = ffi::GtkReducedMotion;
10462
10463    #[inline]
10464    fn into_glib(self) -> ffi::GtkReducedMotion {
10465        match self {
10466            Self::NoPreference => ffi::GTK_REDUCED_MOTION_NO_PREFERENCE,
10467            Self::Reduce => ffi::GTK_REDUCED_MOTION_REDUCE,
10468            Self::__Unknown(value) => value,
10469        }
10470    }
10471}
10472
10473#[cfg(feature = "v4_22")]
10474#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10475#[doc(hidden)]
10476impl FromGlib<ffi::GtkReducedMotion> for ReducedMotion {
10477    #[inline]
10478    unsafe fn from_glib(value: ffi::GtkReducedMotion) -> Self {
10479        skip_assert_initialized!();
10480
10481        match value {
10482            ffi::GTK_REDUCED_MOTION_NO_PREFERENCE => Self::NoPreference,
10483            ffi::GTK_REDUCED_MOTION_REDUCE => Self::Reduce,
10484            value => Self::__Unknown(value),
10485        }
10486    }
10487}
10488
10489#[cfg(feature = "v4_22")]
10490#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10491impl StaticType for ReducedMotion {
10492    #[inline]
10493    #[doc(alias = "gtk_reduced_motion_get_type")]
10494    fn static_type() -> glib::Type {
10495        unsafe { from_glib(ffi::gtk_reduced_motion_get_type()) }
10496    }
10497}
10498
10499#[cfg(feature = "v4_22")]
10500#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10501impl glib::HasParamSpec for ReducedMotion {
10502    type ParamSpec = glib::ParamSpecEnum;
10503    type SetValue = Self;
10504    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10505
10506    fn param_spec_builder() -> Self::BuilderFn {
10507        Self::ParamSpec::builder_with_default
10508    }
10509}
10510
10511#[cfg(feature = "v4_22")]
10512#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10513impl glib::value::ValueType for ReducedMotion {
10514    type Type = Self;
10515}
10516
10517#[cfg(feature = "v4_22")]
10518#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10519unsafe impl<'a> glib::value::FromValue<'a> for ReducedMotion {
10520    type Checker = glib::value::GenericValueTypeChecker<Self>;
10521
10522    #[inline]
10523    unsafe fn from_value(value: &'a glib::Value) -> Self {
10524        skip_assert_initialized!();
10525        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10526    }
10527}
10528
10529#[cfg(feature = "v4_22")]
10530#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10531impl ToValue for ReducedMotion {
10532    #[inline]
10533    fn to_value(&self) -> glib::Value {
10534        let mut value = glib::Value::for_value_type::<Self>();
10535        unsafe {
10536            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10537        }
10538        value
10539    }
10540
10541    #[inline]
10542    fn value_type(&self) -> glib::Type {
10543        Self::static_type()
10544    }
10545}
10546
10547#[cfg(feature = "v4_22")]
10548#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10549impl From<ReducedMotion> for glib::Value {
10550    #[inline]
10551    fn from(v: ReducedMotion) -> Self {
10552        skip_assert_initialized!();
10553        ToValue::to_value(&v)
10554    }
10555}
10556
10557/// Enumerates possible reasons for an application to restore saved state.
10558///
10559/// See [`restore-state`][struct@crate::Application#restore-state].
10560#[cfg(feature = "v4_24")]
10561#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10562#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10563#[non_exhaustive]
10564#[doc(alias = "GtkRestoreReason")]
10565pub enum RestoreReason {
10566    /// Don't restore anything
10567    #[doc(alias = "GTK_RESTORE_REASON_PRISTINE")]
10568    Pristine,
10569    /// This is normal launch. Restore as little as is reasonable
10570    #[doc(alias = "GTK_RESTORE_REASON_LAUNCH")]
10571    Launch,
10572    /// The application has crashed before. Try to restore the previous state
10573    #[doc(alias = "GTK_RESTORE_REASON_RECOVER")]
10574    Recover,
10575    /// This is a session restore. Restore the previous state as far as possible
10576    #[doc(alias = "GTK_RESTORE_REASON_RESTORE")]
10577    Restore,
10578    #[doc(hidden)]
10579    __Unknown(i32),
10580}
10581
10582#[cfg(feature = "v4_24")]
10583#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10584#[doc(hidden)]
10585impl IntoGlib for RestoreReason {
10586    type GlibType = ffi::GtkRestoreReason;
10587
10588    #[inline]
10589    fn into_glib(self) -> ffi::GtkRestoreReason {
10590        match self {
10591            Self::Pristine => ffi::GTK_RESTORE_REASON_PRISTINE,
10592            Self::Launch => ffi::GTK_RESTORE_REASON_LAUNCH,
10593            Self::Recover => ffi::GTK_RESTORE_REASON_RECOVER,
10594            Self::Restore => ffi::GTK_RESTORE_REASON_RESTORE,
10595            Self::__Unknown(value) => value,
10596        }
10597    }
10598}
10599
10600#[cfg(feature = "v4_24")]
10601#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10602#[doc(hidden)]
10603impl FromGlib<ffi::GtkRestoreReason> for RestoreReason {
10604    #[inline]
10605    unsafe fn from_glib(value: ffi::GtkRestoreReason) -> Self {
10606        skip_assert_initialized!();
10607
10608        match value {
10609            ffi::GTK_RESTORE_REASON_PRISTINE => Self::Pristine,
10610            ffi::GTK_RESTORE_REASON_LAUNCH => Self::Launch,
10611            ffi::GTK_RESTORE_REASON_RECOVER => Self::Recover,
10612            ffi::GTK_RESTORE_REASON_RESTORE => Self::Restore,
10613            value => Self::__Unknown(value),
10614        }
10615    }
10616}
10617
10618#[cfg(feature = "v4_24")]
10619#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10620impl StaticType for RestoreReason {
10621    #[inline]
10622    #[doc(alias = "gtk_restore_reason_get_type")]
10623    fn static_type() -> glib::Type {
10624        unsafe { from_glib(ffi::gtk_restore_reason_get_type()) }
10625    }
10626}
10627
10628#[cfg(feature = "v4_24")]
10629#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10630impl glib::HasParamSpec for RestoreReason {
10631    type ParamSpec = glib::ParamSpecEnum;
10632    type SetValue = Self;
10633    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10634
10635    fn param_spec_builder() -> Self::BuilderFn {
10636        Self::ParamSpec::builder_with_default
10637    }
10638}
10639
10640#[cfg(feature = "v4_24")]
10641#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10642impl glib::value::ValueType for RestoreReason {
10643    type Type = Self;
10644}
10645
10646#[cfg(feature = "v4_24")]
10647#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10648unsafe impl<'a> glib::value::FromValue<'a> for RestoreReason {
10649    type Checker = glib::value::GenericValueTypeChecker<Self>;
10650
10651    #[inline]
10652    unsafe fn from_value(value: &'a glib::Value) -> Self {
10653        skip_assert_initialized!();
10654        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10655    }
10656}
10657
10658#[cfg(feature = "v4_24")]
10659#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10660impl ToValue for RestoreReason {
10661    #[inline]
10662    fn to_value(&self) -> glib::Value {
10663        let mut value = glib::Value::for_value_type::<Self>();
10664        unsafe {
10665            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10666        }
10667        value
10668    }
10669
10670    #[inline]
10671    fn value_type(&self) -> glib::Type {
10672        Self::static_type()
10673    }
10674}
10675
10676#[cfg(feature = "v4_24")]
10677#[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
10678impl From<RestoreReason> for glib::Value {
10679    #[inline]
10680    fn from(v: RestoreReason) -> Self {
10681        skip_assert_initialized!();
10682        ToValue::to_value(&v)
10683    }
10684}
10685
10686/// These enumeration values describe the possible transitions
10687/// when the child of a [`Revealer`][crate::Revealer] widget is shown or hidden.
10688#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10689#[non_exhaustive]
10690#[doc(alias = "GtkRevealerTransitionType")]
10691pub enum RevealerTransitionType {
10692    /// No transition
10693    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_NONE")]
10694    None,
10695    /// Fade in
10696    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_CROSSFADE")]
10697    Crossfade,
10698    /// Slide in from the left
10699    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT")]
10700    SlideRight,
10701    /// Slide in from the right
10702    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT")]
10703    SlideLeft,
10704    /// Slide in from the bottom
10705    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP")]
10706    SlideUp,
10707    /// Slide in from the top
10708    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN")]
10709    SlideDown,
10710    /// Floop in from the left
10711    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_RIGHT")]
10712    SwingRight,
10713    /// Floop in from the right
10714    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_LEFT")]
10715    SwingLeft,
10716    /// Floop in from the bottom
10717    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_UP")]
10718    SwingUp,
10719    /// Floop in from the top
10720    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_SWING_DOWN")]
10721    SwingDown,
10722    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10723    /// and [enum@Gtk.RevealerTransitionType.SLIDE_RIGHT].
10724    #[cfg(feature = "v4_22")]
10725    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10726    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_RIGHT")]
10727    FadeSlideRight,
10728    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10729    /// and [enum@Gtk.RevealerTransitionType.SLIDE_LEFT].
10730    #[cfg(feature = "v4_22")]
10731    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10732    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_LEFT")]
10733    FadeSlideLeft,
10734    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10735    /// and [enum@Gtk.RevealerTransitionType.SLIDE_UP].
10736    #[cfg(feature = "v4_22")]
10737    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10738    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_UP")]
10739    FadeSlideUp,
10740    /// Combination of [enum@Gtk.RevealerTransitionType.CROSSFADE]
10741    /// and [enum@Gtk.RevealerTransitionType.SLIDE_DOWN].
10742    #[cfg(feature = "v4_22")]
10743    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
10744    #[doc(alias = "GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_DOWN")]
10745    FadeSlideDown,
10746    #[doc(hidden)]
10747    __Unknown(i32),
10748}
10749
10750#[doc(hidden)]
10751impl IntoGlib for RevealerTransitionType {
10752    type GlibType = ffi::GtkRevealerTransitionType;
10753
10754    fn into_glib(self) -> ffi::GtkRevealerTransitionType {
10755        match self {
10756            Self::None => ffi::GTK_REVEALER_TRANSITION_TYPE_NONE,
10757            Self::Crossfade => ffi::GTK_REVEALER_TRANSITION_TYPE_CROSSFADE,
10758            Self::SlideRight => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT,
10759            Self::SlideLeft => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT,
10760            Self::SlideUp => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP,
10761            Self::SlideDown => ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN,
10762            Self::SwingRight => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_RIGHT,
10763            Self::SwingLeft => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_LEFT,
10764            Self::SwingUp => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_UP,
10765            Self::SwingDown => ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_DOWN,
10766            #[cfg(feature = "v4_22")]
10767            Self::FadeSlideRight => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_RIGHT,
10768            #[cfg(feature = "v4_22")]
10769            Self::FadeSlideLeft => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_LEFT,
10770            #[cfg(feature = "v4_22")]
10771            Self::FadeSlideUp => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_UP,
10772            #[cfg(feature = "v4_22")]
10773            Self::FadeSlideDown => ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_DOWN,
10774            Self::__Unknown(value) => value,
10775        }
10776    }
10777}
10778
10779#[doc(hidden)]
10780impl FromGlib<ffi::GtkRevealerTransitionType> for RevealerTransitionType {
10781    unsafe fn from_glib(value: ffi::GtkRevealerTransitionType) -> Self {
10782        skip_assert_initialized!();
10783
10784        match value {
10785            ffi::GTK_REVEALER_TRANSITION_TYPE_NONE => Self::None,
10786            ffi::GTK_REVEALER_TRANSITION_TYPE_CROSSFADE => Self::Crossfade,
10787            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT => Self::SlideRight,
10788            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT => Self::SlideLeft,
10789            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP => Self::SlideUp,
10790            ffi::GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN => Self::SlideDown,
10791            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_RIGHT => Self::SwingRight,
10792            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_LEFT => Self::SwingLeft,
10793            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_UP => Self::SwingUp,
10794            ffi::GTK_REVEALER_TRANSITION_TYPE_SWING_DOWN => Self::SwingDown,
10795            #[cfg(feature = "v4_22")]
10796            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_RIGHT => Self::FadeSlideRight,
10797            #[cfg(feature = "v4_22")]
10798            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_LEFT => Self::FadeSlideLeft,
10799            #[cfg(feature = "v4_22")]
10800            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_UP => Self::FadeSlideUp,
10801            #[cfg(feature = "v4_22")]
10802            ffi::GTK_REVEALER_TRANSITION_TYPE_FADE_SLIDE_DOWN => Self::FadeSlideDown,
10803            value => Self::__Unknown(value),
10804        }
10805    }
10806}
10807
10808impl StaticType for RevealerTransitionType {
10809    #[inline]
10810    #[doc(alias = "gtk_revealer_transition_type_get_type")]
10811    fn static_type() -> glib::Type {
10812        unsafe { from_glib(ffi::gtk_revealer_transition_type_get_type()) }
10813    }
10814}
10815
10816impl glib::HasParamSpec for RevealerTransitionType {
10817    type ParamSpec = glib::ParamSpecEnum;
10818    type SetValue = Self;
10819    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10820
10821    fn param_spec_builder() -> Self::BuilderFn {
10822        Self::ParamSpec::builder_with_default
10823    }
10824}
10825
10826impl glib::value::ValueType for RevealerTransitionType {
10827    type Type = Self;
10828}
10829
10830unsafe impl<'a> glib::value::FromValue<'a> for RevealerTransitionType {
10831    type Checker = glib::value::GenericValueTypeChecker<Self>;
10832
10833    #[inline]
10834    unsafe fn from_value(value: &'a glib::Value) -> Self {
10835        skip_assert_initialized!();
10836        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10837    }
10838}
10839
10840impl ToValue for RevealerTransitionType {
10841    #[inline]
10842    fn to_value(&self) -> glib::Value {
10843        let mut value = glib::Value::for_value_type::<Self>();
10844        unsafe {
10845            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10846        }
10847        value
10848    }
10849
10850    #[inline]
10851    fn value_type(&self) -> glib::Type {
10852        Self::static_type()
10853    }
10854}
10855
10856impl From<RevealerTransitionType> for glib::Value {
10857    #[inline]
10858    fn from(v: RevealerTransitionType) -> Self {
10859        skip_assert_initialized!();
10860        ToValue::to_value(&v)
10861    }
10862}
10863
10864/// Passed as argument to various keybinding signals.
10865#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10866#[non_exhaustive]
10867#[doc(alias = "GtkScrollStep")]
10868pub enum ScrollStep {
10869    /// Scroll in steps.
10870    #[doc(alias = "GTK_SCROLL_STEPS")]
10871    Steps,
10872    /// Scroll by pages.
10873    #[doc(alias = "GTK_SCROLL_PAGES")]
10874    Pages,
10875    /// Scroll to ends.
10876    #[doc(alias = "GTK_SCROLL_ENDS")]
10877    Ends,
10878    /// Scroll in horizontal steps.
10879    #[doc(alias = "GTK_SCROLL_HORIZONTAL_STEPS")]
10880    HorizontalSteps,
10881    /// Scroll by horizontal pages.
10882    #[doc(alias = "GTK_SCROLL_HORIZONTAL_PAGES")]
10883    HorizontalPages,
10884    /// Scroll to the horizontal ends.
10885    #[doc(alias = "GTK_SCROLL_HORIZONTAL_ENDS")]
10886    HorizontalEnds,
10887    #[doc(hidden)]
10888    __Unknown(i32),
10889}
10890
10891#[doc(hidden)]
10892impl IntoGlib for ScrollStep {
10893    type GlibType = ffi::GtkScrollStep;
10894
10895    #[inline]
10896    fn into_glib(self) -> ffi::GtkScrollStep {
10897        match self {
10898            Self::Steps => ffi::GTK_SCROLL_STEPS,
10899            Self::Pages => ffi::GTK_SCROLL_PAGES,
10900            Self::Ends => ffi::GTK_SCROLL_ENDS,
10901            Self::HorizontalSteps => ffi::GTK_SCROLL_HORIZONTAL_STEPS,
10902            Self::HorizontalPages => ffi::GTK_SCROLL_HORIZONTAL_PAGES,
10903            Self::HorizontalEnds => ffi::GTK_SCROLL_HORIZONTAL_ENDS,
10904            Self::__Unknown(value) => value,
10905        }
10906    }
10907}
10908
10909#[doc(hidden)]
10910impl FromGlib<ffi::GtkScrollStep> for ScrollStep {
10911    #[inline]
10912    unsafe fn from_glib(value: ffi::GtkScrollStep) -> Self {
10913        skip_assert_initialized!();
10914
10915        match value {
10916            ffi::GTK_SCROLL_STEPS => Self::Steps,
10917            ffi::GTK_SCROLL_PAGES => Self::Pages,
10918            ffi::GTK_SCROLL_ENDS => Self::Ends,
10919            ffi::GTK_SCROLL_HORIZONTAL_STEPS => Self::HorizontalSteps,
10920            ffi::GTK_SCROLL_HORIZONTAL_PAGES => Self::HorizontalPages,
10921            ffi::GTK_SCROLL_HORIZONTAL_ENDS => Self::HorizontalEnds,
10922            value => Self::__Unknown(value),
10923        }
10924    }
10925}
10926
10927impl StaticType for ScrollStep {
10928    #[inline]
10929    #[doc(alias = "gtk_scroll_step_get_type")]
10930    fn static_type() -> glib::Type {
10931        unsafe { from_glib(ffi::gtk_scroll_step_get_type()) }
10932    }
10933}
10934
10935impl glib::HasParamSpec for ScrollStep {
10936    type ParamSpec = glib::ParamSpecEnum;
10937    type SetValue = Self;
10938    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
10939
10940    fn param_spec_builder() -> Self::BuilderFn {
10941        Self::ParamSpec::builder_with_default
10942    }
10943}
10944
10945impl glib::value::ValueType for ScrollStep {
10946    type Type = Self;
10947}
10948
10949unsafe impl<'a> glib::value::FromValue<'a> for ScrollStep {
10950    type Checker = glib::value::GenericValueTypeChecker<Self>;
10951
10952    #[inline]
10953    unsafe fn from_value(value: &'a glib::Value) -> Self {
10954        skip_assert_initialized!();
10955        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
10956    }
10957}
10958
10959impl ToValue for ScrollStep {
10960    #[inline]
10961    fn to_value(&self) -> glib::Value {
10962        let mut value = glib::Value::for_value_type::<Self>();
10963        unsafe {
10964            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
10965        }
10966        value
10967    }
10968
10969    #[inline]
10970    fn value_type(&self) -> glib::Type {
10971        Self::static_type()
10972    }
10973}
10974
10975impl From<ScrollStep> for glib::Value {
10976    #[inline]
10977    fn from(v: ScrollStep) -> Self {
10978        skip_assert_initialized!();
10979        ToValue::to_value(&v)
10980    }
10981}
10982
10983/// Scrolling types.
10984#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
10985#[non_exhaustive]
10986#[doc(alias = "GtkScrollType")]
10987pub enum ScrollType {
10988    /// No scrolling.
10989    #[doc(alias = "GTK_SCROLL_NONE")]
10990    None,
10991    /// Jump to new location.
10992    #[doc(alias = "GTK_SCROLL_JUMP")]
10993    Jump,
10994    /// Step backward.
10995    #[doc(alias = "GTK_SCROLL_STEP_BACKWARD")]
10996    StepBackward,
10997    /// Step forward.
10998    #[doc(alias = "GTK_SCROLL_STEP_FORWARD")]
10999    StepForward,
11000    /// Page backward.
11001    #[doc(alias = "GTK_SCROLL_PAGE_BACKWARD")]
11002    PageBackward,
11003    /// Page forward.
11004    #[doc(alias = "GTK_SCROLL_PAGE_FORWARD")]
11005    PageForward,
11006    /// Step up.
11007    #[doc(alias = "GTK_SCROLL_STEP_UP")]
11008    StepUp,
11009    /// Step down.
11010    #[doc(alias = "GTK_SCROLL_STEP_DOWN")]
11011    StepDown,
11012    /// Page up.
11013    #[doc(alias = "GTK_SCROLL_PAGE_UP")]
11014    PageUp,
11015    /// Page down.
11016    #[doc(alias = "GTK_SCROLL_PAGE_DOWN")]
11017    PageDown,
11018    /// Step to the left.
11019    #[doc(alias = "GTK_SCROLL_STEP_LEFT")]
11020    StepLeft,
11021    /// Step to the right.
11022    #[doc(alias = "GTK_SCROLL_STEP_RIGHT")]
11023    StepRight,
11024    /// Page to the left.
11025    #[doc(alias = "GTK_SCROLL_PAGE_LEFT")]
11026    PageLeft,
11027    /// Page to the right.
11028    #[doc(alias = "GTK_SCROLL_PAGE_RIGHT")]
11029    PageRight,
11030    /// Scroll to start.
11031    #[doc(alias = "GTK_SCROLL_START")]
11032    Start,
11033    /// Scroll to end.
11034    #[doc(alias = "GTK_SCROLL_END")]
11035    End,
11036    #[doc(hidden)]
11037    __Unknown(i32),
11038}
11039
11040#[doc(hidden)]
11041impl IntoGlib for ScrollType {
11042    type GlibType = ffi::GtkScrollType;
11043
11044    fn into_glib(self) -> ffi::GtkScrollType {
11045        match self {
11046            Self::None => ffi::GTK_SCROLL_NONE,
11047            Self::Jump => ffi::GTK_SCROLL_JUMP,
11048            Self::StepBackward => ffi::GTK_SCROLL_STEP_BACKWARD,
11049            Self::StepForward => ffi::GTK_SCROLL_STEP_FORWARD,
11050            Self::PageBackward => ffi::GTK_SCROLL_PAGE_BACKWARD,
11051            Self::PageForward => ffi::GTK_SCROLL_PAGE_FORWARD,
11052            Self::StepUp => ffi::GTK_SCROLL_STEP_UP,
11053            Self::StepDown => ffi::GTK_SCROLL_STEP_DOWN,
11054            Self::PageUp => ffi::GTK_SCROLL_PAGE_UP,
11055            Self::PageDown => ffi::GTK_SCROLL_PAGE_DOWN,
11056            Self::StepLeft => ffi::GTK_SCROLL_STEP_LEFT,
11057            Self::StepRight => ffi::GTK_SCROLL_STEP_RIGHT,
11058            Self::PageLeft => ffi::GTK_SCROLL_PAGE_LEFT,
11059            Self::PageRight => ffi::GTK_SCROLL_PAGE_RIGHT,
11060            Self::Start => ffi::GTK_SCROLL_START,
11061            Self::End => ffi::GTK_SCROLL_END,
11062            Self::__Unknown(value) => value,
11063        }
11064    }
11065}
11066
11067#[doc(hidden)]
11068impl FromGlib<ffi::GtkScrollType> for ScrollType {
11069    unsafe fn from_glib(value: ffi::GtkScrollType) -> Self {
11070        skip_assert_initialized!();
11071
11072        match value {
11073            ffi::GTK_SCROLL_NONE => Self::None,
11074            ffi::GTK_SCROLL_JUMP => Self::Jump,
11075            ffi::GTK_SCROLL_STEP_BACKWARD => Self::StepBackward,
11076            ffi::GTK_SCROLL_STEP_FORWARD => Self::StepForward,
11077            ffi::GTK_SCROLL_PAGE_BACKWARD => Self::PageBackward,
11078            ffi::GTK_SCROLL_PAGE_FORWARD => Self::PageForward,
11079            ffi::GTK_SCROLL_STEP_UP => Self::StepUp,
11080            ffi::GTK_SCROLL_STEP_DOWN => Self::StepDown,
11081            ffi::GTK_SCROLL_PAGE_UP => Self::PageUp,
11082            ffi::GTK_SCROLL_PAGE_DOWN => Self::PageDown,
11083            ffi::GTK_SCROLL_STEP_LEFT => Self::StepLeft,
11084            ffi::GTK_SCROLL_STEP_RIGHT => Self::StepRight,
11085            ffi::GTK_SCROLL_PAGE_LEFT => Self::PageLeft,
11086            ffi::GTK_SCROLL_PAGE_RIGHT => Self::PageRight,
11087            ffi::GTK_SCROLL_START => Self::Start,
11088            ffi::GTK_SCROLL_END => Self::End,
11089            value => Self::__Unknown(value),
11090        }
11091    }
11092}
11093
11094impl StaticType for ScrollType {
11095    #[inline]
11096    #[doc(alias = "gtk_scroll_type_get_type")]
11097    fn static_type() -> glib::Type {
11098        unsafe { from_glib(ffi::gtk_scroll_type_get_type()) }
11099    }
11100}
11101
11102impl glib::HasParamSpec for ScrollType {
11103    type ParamSpec = glib::ParamSpecEnum;
11104    type SetValue = Self;
11105    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11106
11107    fn param_spec_builder() -> Self::BuilderFn {
11108        Self::ParamSpec::builder_with_default
11109    }
11110}
11111
11112impl glib::value::ValueType for ScrollType {
11113    type Type = Self;
11114}
11115
11116unsafe impl<'a> glib::value::FromValue<'a> for ScrollType {
11117    type Checker = glib::value::GenericValueTypeChecker<Self>;
11118
11119    #[inline]
11120    unsafe fn from_value(value: &'a glib::Value) -> Self {
11121        skip_assert_initialized!();
11122        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11123    }
11124}
11125
11126impl ToValue for ScrollType {
11127    #[inline]
11128    fn to_value(&self) -> glib::Value {
11129        let mut value = glib::Value::for_value_type::<Self>();
11130        unsafe {
11131            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11132        }
11133        value
11134    }
11135
11136    #[inline]
11137    fn value_type(&self) -> glib::Type {
11138        Self::static_type()
11139    }
11140}
11141
11142impl From<ScrollType> for glib::Value {
11143    #[inline]
11144    fn from(v: ScrollType) -> Self {
11145        skip_assert_initialized!();
11146        ToValue::to_value(&v)
11147    }
11148}
11149
11150/// Defines the policy to be used in a scrollable widget when updating
11151/// the scrolled window adjustments in a given orientation.
11152#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11153#[non_exhaustive]
11154#[doc(alias = "GtkScrollablePolicy")]
11155pub enum ScrollablePolicy {
11156    /// Scrollable adjustments are based on the minimum size
11157    #[doc(alias = "GTK_SCROLL_MINIMUM")]
11158    Minimum,
11159    /// Scrollable adjustments are based on the natural size
11160    #[doc(alias = "GTK_SCROLL_NATURAL")]
11161    Natural,
11162    #[doc(hidden)]
11163    __Unknown(i32),
11164}
11165
11166#[doc(hidden)]
11167impl IntoGlib for ScrollablePolicy {
11168    type GlibType = ffi::GtkScrollablePolicy;
11169
11170    #[inline]
11171    fn into_glib(self) -> ffi::GtkScrollablePolicy {
11172        match self {
11173            Self::Minimum => ffi::GTK_SCROLL_MINIMUM,
11174            Self::Natural => ffi::GTK_SCROLL_NATURAL,
11175            Self::__Unknown(value) => value,
11176        }
11177    }
11178}
11179
11180#[doc(hidden)]
11181impl FromGlib<ffi::GtkScrollablePolicy> for ScrollablePolicy {
11182    #[inline]
11183    unsafe fn from_glib(value: ffi::GtkScrollablePolicy) -> Self {
11184        skip_assert_initialized!();
11185
11186        match value {
11187            ffi::GTK_SCROLL_MINIMUM => Self::Minimum,
11188            ffi::GTK_SCROLL_NATURAL => Self::Natural,
11189            value => Self::__Unknown(value),
11190        }
11191    }
11192}
11193
11194impl StaticType for ScrollablePolicy {
11195    #[inline]
11196    #[doc(alias = "gtk_scrollable_policy_get_type")]
11197    fn static_type() -> glib::Type {
11198        unsafe { from_glib(ffi::gtk_scrollable_policy_get_type()) }
11199    }
11200}
11201
11202impl glib::HasParamSpec for ScrollablePolicy {
11203    type ParamSpec = glib::ParamSpecEnum;
11204    type SetValue = Self;
11205    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11206
11207    fn param_spec_builder() -> Self::BuilderFn {
11208        Self::ParamSpec::builder_with_default
11209    }
11210}
11211
11212impl glib::value::ValueType for ScrollablePolicy {
11213    type Type = Self;
11214}
11215
11216unsafe impl<'a> glib::value::FromValue<'a> for ScrollablePolicy {
11217    type Checker = glib::value::GenericValueTypeChecker<Self>;
11218
11219    #[inline]
11220    unsafe fn from_value(value: &'a glib::Value) -> Self {
11221        skip_assert_initialized!();
11222        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11223    }
11224}
11225
11226impl ToValue for ScrollablePolicy {
11227    #[inline]
11228    fn to_value(&self) -> glib::Value {
11229        let mut value = glib::Value::for_value_type::<Self>();
11230        unsafe {
11231            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11232        }
11233        value
11234    }
11235
11236    #[inline]
11237    fn value_type(&self) -> glib::Type {
11238        Self::static_type()
11239    }
11240}
11241
11242impl From<ScrollablePolicy> for glib::Value {
11243    #[inline]
11244    fn from(v: ScrollablePolicy) -> Self {
11245        skip_assert_initialized!();
11246        ToValue::to_value(&v)
11247    }
11248}
11249
11250/// Used to control what selections users are allowed to make.
11251#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11252#[non_exhaustive]
11253#[doc(alias = "GtkSelectionMode")]
11254pub enum SelectionMode {
11255    /// No selection is possible.
11256    #[doc(alias = "GTK_SELECTION_NONE")]
11257    None,
11258    /// Zero or one element may be selected.
11259    #[doc(alias = "GTK_SELECTION_SINGLE")]
11260    Single,
11261    /// Exactly one element is selected.
11262    ///   In some circumstances, such as initially or during a search
11263    ///   operation, it’s possible for no element to be selected with
11264    ///   [`Browse`][Self::Browse]. What is really enforced is that the user
11265    ///   can’t deselect a currently selected element except by selecting
11266    ///   another element.
11267    #[doc(alias = "GTK_SELECTION_BROWSE")]
11268    Browse,
11269    /// Any number of elements may be selected.
11270    ///   The Ctrl key may be used to enlarge the selection, and Shift
11271    ///   key to select between the focus and the child pointed to.
11272    ///   Some widgets may also allow Click-drag to select a range of elements.
11273    #[doc(alias = "GTK_SELECTION_MULTIPLE")]
11274    Multiple,
11275    #[doc(hidden)]
11276    __Unknown(i32),
11277}
11278
11279#[doc(hidden)]
11280impl IntoGlib for SelectionMode {
11281    type GlibType = ffi::GtkSelectionMode;
11282
11283    #[inline]
11284    fn into_glib(self) -> ffi::GtkSelectionMode {
11285        match self {
11286            Self::None => ffi::GTK_SELECTION_NONE,
11287            Self::Single => ffi::GTK_SELECTION_SINGLE,
11288            Self::Browse => ffi::GTK_SELECTION_BROWSE,
11289            Self::Multiple => ffi::GTK_SELECTION_MULTIPLE,
11290            Self::__Unknown(value) => value,
11291        }
11292    }
11293}
11294
11295#[doc(hidden)]
11296impl FromGlib<ffi::GtkSelectionMode> for SelectionMode {
11297    #[inline]
11298    unsafe fn from_glib(value: ffi::GtkSelectionMode) -> Self {
11299        skip_assert_initialized!();
11300
11301        match value {
11302            ffi::GTK_SELECTION_NONE => Self::None,
11303            ffi::GTK_SELECTION_SINGLE => Self::Single,
11304            ffi::GTK_SELECTION_BROWSE => Self::Browse,
11305            ffi::GTK_SELECTION_MULTIPLE => Self::Multiple,
11306            value => Self::__Unknown(value),
11307        }
11308    }
11309}
11310
11311impl StaticType for SelectionMode {
11312    #[inline]
11313    #[doc(alias = "gtk_selection_mode_get_type")]
11314    fn static_type() -> glib::Type {
11315        unsafe { from_glib(ffi::gtk_selection_mode_get_type()) }
11316    }
11317}
11318
11319impl glib::HasParamSpec for SelectionMode {
11320    type ParamSpec = glib::ParamSpecEnum;
11321    type SetValue = Self;
11322    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11323
11324    fn param_spec_builder() -> Self::BuilderFn {
11325        Self::ParamSpec::builder_with_default
11326    }
11327}
11328
11329impl glib::value::ValueType for SelectionMode {
11330    type Type = Self;
11331}
11332
11333unsafe impl<'a> glib::value::FromValue<'a> for SelectionMode {
11334    type Checker = glib::value::GenericValueTypeChecker<Self>;
11335
11336    #[inline]
11337    unsafe fn from_value(value: &'a glib::Value) -> Self {
11338        skip_assert_initialized!();
11339        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11340    }
11341}
11342
11343impl ToValue for SelectionMode {
11344    #[inline]
11345    fn to_value(&self) -> glib::Value {
11346        let mut value = glib::Value::for_value_type::<Self>();
11347        unsafe {
11348            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11349        }
11350        value
11351    }
11352
11353    #[inline]
11354    fn value_type(&self) -> glib::Type {
11355        Self::static_type()
11356    }
11357}
11358
11359impl From<SelectionMode> for glib::Value {
11360    #[inline]
11361    fn from(v: SelectionMode) -> Self {
11362        skip_assert_initialized!();
11363        ToValue::to_value(&v)
11364    }
11365}
11366
11367/// Determines how GTK handles the sensitivity of various controls,
11368/// such as combo box buttons.
11369#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11370#[non_exhaustive]
11371#[doc(alias = "GtkSensitivityType")]
11372pub enum SensitivityType {
11373    /// The control is made insensitive if no
11374    ///   action can be triggered
11375    #[doc(alias = "GTK_SENSITIVITY_AUTO")]
11376    Auto,
11377    /// The control is always sensitive
11378    #[doc(alias = "GTK_SENSITIVITY_ON")]
11379    On,
11380    /// The control is always insensitive
11381    #[doc(alias = "GTK_SENSITIVITY_OFF")]
11382    Off,
11383    #[doc(hidden)]
11384    __Unknown(i32),
11385}
11386
11387#[doc(hidden)]
11388impl IntoGlib for SensitivityType {
11389    type GlibType = ffi::GtkSensitivityType;
11390
11391    #[inline]
11392    fn into_glib(self) -> ffi::GtkSensitivityType {
11393        match self {
11394            Self::Auto => ffi::GTK_SENSITIVITY_AUTO,
11395            Self::On => ffi::GTK_SENSITIVITY_ON,
11396            Self::Off => ffi::GTK_SENSITIVITY_OFF,
11397            Self::__Unknown(value) => value,
11398        }
11399    }
11400}
11401
11402#[doc(hidden)]
11403impl FromGlib<ffi::GtkSensitivityType> for SensitivityType {
11404    #[inline]
11405    unsafe fn from_glib(value: ffi::GtkSensitivityType) -> Self {
11406        skip_assert_initialized!();
11407
11408        match value {
11409            ffi::GTK_SENSITIVITY_AUTO => Self::Auto,
11410            ffi::GTK_SENSITIVITY_ON => Self::On,
11411            ffi::GTK_SENSITIVITY_OFF => Self::Off,
11412            value => Self::__Unknown(value),
11413        }
11414    }
11415}
11416
11417impl StaticType for SensitivityType {
11418    #[inline]
11419    #[doc(alias = "gtk_sensitivity_type_get_type")]
11420    fn static_type() -> glib::Type {
11421        unsafe { from_glib(ffi::gtk_sensitivity_type_get_type()) }
11422    }
11423}
11424
11425impl glib::HasParamSpec for SensitivityType {
11426    type ParamSpec = glib::ParamSpecEnum;
11427    type SetValue = Self;
11428    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11429
11430    fn param_spec_builder() -> Self::BuilderFn {
11431        Self::ParamSpec::builder_with_default
11432    }
11433}
11434
11435impl glib::value::ValueType for SensitivityType {
11436    type Type = Self;
11437}
11438
11439unsafe impl<'a> glib::value::FromValue<'a> for SensitivityType {
11440    type Checker = glib::value::GenericValueTypeChecker<Self>;
11441
11442    #[inline]
11443    unsafe fn from_value(value: &'a glib::Value) -> Self {
11444        skip_assert_initialized!();
11445        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11446    }
11447}
11448
11449impl ToValue for SensitivityType {
11450    #[inline]
11451    fn to_value(&self) -> glib::Value {
11452        let mut value = glib::Value::for_value_type::<Self>();
11453        unsafe {
11454            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11455        }
11456        value
11457    }
11458
11459    #[inline]
11460    fn value_type(&self) -> glib::Type {
11461        Self::static_type()
11462    }
11463}
11464
11465impl From<SensitivityType> for glib::Value {
11466    #[inline]
11467    fn from(v: SensitivityType) -> Self {
11468        skip_assert_initialized!();
11469        ToValue::to_value(&v)
11470    }
11471}
11472
11473/// Describes where [`Shortcut`][crate::Shortcut]s added to a
11474/// [`ShortcutController`][crate::ShortcutController] get handled.
11475#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11476#[non_exhaustive]
11477#[doc(alias = "GtkShortcutScope")]
11478pub enum ShortcutScope {
11479    /// Shortcuts are handled inside
11480    ///   the widget the controller belongs to.
11481    #[doc(alias = "GTK_SHORTCUT_SCOPE_LOCAL")]
11482    Local,
11483    /// Shortcuts are handled by
11484    ///   the first ancestor that is a [`ShortcutManager`][crate::ShortcutManager]
11485    #[doc(alias = "GTK_SHORTCUT_SCOPE_MANAGED")]
11486    Managed,
11487    /// Shortcuts are handled by
11488    ///   the root widget.
11489    #[doc(alias = "GTK_SHORTCUT_SCOPE_GLOBAL")]
11490    Global,
11491    #[doc(hidden)]
11492    __Unknown(i32),
11493}
11494
11495#[doc(hidden)]
11496impl IntoGlib for ShortcutScope {
11497    type GlibType = ffi::GtkShortcutScope;
11498
11499    #[inline]
11500    fn into_glib(self) -> ffi::GtkShortcutScope {
11501        match self {
11502            Self::Local => ffi::GTK_SHORTCUT_SCOPE_LOCAL,
11503            Self::Managed => ffi::GTK_SHORTCUT_SCOPE_MANAGED,
11504            Self::Global => ffi::GTK_SHORTCUT_SCOPE_GLOBAL,
11505            Self::__Unknown(value) => value,
11506        }
11507    }
11508}
11509
11510#[doc(hidden)]
11511impl FromGlib<ffi::GtkShortcutScope> for ShortcutScope {
11512    #[inline]
11513    unsafe fn from_glib(value: ffi::GtkShortcutScope) -> Self {
11514        skip_assert_initialized!();
11515
11516        match value {
11517            ffi::GTK_SHORTCUT_SCOPE_LOCAL => Self::Local,
11518            ffi::GTK_SHORTCUT_SCOPE_MANAGED => Self::Managed,
11519            ffi::GTK_SHORTCUT_SCOPE_GLOBAL => Self::Global,
11520            value => Self::__Unknown(value),
11521        }
11522    }
11523}
11524
11525impl StaticType for ShortcutScope {
11526    #[inline]
11527    #[doc(alias = "gtk_shortcut_scope_get_type")]
11528    fn static_type() -> glib::Type {
11529        unsafe { from_glib(ffi::gtk_shortcut_scope_get_type()) }
11530    }
11531}
11532
11533impl glib::HasParamSpec for ShortcutScope {
11534    type ParamSpec = glib::ParamSpecEnum;
11535    type SetValue = Self;
11536    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11537
11538    fn param_spec_builder() -> Self::BuilderFn {
11539        Self::ParamSpec::builder_with_default
11540    }
11541}
11542
11543impl glib::value::ValueType for ShortcutScope {
11544    type Type = Self;
11545}
11546
11547unsafe impl<'a> glib::value::FromValue<'a> for ShortcutScope {
11548    type Checker = glib::value::GenericValueTypeChecker<Self>;
11549
11550    #[inline]
11551    unsafe fn from_value(value: &'a glib::Value) -> Self {
11552        skip_assert_initialized!();
11553        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11554    }
11555}
11556
11557impl ToValue for ShortcutScope {
11558    #[inline]
11559    fn to_value(&self) -> glib::Value {
11560        let mut value = glib::Value::for_value_type::<Self>();
11561        unsafe {
11562            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11563        }
11564        value
11565    }
11566
11567    #[inline]
11568    fn value_type(&self) -> glib::Type {
11569        Self::static_type()
11570    }
11571}
11572
11573impl From<ShortcutScope> for glib::Value {
11574    #[inline]
11575    fn from(v: ShortcutScope) -> Self {
11576        skip_assert_initialized!();
11577        ToValue::to_value(&v)
11578    }
11579}
11580
11581/// GtkShortcutType specifies the kind of shortcut that is being described.
11582///
11583/// More values may be added to this enumeration over time.
11584#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11585#[non_exhaustive]
11586#[doc(alias = "GtkShortcutType")]
11587pub enum ShortcutType {
11588    /// The shortcut is a keyboard accelerator. The GtkShortcutsShortcut:accelerator
11589    ///   property will be used.
11590    #[doc(alias = "GTK_SHORTCUT_ACCELERATOR")]
11591    Accelerator,
11592    /// The shortcut is a pinch gesture. GTK provides an icon and subtitle.
11593    #[doc(alias = "GTK_SHORTCUT_GESTURE_PINCH")]
11594    GesturePinch,
11595    /// The shortcut is a stretch gesture. GTK provides an icon and subtitle.
11596    #[doc(alias = "GTK_SHORTCUT_GESTURE_STRETCH")]
11597    GestureStretch,
11598    /// The shortcut is a clockwise rotation gesture. GTK provides an icon and subtitle.
11599    #[doc(alias = "GTK_SHORTCUT_GESTURE_ROTATE_CLOCKWISE")]
11600    GestureRotateClockwise,
11601    /// The shortcut is a counterclockwise rotation gesture. GTK provides an icon and subtitle.
11602    #[doc(alias = "GTK_SHORTCUT_GESTURE_ROTATE_COUNTERCLOCKWISE")]
11603    GestureRotateCounterclockwise,
11604    /// The shortcut is a two-finger swipe gesture. GTK provides an icon and subtitle.
11605    #[doc(alias = "GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_LEFT")]
11606    GestureTwoFingerSwipeLeft,
11607    /// The shortcut is a two-finger swipe gesture. GTK provides an icon and subtitle.
11608    #[doc(alias = "GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_RIGHT")]
11609    GestureTwoFingerSwipeRight,
11610    /// The shortcut is a gesture. The GtkShortcutsShortcut:icon property will be
11611    ///   used.
11612    #[doc(alias = "GTK_SHORTCUT_GESTURE")]
11613    Gesture,
11614    /// The shortcut is a swipe gesture. GTK provides an icon and subtitle.
11615    #[doc(alias = "GTK_SHORTCUT_GESTURE_SWIPE_LEFT")]
11616    GestureSwipeLeft,
11617    /// The shortcut is a swipe gesture. GTK provides an icon and subtitle.
11618    #[doc(alias = "GTK_SHORTCUT_GESTURE_SWIPE_RIGHT")]
11619    GestureSwipeRight,
11620    #[doc(hidden)]
11621    __Unknown(i32),
11622}
11623
11624#[doc(hidden)]
11625impl IntoGlib for ShortcutType {
11626    type GlibType = ffi::GtkShortcutType;
11627
11628    #[inline]
11629    fn into_glib(self) -> ffi::GtkShortcutType {
11630        match self {
11631            Self::Accelerator => ffi::GTK_SHORTCUT_ACCELERATOR,
11632            Self::GesturePinch => ffi::GTK_SHORTCUT_GESTURE_PINCH,
11633            Self::GestureStretch => ffi::GTK_SHORTCUT_GESTURE_STRETCH,
11634            Self::GestureRotateClockwise => ffi::GTK_SHORTCUT_GESTURE_ROTATE_CLOCKWISE,
11635            Self::GestureRotateCounterclockwise => {
11636                ffi::GTK_SHORTCUT_GESTURE_ROTATE_COUNTERCLOCKWISE
11637            }
11638            Self::GestureTwoFingerSwipeLeft => ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_LEFT,
11639            Self::GestureTwoFingerSwipeRight => ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_RIGHT,
11640            Self::Gesture => ffi::GTK_SHORTCUT_GESTURE,
11641            Self::GestureSwipeLeft => ffi::GTK_SHORTCUT_GESTURE_SWIPE_LEFT,
11642            Self::GestureSwipeRight => ffi::GTK_SHORTCUT_GESTURE_SWIPE_RIGHT,
11643            Self::__Unknown(value) => value,
11644        }
11645    }
11646}
11647
11648#[doc(hidden)]
11649impl FromGlib<ffi::GtkShortcutType> for ShortcutType {
11650    #[inline]
11651    unsafe fn from_glib(value: ffi::GtkShortcutType) -> Self {
11652        skip_assert_initialized!();
11653
11654        match value {
11655            ffi::GTK_SHORTCUT_ACCELERATOR => Self::Accelerator,
11656            ffi::GTK_SHORTCUT_GESTURE_PINCH => Self::GesturePinch,
11657            ffi::GTK_SHORTCUT_GESTURE_STRETCH => Self::GestureStretch,
11658            ffi::GTK_SHORTCUT_GESTURE_ROTATE_CLOCKWISE => Self::GestureRotateClockwise,
11659            ffi::GTK_SHORTCUT_GESTURE_ROTATE_COUNTERCLOCKWISE => {
11660                Self::GestureRotateCounterclockwise
11661            }
11662            ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_LEFT => Self::GestureTwoFingerSwipeLeft,
11663            ffi::GTK_SHORTCUT_GESTURE_TWO_FINGER_SWIPE_RIGHT => Self::GestureTwoFingerSwipeRight,
11664            ffi::GTK_SHORTCUT_GESTURE => Self::Gesture,
11665            ffi::GTK_SHORTCUT_GESTURE_SWIPE_LEFT => Self::GestureSwipeLeft,
11666            ffi::GTK_SHORTCUT_GESTURE_SWIPE_RIGHT => Self::GestureSwipeRight,
11667            value => Self::__Unknown(value),
11668        }
11669    }
11670}
11671
11672impl StaticType for ShortcutType {
11673    #[inline]
11674    #[doc(alias = "gtk_shortcut_type_get_type")]
11675    fn static_type() -> glib::Type {
11676        unsafe { from_glib(ffi::gtk_shortcut_type_get_type()) }
11677    }
11678}
11679
11680impl glib::HasParamSpec for ShortcutType {
11681    type ParamSpec = glib::ParamSpecEnum;
11682    type SetValue = Self;
11683    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11684
11685    fn param_spec_builder() -> Self::BuilderFn {
11686        Self::ParamSpec::builder_with_default
11687    }
11688}
11689
11690impl glib::value::ValueType for ShortcutType {
11691    type Type = Self;
11692}
11693
11694unsafe impl<'a> glib::value::FromValue<'a> for ShortcutType {
11695    type Checker = glib::value::GenericValueTypeChecker<Self>;
11696
11697    #[inline]
11698    unsafe fn from_value(value: &'a glib::Value) -> Self {
11699        skip_assert_initialized!();
11700        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11701    }
11702}
11703
11704impl ToValue for ShortcutType {
11705    #[inline]
11706    fn to_value(&self) -> glib::Value {
11707        let mut value = glib::Value::for_value_type::<Self>();
11708        unsafe {
11709            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11710        }
11711        value
11712    }
11713
11714    #[inline]
11715    fn value_type(&self) -> glib::Type {
11716        Self::static_type()
11717    }
11718}
11719
11720impl From<ShortcutType> for glib::Value {
11721    #[inline]
11722    fn from(v: ShortcutType) -> Self {
11723        skip_assert_initialized!();
11724        ToValue::to_value(&v)
11725    }
11726}
11727
11728/// The mode of the size group determines the directions in which the size
11729/// group affects the requested sizes of its component widgets.
11730#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11731#[non_exhaustive]
11732#[doc(alias = "GtkSizeGroupMode")]
11733pub enum SizeGroupMode {
11734    /// group has no effect
11735    #[doc(alias = "GTK_SIZE_GROUP_NONE")]
11736    None,
11737    /// group affects horizontal requisition
11738    #[doc(alias = "GTK_SIZE_GROUP_HORIZONTAL")]
11739    Horizontal,
11740    /// group affects vertical requisition
11741    #[doc(alias = "GTK_SIZE_GROUP_VERTICAL")]
11742    Vertical,
11743    /// group affects both horizontal and vertical requisition
11744    #[doc(alias = "GTK_SIZE_GROUP_BOTH")]
11745    Both,
11746    #[doc(hidden)]
11747    __Unknown(i32),
11748}
11749
11750#[doc(hidden)]
11751impl IntoGlib for SizeGroupMode {
11752    type GlibType = ffi::GtkSizeGroupMode;
11753
11754    #[inline]
11755    fn into_glib(self) -> ffi::GtkSizeGroupMode {
11756        match self {
11757            Self::None => ffi::GTK_SIZE_GROUP_NONE,
11758            Self::Horizontal => ffi::GTK_SIZE_GROUP_HORIZONTAL,
11759            Self::Vertical => ffi::GTK_SIZE_GROUP_VERTICAL,
11760            Self::Both => ffi::GTK_SIZE_GROUP_BOTH,
11761            Self::__Unknown(value) => value,
11762        }
11763    }
11764}
11765
11766#[doc(hidden)]
11767impl FromGlib<ffi::GtkSizeGroupMode> for SizeGroupMode {
11768    #[inline]
11769    unsafe fn from_glib(value: ffi::GtkSizeGroupMode) -> Self {
11770        skip_assert_initialized!();
11771
11772        match value {
11773            ffi::GTK_SIZE_GROUP_NONE => Self::None,
11774            ffi::GTK_SIZE_GROUP_HORIZONTAL => Self::Horizontal,
11775            ffi::GTK_SIZE_GROUP_VERTICAL => Self::Vertical,
11776            ffi::GTK_SIZE_GROUP_BOTH => Self::Both,
11777            value => Self::__Unknown(value),
11778        }
11779    }
11780}
11781
11782impl StaticType for SizeGroupMode {
11783    #[inline]
11784    #[doc(alias = "gtk_size_group_mode_get_type")]
11785    fn static_type() -> glib::Type {
11786        unsafe { from_glib(ffi::gtk_size_group_mode_get_type()) }
11787    }
11788}
11789
11790impl glib::HasParamSpec for SizeGroupMode {
11791    type ParamSpec = glib::ParamSpecEnum;
11792    type SetValue = Self;
11793    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11794
11795    fn param_spec_builder() -> Self::BuilderFn {
11796        Self::ParamSpec::builder_with_default
11797    }
11798}
11799
11800impl glib::value::ValueType for SizeGroupMode {
11801    type Type = Self;
11802}
11803
11804unsafe impl<'a> glib::value::FromValue<'a> for SizeGroupMode {
11805    type Checker = glib::value::GenericValueTypeChecker<Self>;
11806
11807    #[inline]
11808    unsafe fn from_value(value: &'a glib::Value) -> Self {
11809        skip_assert_initialized!();
11810        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11811    }
11812}
11813
11814impl ToValue for SizeGroupMode {
11815    #[inline]
11816    fn to_value(&self) -> glib::Value {
11817        let mut value = glib::Value::for_value_type::<Self>();
11818        unsafe {
11819            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11820        }
11821        value
11822    }
11823
11824    #[inline]
11825    fn value_type(&self) -> glib::Type {
11826        Self::static_type()
11827    }
11828}
11829
11830impl From<SizeGroupMode> for glib::Value {
11831    #[inline]
11832    fn from(v: SizeGroupMode) -> Self {
11833        skip_assert_initialized!();
11834        ToValue::to_value(&v)
11835    }
11836}
11837
11838/// Specifies a preference for height-for-width or
11839/// width-for-height geometry management.
11840#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11841#[non_exhaustive]
11842#[doc(alias = "GtkSizeRequestMode")]
11843pub enum SizeRequestMode {
11844    /// Prefer height-for-width geometry management
11845    #[doc(alias = "GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH")]
11846    HeightForWidth,
11847    /// Prefer width-for-height geometry management
11848    #[doc(alias = "GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT")]
11849    WidthForHeight,
11850    /// Don’t trade height-for-width or width-for-height
11851    #[doc(alias = "GTK_SIZE_REQUEST_CONSTANT_SIZE")]
11852    ConstantSize,
11853    #[doc(hidden)]
11854    __Unknown(i32),
11855}
11856
11857#[doc(hidden)]
11858impl IntoGlib for SizeRequestMode {
11859    type GlibType = ffi::GtkSizeRequestMode;
11860
11861    #[inline]
11862    fn into_glib(self) -> ffi::GtkSizeRequestMode {
11863        match self {
11864            Self::HeightForWidth => ffi::GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH,
11865            Self::WidthForHeight => ffi::GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT,
11866            Self::ConstantSize => ffi::GTK_SIZE_REQUEST_CONSTANT_SIZE,
11867            Self::__Unknown(value) => value,
11868        }
11869    }
11870}
11871
11872#[doc(hidden)]
11873impl FromGlib<ffi::GtkSizeRequestMode> for SizeRequestMode {
11874    #[inline]
11875    unsafe fn from_glib(value: ffi::GtkSizeRequestMode) -> Self {
11876        skip_assert_initialized!();
11877
11878        match value {
11879            ffi::GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH => Self::HeightForWidth,
11880            ffi::GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT => Self::WidthForHeight,
11881            ffi::GTK_SIZE_REQUEST_CONSTANT_SIZE => Self::ConstantSize,
11882            value => Self::__Unknown(value),
11883        }
11884    }
11885}
11886
11887impl StaticType for SizeRequestMode {
11888    #[inline]
11889    #[doc(alias = "gtk_size_request_mode_get_type")]
11890    fn static_type() -> glib::Type {
11891        unsafe { from_glib(ffi::gtk_size_request_mode_get_type()) }
11892    }
11893}
11894
11895impl glib::HasParamSpec for SizeRequestMode {
11896    type ParamSpec = glib::ParamSpecEnum;
11897    type SetValue = Self;
11898    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11899
11900    fn param_spec_builder() -> Self::BuilderFn {
11901        Self::ParamSpec::builder_with_default
11902    }
11903}
11904
11905impl glib::value::ValueType for SizeRequestMode {
11906    type Type = Self;
11907}
11908
11909unsafe impl<'a> glib::value::FromValue<'a> for SizeRequestMode {
11910    type Checker = glib::value::GenericValueTypeChecker<Self>;
11911
11912    #[inline]
11913    unsafe fn from_value(value: &'a glib::Value) -> Self {
11914        skip_assert_initialized!();
11915        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
11916    }
11917}
11918
11919impl ToValue for SizeRequestMode {
11920    #[inline]
11921    fn to_value(&self) -> glib::Value {
11922        let mut value = glib::Value::for_value_type::<Self>();
11923        unsafe {
11924            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
11925        }
11926        value
11927    }
11928
11929    #[inline]
11930    fn value_type(&self) -> glib::Type {
11931        Self::static_type()
11932    }
11933}
11934
11935impl From<SizeRequestMode> for glib::Value {
11936    #[inline]
11937    fn from(v: SizeRequestMode) -> Self {
11938        skip_assert_initialized!();
11939        ToValue::to_value(&v)
11940    }
11941}
11942
11943/// Determines the direction of a sort.
11944#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
11945#[non_exhaustive]
11946#[doc(alias = "GtkSortType")]
11947pub enum SortType {
11948    /// Sorting is in ascending order.
11949    #[doc(alias = "GTK_SORT_ASCENDING")]
11950    Ascending,
11951    /// Sorting is in descending order.
11952    #[doc(alias = "GTK_SORT_DESCENDING")]
11953    Descending,
11954    #[doc(hidden)]
11955    __Unknown(i32),
11956}
11957
11958#[doc(hidden)]
11959impl IntoGlib for SortType {
11960    type GlibType = ffi::GtkSortType;
11961
11962    #[inline]
11963    fn into_glib(self) -> ffi::GtkSortType {
11964        match self {
11965            Self::Ascending => ffi::GTK_SORT_ASCENDING,
11966            Self::Descending => ffi::GTK_SORT_DESCENDING,
11967            Self::__Unknown(value) => value,
11968        }
11969    }
11970}
11971
11972#[doc(hidden)]
11973impl FromGlib<ffi::GtkSortType> for SortType {
11974    #[inline]
11975    unsafe fn from_glib(value: ffi::GtkSortType) -> Self {
11976        skip_assert_initialized!();
11977
11978        match value {
11979            ffi::GTK_SORT_ASCENDING => Self::Ascending,
11980            ffi::GTK_SORT_DESCENDING => Self::Descending,
11981            value => Self::__Unknown(value),
11982        }
11983    }
11984}
11985
11986impl StaticType for SortType {
11987    #[inline]
11988    #[doc(alias = "gtk_sort_type_get_type")]
11989    fn static_type() -> glib::Type {
11990        unsafe { from_glib(ffi::gtk_sort_type_get_type()) }
11991    }
11992}
11993
11994impl glib::HasParamSpec for SortType {
11995    type ParamSpec = glib::ParamSpecEnum;
11996    type SetValue = Self;
11997    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
11998
11999    fn param_spec_builder() -> Self::BuilderFn {
12000        Self::ParamSpec::builder_with_default
12001    }
12002}
12003
12004impl glib::value::ValueType for SortType {
12005    type Type = Self;
12006}
12007
12008unsafe impl<'a> glib::value::FromValue<'a> for SortType {
12009    type Checker = glib::value::GenericValueTypeChecker<Self>;
12010
12011    #[inline]
12012    unsafe fn from_value(value: &'a glib::Value) -> Self {
12013        skip_assert_initialized!();
12014        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12015    }
12016}
12017
12018impl ToValue for SortType {
12019    #[inline]
12020    fn to_value(&self) -> glib::Value {
12021        let mut value = glib::Value::for_value_type::<Self>();
12022        unsafe {
12023            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12024        }
12025        value
12026    }
12027
12028    #[inline]
12029    fn value_type(&self) -> glib::Type {
12030        Self::static_type()
12031    }
12032}
12033
12034impl From<SortType> for glib::Value {
12035    #[inline]
12036    fn from(v: SortType) -> Self {
12037        skip_assert_initialized!();
12038        ToValue::to_value(&v)
12039    }
12040}
12041
12042/// Describes changes in a sorter in more detail and allows users
12043/// to optimize resorting.
12044#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12045#[non_exhaustive]
12046#[doc(alias = "GtkSorterChange")]
12047pub enum SorterChange {
12048    /// The sorter change cannot be described
12049    ///   by any of the other enumeration values
12050    #[doc(alias = "GTK_SORTER_CHANGE_DIFFERENT")]
12051    Different,
12052    /// The sort order was inverted. Comparisons
12053    ///   that returned [`Ordering::Smaller`][crate::Ordering::Smaller] now return [`Ordering::Larger`][crate::Ordering::Larger]
12054    ///   and vice versa. Other comparisons return the same values as before.
12055    #[doc(alias = "GTK_SORTER_CHANGE_INVERTED")]
12056    Inverted,
12057    /// The sorter is less strict: Comparisons
12058    ///   may now return [`Ordering::Equal`][crate::Ordering::Equal] that did not do so before.
12059    #[doc(alias = "GTK_SORTER_CHANGE_LESS_STRICT")]
12060    LessStrict,
12061    /// The sorter is more strict: Comparisons
12062    ///   that did return [`Ordering::Equal`][crate::Ordering::Equal] may not do so anymore.
12063    #[doc(alias = "GTK_SORTER_CHANGE_MORE_STRICT")]
12064    MoreStrict,
12065    #[doc(hidden)]
12066    __Unknown(i32),
12067}
12068
12069#[doc(hidden)]
12070impl IntoGlib for SorterChange {
12071    type GlibType = ffi::GtkSorterChange;
12072
12073    #[inline]
12074    fn into_glib(self) -> ffi::GtkSorterChange {
12075        match self {
12076            Self::Different => ffi::GTK_SORTER_CHANGE_DIFFERENT,
12077            Self::Inverted => ffi::GTK_SORTER_CHANGE_INVERTED,
12078            Self::LessStrict => ffi::GTK_SORTER_CHANGE_LESS_STRICT,
12079            Self::MoreStrict => ffi::GTK_SORTER_CHANGE_MORE_STRICT,
12080            Self::__Unknown(value) => value,
12081        }
12082    }
12083}
12084
12085#[doc(hidden)]
12086impl FromGlib<ffi::GtkSorterChange> for SorterChange {
12087    #[inline]
12088    unsafe fn from_glib(value: ffi::GtkSorterChange) -> Self {
12089        skip_assert_initialized!();
12090
12091        match value {
12092            ffi::GTK_SORTER_CHANGE_DIFFERENT => Self::Different,
12093            ffi::GTK_SORTER_CHANGE_INVERTED => Self::Inverted,
12094            ffi::GTK_SORTER_CHANGE_LESS_STRICT => Self::LessStrict,
12095            ffi::GTK_SORTER_CHANGE_MORE_STRICT => Self::MoreStrict,
12096            value => Self::__Unknown(value),
12097        }
12098    }
12099}
12100
12101impl StaticType for SorterChange {
12102    #[inline]
12103    #[doc(alias = "gtk_sorter_change_get_type")]
12104    fn static_type() -> glib::Type {
12105        unsafe { from_glib(ffi::gtk_sorter_change_get_type()) }
12106    }
12107}
12108
12109impl glib::HasParamSpec for SorterChange {
12110    type ParamSpec = glib::ParamSpecEnum;
12111    type SetValue = Self;
12112    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12113
12114    fn param_spec_builder() -> Self::BuilderFn {
12115        Self::ParamSpec::builder_with_default
12116    }
12117}
12118
12119impl glib::value::ValueType for SorterChange {
12120    type Type = Self;
12121}
12122
12123unsafe impl<'a> glib::value::FromValue<'a> for SorterChange {
12124    type Checker = glib::value::GenericValueTypeChecker<Self>;
12125
12126    #[inline]
12127    unsafe fn from_value(value: &'a glib::Value) -> Self {
12128        skip_assert_initialized!();
12129        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12130    }
12131}
12132
12133impl ToValue for SorterChange {
12134    #[inline]
12135    fn to_value(&self) -> glib::Value {
12136        let mut value = glib::Value::for_value_type::<Self>();
12137        unsafe {
12138            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12139        }
12140        value
12141    }
12142
12143    #[inline]
12144    fn value_type(&self) -> glib::Type {
12145        Self::static_type()
12146    }
12147}
12148
12149impl From<SorterChange> for glib::Value {
12150    #[inline]
12151    fn from(v: SorterChange) -> Self {
12152        skip_assert_initialized!();
12153        ToValue::to_value(&v)
12154    }
12155}
12156
12157/// Describes the type of order that a [`Sorter`][crate::Sorter] may produce.
12158#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12159#[non_exhaustive]
12160#[doc(alias = "GtkSorterOrder")]
12161pub enum SorterOrder {
12162    /// A partial order. Any [`Ordering`][crate::Ordering] is possible.
12163    #[doc(alias = "GTK_SORTER_ORDER_PARTIAL")]
12164    Partial,
12165    /// No order, all elements are considered equal.
12166    ///   gtk_sorter_compare() will only return [`Ordering::Equal`][crate::Ordering::Equal].
12167    #[doc(alias = "GTK_SORTER_ORDER_NONE")]
12168    None,
12169    /// A total order. gtk_sorter_compare() will only
12170    ///   return [`Ordering::Equal`][crate::Ordering::Equal] if an item is compared with itself. Two
12171    ///   different items will never cause this value to be returned.
12172    #[doc(alias = "GTK_SORTER_ORDER_TOTAL")]
12173    Total,
12174    #[doc(hidden)]
12175    __Unknown(i32),
12176}
12177
12178#[doc(hidden)]
12179impl IntoGlib for SorterOrder {
12180    type GlibType = ffi::GtkSorterOrder;
12181
12182    #[inline]
12183    fn into_glib(self) -> ffi::GtkSorterOrder {
12184        match self {
12185            Self::Partial => ffi::GTK_SORTER_ORDER_PARTIAL,
12186            Self::None => ffi::GTK_SORTER_ORDER_NONE,
12187            Self::Total => ffi::GTK_SORTER_ORDER_TOTAL,
12188            Self::__Unknown(value) => value,
12189        }
12190    }
12191}
12192
12193#[doc(hidden)]
12194impl FromGlib<ffi::GtkSorterOrder> for SorterOrder {
12195    #[inline]
12196    unsafe fn from_glib(value: ffi::GtkSorterOrder) -> Self {
12197        skip_assert_initialized!();
12198
12199        match value {
12200            ffi::GTK_SORTER_ORDER_PARTIAL => Self::Partial,
12201            ffi::GTK_SORTER_ORDER_NONE => Self::None,
12202            ffi::GTK_SORTER_ORDER_TOTAL => Self::Total,
12203            value => Self::__Unknown(value),
12204        }
12205    }
12206}
12207
12208impl StaticType for SorterOrder {
12209    #[inline]
12210    #[doc(alias = "gtk_sorter_order_get_type")]
12211    fn static_type() -> glib::Type {
12212        unsafe { from_glib(ffi::gtk_sorter_order_get_type()) }
12213    }
12214}
12215
12216impl glib::HasParamSpec for SorterOrder {
12217    type ParamSpec = glib::ParamSpecEnum;
12218    type SetValue = Self;
12219    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12220
12221    fn param_spec_builder() -> Self::BuilderFn {
12222        Self::ParamSpec::builder_with_default
12223    }
12224}
12225
12226impl glib::value::ValueType for SorterOrder {
12227    type Type = Self;
12228}
12229
12230unsafe impl<'a> glib::value::FromValue<'a> for SorterOrder {
12231    type Checker = glib::value::GenericValueTypeChecker<Self>;
12232
12233    #[inline]
12234    unsafe fn from_value(value: &'a glib::Value) -> Self {
12235        skip_assert_initialized!();
12236        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12237    }
12238}
12239
12240impl ToValue for SorterOrder {
12241    #[inline]
12242    fn to_value(&self) -> glib::Value {
12243        let mut value = glib::Value::for_value_type::<Self>();
12244        unsafe {
12245            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12246        }
12247        value
12248    }
12249
12250    #[inline]
12251    fn value_type(&self) -> glib::Type {
12252        Self::static_type()
12253    }
12254}
12255
12256impl From<SorterOrder> for glib::Value {
12257    #[inline]
12258    fn from(v: SorterOrder) -> Self {
12259        skip_assert_initialized!();
12260        ToValue::to_value(&v)
12261    }
12262}
12263
12264/// Determines whether the spin button displays values outside the adjustment
12265/// bounds.
12266///
12267/// See [`SpinButton::set_update_policy()`][crate::SpinButton::set_update_policy()].
12268#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12269#[non_exhaustive]
12270#[doc(alias = "GtkSpinButtonUpdatePolicy")]
12271pub enum SpinButtonUpdatePolicy {
12272    /// When refreshing your [`SpinButton`][crate::SpinButton], the value is
12273    ///   always displayed
12274    #[doc(alias = "GTK_UPDATE_ALWAYS")]
12275    Always,
12276    /// When refreshing your [`SpinButton`][crate::SpinButton], the value is
12277    ///   only displayed if it is valid within the bounds of the spin button's
12278    ///   adjustment
12279    #[doc(alias = "GTK_UPDATE_IF_VALID")]
12280    IfValid,
12281    #[doc(hidden)]
12282    __Unknown(i32),
12283}
12284
12285#[doc(hidden)]
12286impl IntoGlib for SpinButtonUpdatePolicy {
12287    type GlibType = ffi::GtkSpinButtonUpdatePolicy;
12288
12289    #[inline]
12290    fn into_glib(self) -> ffi::GtkSpinButtonUpdatePolicy {
12291        match self {
12292            Self::Always => ffi::GTK_UPDATE_ALWAYS,
12293            Self::IfValid => ffi::GTK_UPDATE_IF_VALID,
12294            Self::__Unknown(value) => value,
12295        }
12296    }
12297}
12298
12299#[doc(hidden)]
12300impl FromGlib<ffi::GtkSpinButtonUpdatePolicy> for SpinButtonUpdatePolicy {
12301    #[inline]
12302    unsafe fn from_glib(value: ffi::GtkSpinButtonUpdatePolicy) -> Self {
12303        skip_assert_initialized!();
12304
12305        match value {
12306            ffi::GTK_UPDATE_ALWAYS => Self::Always,
12307            ffi::GTK_UPDATE_IF_VALID => Self::IfValid,
12308            value => Self::__Unknown(value),
12309        }
12310    }
12311}
12312
12313impl StaticType for SpinButtonUpdatePolicy {
12314    #[inline]
12315    #[doc(alias = "gtk_spin_button_update_policy_get_type")]
12316    fn static_type() -> glib::Type {
12317        unsafe { from_glib(ffi::gtk_spin_button_update_policy_get_type()) }
12318    }
12319}
12320
12321impl glib::HasParamSpec for SpinButtonUpdatePolicy {
12322    type ParamSpec = glib::ParamSpecEnum;
12323    type SetValue = Self;
12324    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12325
12326    fn param_spec_builder() -> Self::BuilderFn {
12327        Self::ParamSpec::builder_with_default
12328    }
12329}
12330
12331impl glib::value::ValueType for SpinButtonUpdatePolicy {
12332    type Type = Self;
12333}
12334
12335unsafe impl<'a> glib::value::FromValue<'a> for SpinButtonUpdatePolicy {
12336    type Checker = glib::value::GenericValueTypeChecker<Self>;
12337
12338    #[inline]
12339    unsafe fn from_value(value: &'a glib::Value) -> Self {
12340        skip_assert_initialized!();
12341        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12342    }
12343}
12344
12345impl ToValue for SpinButtonUpdatePolicy {
12346    #[inline]
12347    fn to_value(&self) -> glib::Value {
12348        let mut value = glib::Value::for_value_type::<Self>();
12349        unsafe {
12350            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12351        }
12352        value
12353    }
12354
12355    #[inline]
12356    fn value_type(&self) -> glib::Type {
12357        Self::static_type()
12358    }
12359}
12360
12361impl From<SpinButtonUpdatePolicy> for glib::Value {
12362    #[inline]
12363    fn from(v: SpinButtonUpdatePolicy) -> Self {
12364        skip_assert_initialized!();
12365        ToValue::to_value(&v)
12366    }
12367}
12368
12369/// The values of the GtkSpinType enumeration are used to specify the
12370/// change to make in gtk_spin_button_spin().
12371#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12372#[non_exhaustive]
12373#[doc(alias = "GtkSpinType")]
12374pub enum SpinType {
12375    /// Increment by the adjustments step increment.
12376    #[doc(alias = "GTK_SPIN_STEP_FORWARD")]
12377    StepForward,
12378    /// Decrement by the adjustments step increment.
12379    #[doc(alias = "GTK_SPIN_STEP_BACKWARD")]
12380    StepBackward,
12381    /// Increment by the adjustments page increment.
12382    #[doc(alias = "GTK_SPIN_PAGE_FORWARD")]
12383    PageForward,
12384    /// Decrement by the adjustments page increment.
12385    #[doc(alias = "GTK_SPIN_PAGE_BACKWARD")]
12386    PageBackward,
12387    /// Go to the adjustments lower bound.
12388    #[doc(alias = "GTK_SPIN_HOME")]
12389    Home,
12390    /// Go to the adjustments upper bound.
12391    #[doc(alias = "GTK_SPIN_END")]
12392    End,
12393    /// Change by a specified amount.
12394    #[doc(alias = "GTK_SPIN_USER_DEFINED")]
12395    UserDefined,
12396    #[doc(hidden)]
12397    __Unknown(i32),
12398}
12399
12400#[doc(hidden)]
12401impl IntoGlib for SpinType {
12402    type GlibType = ffi::GtkSpinType;
12403
12404    #[inline]
12405    fn into_glib(self) -> ffi::GtkSpinType {
12406        match self {
12407            Self::StepForward => ffi::GTK_SPIN_STEP_FORWARD,
12408            Self::StepBackward => ffi::GTK_SPIN_STEP_BACKWARD,
12409            Self::PageForward => ffi::GTK_SPIN_PAGE_FORWARD,
12410            Self::PageBackward => ffi::GTK_SPIN_PAGE_BACKWARD,
12411            Self::Home => ffi::GTK_SPIN_HOME,
12412            Self::End => ffi::GTK_SPIN_END,
12413            Self::UserDefined => ffi::GTK_SPIN_USER_DEFINED,
12414            Self::__Unknown(value) => value,
12415        }
12416    }
12417}
12418
12419#[doc(hidden)]
12420impl FromGlib<ffi::GtkSpinType> for SpinType {
12421    #[inline]
12422    unsafe fn from_glib(value: ffi::GtkSpinType) -> Self {
12423        skip_assert_initialized!();
12424
12425        match value {
12426            ffi::GTK_SPIN_STEP_FORWARD => Self::StepForward,
12427            ffi::GTK_SPIN_STEP_BACKWARD => Self::StepBackward,
12428            ffi::GTK_SPIN_PAGE_FORWARD => Self::PageForward,
12429            ffi::GTK_SPIN_PAGE_BACKWARD => Self::PageBackward,
12430            ffi::GTK_SPIN_HOME => Self::Home,
12431            ffi::GTK_SPIN_END => Self::End,
12432            ffi::GTK_SPIN_USER_DEFINED => Self::UserDefined,
12433            value => Self::__Unknown(value),
12434        }
12435    }
12436}
12437
12438impl StaticType for SpinType {
12439    #[inline]
12440    #[doc(alias = "gtk_spin_type_get_type")]
12441    fn static_type() -> glib::Type {
12442        unsafe { from_glib(ffi::gtk_spin_type_get_type()) }
12443    }
12444}
12445
12446impl glib::HasParamSpec for SpinType {
12447    type ParamSpec = glib::ParamSpecEnum;
12448    type SetValue = Self;
12449    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12450
12451    fn param_spec_builder() -> Self::BuilderFn {
12452        Self::ParamSpec::builder_with_default
12453    }
12454}
12455
12456impl glib::value::ValueType for SpinType {
12457    type Type = Self;
12458}
12459
12460unsafe impl<'a> glib::value::FromValue<'a> for SpinType {
12461    type Checker = glib::value::GenericValueTypeChecker<Self>;
12462
12463    #[inline]
12464    unsafe fn from_value(value: &'a glib::Value) -> Self {
12465        skip_assert_initialized!();
12466        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12467    }
12468}
12469
12470impl ToValue for SpinType {
12471    #[inline]
12472    fn to_value(&self) -> glib::Value {
12473        let mut value = glib::Value::for_value_type::<Self>();
12474        unsafe {
12475            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12476        }
12477        value
12478    }
12479
12480    #[inline]
12481    fn value_type(&self) -> glib::Type {
12482        Self::static_type()
12483    }
12484}
12485
12486impl From<SpinType> for glib::Value {
12487    #[inline]
12488    fn from(v: SpinType) -> Self {
12489        skip_assert_initialized!();
12490        ToValue::to_value(&v)
12491    }
12492}
12493
12494/// Possible transitions between pages in a [`Stack`][crate::Stack] widget.
12495///
12496/// New values may be added to this enumeration over time.
12497#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12498#[non_exhaustive]
12499#[doc(alias = "GtkStackTransitionType")]
12500pub enum StackTransitionType {
12501    /// No transition
12502    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_NONE")]
12503    None,
12504    /// A cross-fade
12505    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_CROSSFADE")]
12506    Crossfade,
12507    /// Slide from left to right
12508    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT")]
12509    SlideRight,
12510    /// Slide from right to left
12511    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT")]
12512    SlideLeft,
12513    /// Slide from bottom up
12514    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_UP")]
12515    SlideUp,
12516    /// Slide from top down
12517    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN")]
12518    SlideDown,
12519    /// Slide from left or right according to the children order
12520    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT")]
12521    SlideLeftRight,
12522    /// Slide from top down or bottom up according to the order
12523    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN")]
12524    SlideUpDown,
12525    /// Cover the old page by sliding up
12526    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_UP")]
12527    OverUp,
12528    /// Cover the old page by sliding down
12529    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_DOWN")]
12530    OverDown,
12531    /// Cover the old page by sliding to the left
12532    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_LEFT")]
12533    OverLeft,
12534    /// Cover the old page by sliding to the right
12535    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_RIGHT")]
12536    OverRight,
12537    /// Uncover the new page by sliding up
12538    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_UP")]
12539    UnderUp,
12540    /// Uncover the new page by sliding down
12541    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_DOWN")]
12542    UnderDown,
12543    /// Uncover the new page by sliding to the left
12544    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_LEFT")]
12545    UnderLeft,
12546    /// Uncover the new page by sliding to the right
12547    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_UNDER_RIGHT")]
12548    UnderRight,
12549    /// Cover the old page sliding up or uncover the new page sliding down, according to order
12550    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_UP_DOWN")]
12551    OverUpDown,
12552    /// Cover the old page sliding down or uncover the new page sliding up, according to order
12553    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_DOWN_UP")]
12554    OverDownUp,
12555    /// Cover the old page sliding left or uncover the new page sliding right, according to order
12556    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_LEFT_RIGHT")]
12557    OverLeftRight,
12558    /// Cover the old page sliding right or uncover the new page sliding left, according to order
12559    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_OVER_RIGHT_LEFT")]
12560    OverRightLeft,
12561    /// Pretend the pages are sides of a cube and rotate that cube to the left
12562    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT")]
12563    RotateLeft,
12564    /// Pretend the pages are sides of a cube and rotate that cube to the right
12565    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT")]
12566    RotateRight,
12567    /// Pretend the pages are sides of a cube and rotate that cube to the left or right according to the children order
12568    #[doc(alias = "GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT_RIGHT")]
12569    RotateLeftRight,
12570    #[doc(hidden)]
12571    __Unknown(i32),
12572}
12573
12574#[doc(hidden)]
12575impl IntoGlib for StackTransitionType {
12576    type GlibType = ffi::GtkStackTransitionType;
12577
12578    fn into_glib(self) -> ffi::GtkStackTransitionType {
12579        match self {
12580            Self::None => ffi::GTK_STACK_TRANSITION_TYPE_NONE,
12581            Self::Crossfade => ffi::GTK_STACK_TRANSITION_TYPE_CROSSFADE,
12582            Self::SlideRight => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT,
12583            Self::SlideLeft => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT,
12584            Self::SlideUp => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP,
12585            Self::SlideDown => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN,
12586            Self::SlideLeftRight => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT,
12587            Self::SlideUpDown => ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN,
12588            Self::OverUp => ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP,
12589            Self::OverDown => ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN,
12590            Self::OverLeft => ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT,
12591            Self::OverRight => ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT,
12592            Self::UnderUp => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_UP,
12593            Self::UnderDown => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_DOWN,
12594            Self::UnderLeft => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_LEFT,
12595            Self::UnderRight => ffi::GTK_STACK_TRANSITION_TYPE_UNDER_RIGHT,
12596            Self::OverUpDown => ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP_DOWN,
12597            Self::OverDownUp => ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN_UP,
12598            Self::OverLeftRight => ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT_RIGHT,
12599            Self::OverRightLeft => ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT_LEFT,
12600            Self::RotateLeft => ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT,
12601            Self::RotateRight => ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT,
12602            Self::RotateLeftRight => ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT_RIGHT,
12603            Self::__Unknown(value) => value,
12604        }
12605    }
12606}
12607
12608#[doc(hidden)]
12609impl FromGlib<ffi::GtkStackTransitionType> for StackTransitionType {
12610    unsafe fn from_glib(value: ffi::GtkStackTransitionType) -> Self {
12611        skip_assert_initialized!();
12612
12613        match value {
12614            ffi::GTK_STACK_TRANSITION_TYPE_NONE => Self::None,
12615            ffi::GTK_STACK_TRANSITION_TYPE_CROSSFADE => Self::Crossfade,
12616            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT => Self::SlideRight,
12617            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT => Self::SlideLeft,
12618            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP => Self::SlideUp,
12619            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN => Self::SlideDown,
12620            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT => Self::SlideLeftRight,
12621            ffi::GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN => Self::SlideUpDown,
12622            ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP => Self::OverUp,
12623            ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN => Self::OverDown,
12624            ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT => Self::OverLeft,
12625            ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT => Self::OverRight,
12626            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_UP => Self::UnderUp,
12627            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_DOWN => Self::UnderDown,
12628            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_LEFT => Self::UnderLeft,
12629            ffi::GTK_STACK_TRANSITION_TYPE_UNDER_RIGHT => Self::UnderRight,
12630            ffi::GTK_STACK_TRANSITION_TYPE_OVER_UP_DOWN => Self::OverUpDown,
12631            ffi::GTK_STACK_TRANSITION_TYPE_OVER_DOWN_UP => Self::OverDownUp,
12632            ffi::GTK_STACK_TRANSITION_TYPE_OVER_LEFT_RIGHT => Self::OverLeftRight,
12633            ffi::GTK_STACK_TRANSITION_TYPE_OVER_RIGHT_LEFT => Self::OverRightLeft,
12634            ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT => Self::RotateLeft,
12635            ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_RIGHT => Self::RotateRight,
12636            ffi::GTK_STACK_TRANSITION_TYPE_ROTATE_LEFT_RIGHT => Self::RotateLeftRight,
12637            value => Self::__Unknown(value),
12638        }
12639    }
12640}
12641
12642impl StaticType for StackTransitionType {
12643    #[inline]
12644    #[doc(alias = "gtk_stack_transition_type_get_type")]
12645    fn static_type() -> glib::Type {
12646        unsafe { from_glib(ffi::gtk_stack_transition_type_get_type()) }
12647    }
12648}
12649
12650impl glib::HasParamSpec for StackTransitionType {
12651    type ParamSpec = glib::ParamSpecEnum;
12652    type SetValue = Self;
12653    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12654
12655    fn param_spec_builder() -> Self::BuilderFn {
12656        Self::ParamSpec::builder_with_default
12657    }
12658}
12659
12660impl glib::value::ValueType for StackTransitionType {
12661    type Type = Self;
12662}
12663
12664unsafe impl<'a> glib::value::FromValue<'a> for StackTransitionType {
12665    type Checker = glib::value::GenericValueTypeChecker<Self>;
12666
12667    #[inline]
12668    unsafe fn from_value(value: &'a glib::Value) -> Self {
12669        skip_assert_initialized!();
12670        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12671    }
12672}
12673
12674impl ToValue for StackTransitionType {
12675    #[inline]
12676    fn to_value(&self) -> glib::Value {
12677        let mut value = glib::Value::for_value_type::<Self>();
12678        unsafe {
12679            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12680        }
12681        value
12682    }
12683
12684    #[inline]
12685    fn value_type(&self) -> glib::Type {
12686        Self::static_type()
12687    }
12688}
12689
12690impl From<StackTransitionType> for glib::Value {
12691    #[inline]
12692    fn from(v: StackTransitionType) -> Self {
12693        skip_assert_initialized!();
12694        ToValue::to_value(&v)
12695    }
12696}
12697
12698/// Specifies how search strings are matched inside text.
12699#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12700#[non_exhaustive]
12701#[doc(alias = "GtkStringFilterMatchMode")]
12702pub enum StringFilterMatchMode {
12703    /// The search string and
12704    ///   text must match exactly
12705    #[doc(alias = "GTK_STRING_FILTER_MATCH_MODE_EXACT")]
12706    Exact,
12707    /// The search string
12708    ///   must be contained as a substring inside the text
12709    #[doc(alias = "GTK_STRING_FILTER_MATCH_MODE_SUBSTRING")]
12710    Substring,
12711    /// The text must begin
12712    ///   with the search string
12713    #[doc(alias = "GTK_STRING_FILTER_MATCH_MODE_PREFIX")]
12714    Prefix,
12715    #[doc(hidden)]
12716    __Unknown(i32),
12717}
12718
12719#[doc(hidden)]
12720impl IntoGlib for StringFilterMatchMode {
12721    type GlibType = ffi::GtkStringFilterMatchMode;
12722
12723    #[inline]
12724    fn into_glib(self) -> ffi::GtkStringFilterMatchMode {
12725        match self {
12726            Self::Exact => ffi::GTK_STRING_FILTER_MATCH_MODE_EXACT,
12727            Self::Substring => ffi::GTK_STRING_FILTER_MATCH_MODE_SUBSTRING,
12728            Self::Prefix => ffi::GTK_STRING_FILTER_MATCH_MODE_PREFIX,
12729            Self::__Unknown(value) => value,
12730        }
12731    }
12732}
12733
12734#[doc(hidden)]
12735impl FromGlib<ffi::GtkStringFilterMatchMode> for StringFilterMatchMode {
12736    #[inline]
12737    unsafe fn from_glib(value: ffi::GtkStringFilterMatchMode) -> Self {
12738        skip_assert_initialized!();
12739
12740        match value {
12741            ffi::GTK_STRING_FILTER_MATCH_MODE_EXACT => Self::Exact,
12742            ffi::GTK_STRING_FILTER_MATCH_MODE_SUBSTRING => Self::Substring,
12743            ffi::GTK_STRING_FILTER_MATCH_MODE_PREFIX => Self::Prefix,
12744            value => Self::__Unknown(value),
12745        }
12746    }
12747}
12748
12749impl StaticType for StringFilterMatchMode {
12750    #[inline]
12751    #[doc(alias = "gtk_string_filter_match_mode_get_type")]
12752    fn static_type() -> glib::Type {
12753        unsafe { from_glib(ffi::gtk_string_filter_match_mode_get_type()) }
12754    }
12755}
12756
12757impl glib::HasParamSpec for StringFilterMatchMode {
12758    type ParamSpec = glib::ParamSpecEnum;
12759    type SetValue = Self;
12760    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
12761
12762    fn param_spec_builder() -> Self::BuilderFn {
12763        Self::ParamSpec::builder_with_default
12764    }
12765}
12766
12767impl glib::value::ValueType for StringFilterMatchMode {
12768    type Type = Self;
12769}
12770
12771unsafe impl<'a> glib::value::FromValue<'a> for StringFilterMatchMode {
12772    type Checker = glib::value::GenericValueTypeChecker<Self>;
12773
12774    #[inline]
12775    unsafe fn from_value(value: &'a glib::Value) -> Self {
12776        skip_assert_initialized!();
12777        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
12778    }
12779}
12780
12781impl ToValue for StringFilterMatchMode {
12782    #[inline]
12783    fn to_value(&self) -> glib::Value {
12784        let mut value = glib::Value::for_value_type::<Self>();
12785        unsafe {
12786            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
12787        }
12788        value
12789    }
12790
12791    #[inline]
12792    fn value_type(&self) -> glib::Type {
12793        Self::static_type()
12794    }
12795}
12796
12797impl From<StringFilterMatchMode> for glib::Value {
12798    #[inline]
12799    fn from(v: StringFilterMatchMode) -> Self {
12800        skip_assert_initialized!();
12801        ToValue::to_value(&v)
12802    }
12803}
12804
12805/// Error codes in the `GTK_SVG_ERROR` domain for errors
12806/// that happen during parsing or rendering of SVG.
12807#[cfg(feature = "v4_22")]
12808#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12809#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
12810#[non_exhaustive]
12811#[doc(alias = "GtkSvgError")]
12812pub enum SvgError {
12813    /// The XML syntax is broken
12814    ///   in some way
12815    #[doc(alias = "GTK_SVG_ERROR_INVALID_SYNTAX")]
12816    InvalidSyntax,
12817    /// An XML element is invalid
12818    ///   (either because it is not part of SVG, or because it is
12819    ///   in the wrong place, or because it not implemented in GTK)
12820    #[doc(alias = "GTK_SVG_ERROR_INVALID_ELEMENT")]
12821    InvalidElement,
12822    /// An attribute is invalid
12823    ///   (either because it is not part of SVG, or because it is
12824    ///   not implemented in GTK, or its value is problematic)
12825    #[doc(alias = "GTK_SVG_ERROR_INVALID_ATTRIBUTE")]
12826    InvalidAttribute,
12827    /// A required attribute is missing
12828    #[doc(alias = "GTK_SVG_ERROR_MISSING_ATTRIBUTE")]
12829    MissingAttribute,
12830    /// A reference does not point to
12831    ///   a suitable element
12832    #[doc(alias = "GTK_SVG_ERROR_INVALID_REFERENCE")]
12833    InvalidReference,
12834    /// An animation could not be updated
12835    #[doc(alias = "GTK_SVG_ERROR_FAILED_UPDATE")]
12836    FailedUpdate,
12837    /// Rendering is not according to
12838    ///   expecations
12839    #[doc(alias = "GTK_SVG_ERROR_FAILED_RENDERING")]
12840    FailedRendering,
12841    /// An XML element is ignored,
12842    ///   but it should not affect rendering (this error code is used
12843    ///   for metadata and exension elements)
12844    #[doc(alias = "GTK_SVG_ERROR_IGNORED_ELEMENT")]
12845    IgnoredElement,
12846    /// An implementation limit has
12847    ///   been hit, such as the number of loaded shapes.
12848    #[doc(alias = "GTK_SVG_ERROR_LIMITS_EXCEEDED")]
12849    LimitsExceeded,
12850    /// The SVG uses features that
12851    ///   are not supported by [`Svg`][crate::Svg]. It may be advisable to use
12852    ///   a different SVG renderer.
12853    #[doc(alias = "GTK_SVG_ERROR_NOT_IMPLEMENTED")]
12854    NotImplemented,
12855    #[doc(alias = "GTK_SVG_ERROR_FEATURE_DISABLED")]
12856    FeatureDisabled,
12857    #[doc(hidden)]
12858    __Unknown(i32),
12859}
12860
12861#[cfg(feature = "v4_22")]
12862#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12863impl SvgError {
12864    #[doc(alias = "gtk_svg_error_get_attribute")]
12865    #[doc(alias = "get_attribute")]
12866    pub fn attribute(error: &glib::Error) -> Option<glib::GString> {
12867        assert_initialized_main_thread!();
12868        unsafe { from_glib_none(ffi::gtk_svg_error_get_attribute(error.to_glib_none().0)) }
12869    }
12870
12871    #[doc(alias = "gtk_svg_error_get_element")]
12872    #[doc(alias = "get_element")]
12873    pub fn element(error: &glib::Error) -> Option<glib::GString> {
12874        assert_initialized_main_thread!();
12875        unsafe { from_glib_none(ffi::gtk_svg_error_get_element(error.to_glib_none().0)) }
12876    }
12877
12878    //#[doc(alias = "gtk_svg_error_get_end")]
12879    //#[doc(alias = "get_end")]
12880    //pub fn end(error: &glib::Error) -> /*Ignored*/Option<SvgLocation> {
12881    //    unsafe { TODO: call ffi:gtk_svg_error_get_end() }
12882    //}
12883
12884    #[cfg(feature = "v4_24")]
12885    #[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
12886    #[doc(alias = "gtk_svg_error_get_input")]
12887    #[doc(alias = "get_input")]
12888    pub fn input(error: &glib::Error) -> Option<glib::GString> {
12889        assert_initialized_main_thread!();
12890        unsafe { from_glib_none(ffi::gtk_svg_error_get_input(error.to_glib_none().0)) }
12891    }
12892
12893    //#[doc(alias = "gtk_svg_error_get_start")]
12894    //#[doc(alias = "get_start")]
12895    //pub fn start(error: &glib::Error) -> /*Ignored*/Option<SvgLocation> {
12896    //    unsafe { TODO: call ffi:gtk_svg_error_get_start() }
12897    //}
12898
12899    #[doc(alias = "gtk_svg_error_quark")]
12900    pub fn quark() -> glib::Quark {
12901        assert_initialized_main_thread!();
12902        unsafe { from_glib(ffi::gtk_svg_error_quark()) }
12903    }
12904}
12905
12906#[cfg(feature = "v4_22")]
12907#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12908#[doc(hidden)]
12909impl IntoGlib for SvgError {
12910    type GlibType = ffi::GtkSvgError;
12911
12912    #[inline]
12913    fn into_glib(self) -> ffi::GtkSvgError {
12914        match self {
12915            Self::InvalidSyntax => ffi::GTK_SVG_ERROR_INVALID_SYNTAX,
12916            Self::InvalidElement => ffi::GTK_SVG_ERROR_INVALID_ELEMENT,
12917            Self::InvalidAttribute => ffi::GTK_SVG_ERROR_INVALID_ATTRIBUTE,
12918            Self::MissingAttribute => ffi::GTK_SVG_ERROR_MISSING_ATTRIBUTE,
12919            Self::InvalidReference => ffi::GTK_SVG_ERROR_INVALID_REFERENCE,
12920            Self::FailedUpdate => ffi::GTK_SVG_ERROR_FAILED_UPDATE,
12921            Self::FailedRendering => ffi::GTK_SVG_ERROR_FAILED_RENDERING,
12922            Self::IgnoredElement => ffi::GTK_SVG_ERROR_IGNORED_ELEMENT,
12923            Self::LimitsExceeded => ffi::GTK_SVG_ERROR_LIMITS_EXCEEDED,
12924            Self::NotImplemented => ffi::GTK_SVG_ERROR_NOT_IMPLEMENTED,
12925            Self::FeatureDisabled => ffi::GTK_SVG_ERROR_FEATURE_DISABLED,
12926            Self::__Unknown(value) => value,
12927        }
12928    }
12929}
12930
12931#[cfg(feature = "v4_22")]
12932#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12933#[doc(hidden)]
12934impl FromGlib<ffi::GtkSvgError> for SvgError {
12935    #[inline]
12936    unsafe fn from_glib(value: ffi::GtkSvgError) -> Self {
12937        skip_assert_initialized!();
12938
12939        match value {
12940            ffi::GTK_SVG_ERROR_INVALID_SYNTAX => Self::InvalidSyntax,
12941            ffi::GTK_SVG_ERROR_INVALID_ELEMENT => Self::InvalidElement,
12942            ffi::GTK_SVG_ERROR_INVALID_ATTRIBUTE => Self::InvalidAttribute,
12943            ffi::GTK_SVG_ERROR_MISSING_ATTRIBUTE => Self::MissingAttribute,
12944            ffi::GTK_SVG_ERROR_INVALID_REFERENCE => Self::InvalidReference,
12945            ffi::GTK_SVG_ERROR_FAILED_UPDATE => Self::FailedUpdate,
12946            ffi::GTK_SVG_ERROR_FAILED_RENDERING => Self::FailedRendering,
12947            ffi::GTK_SVG_ERROR_IGNORED_ELEMENT => Self::IgnoredElement,
12948            ffi::GTK_SVG_ERROR_LIMITS_EXCEEDED => Self::LimitsExceeded,
12949            ffi::GTK_SVG_ERROR_NOT_IMPLEMENTED => Self::NotImplemented,
12950            ffi::GTK_SVG_ERROR_FEATURE_DISABLED => Self::FeatureDisabled,
12951            value => Self::__Unknown(value),
12952        }
12953    }
12954}
12955
12956#[cfg(feature = "v4_22")]
12957#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12958impl glib::error::ErrorDomain for SvgError {
12959    #[inline]
12960    fn domain() -> glib::Quark {
12961        skip_assert_initialized!();
12962
12963        static QUARK: ::std::sync::OnceLock<glib::ffi::GQuark> = ::std::sync::OnceLock::new();
12964        let quark = *QUARK.get_or_init(|| unsafe {
12965            glib::ffi::g_quark_from_static_string(c"GtkSvgError".as_ptr())
12966        });
12967        unsafe { from_glib(quark) }
12968    }
12969
12970    #[inline]
12971    fn code(self) -> i32 {
12972        self.into_glib()
12973    }
12974
12975    #[inline]
12976    #[allow(clippy::match_single_binding)]
12977    fn from(code: i32) -> Option<Self> {
12978        skip_assert_initialized!();
12979        match unsafe { from_glib(code) } {
12980            value => Some(value),
12981        }
12982    }
12983}
12984
12985#[cfg(feature = "v4_22")]
12986#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12987impl StaticType for SvgError {
12988    #[inline]
12989    #[doc(alias = "gtk_svg_error_get_type")]
12990    fn static_type() -> glib::Type {
12991        unsafe { from_glib(ffi::gtk_svg_error_get_type()) }
12992    }
12993}
12994
12995#[cfg(feature = "v4_22")]
12996#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
12997impl glib::HasParamSpec for SvgError {
12998    type ParamSpec = glib::ParamSpecEnum;
12999    type SetValue = Self;
13000    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13001
13002    fn param_spec_builder() -> Self::BuilderFn {
13003        Self::ParamSpec::builder_with_default
13004    }
13005}
13006
13007#[cfg(feature = "v4_22")]
13008#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
13009impl glib::value::ValueType for SvgError {
13010    type Type = Self;
13011}
13012
13013#[cfg(feature = "v4_22")]
13014#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
13015unsafe impl<'a> glib::value::FromValue<'a> for SvgError {
13016    type Checker = glib::value::GenericValueTypeChecker<Self>;
13017
13018    #[inline]
13019    unsafe fn from_value(value: &'a glib::Value) -> Self {
13020        skip_assert_initialized!();
13021        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13022    }
13023}
13024
13025#[cfg(feature = "v4_22")]
13026#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
13027impl ToValue for SvgError {
13028    #[inline]
13029    fn to_value(&self) -> glib::Value {
13030        let mut value = glib::Value::for_value_type::<Self>();
13031        unsafe {
13032            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13033        }
13034        value
13035    }
13036
13037    #[inline]
13038    fn value_type(&self) -> glib::Type {
13039        Self::static_type()
13040    }
13041}
13042
13043#[cfg(feature = "v4_22")]
13044#[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
13045impl From<SvgError> for glib::Value {
13046    #[inline]
13047    fn from(v: SvgError) -> Self {
13048        skip_assert_initialized!();
13049        ToValue::to_value(&v)
13050    }
13051}
13052
13053/// The indexes of colors passed to symbolic color rendering, such as
13054/// `vfunc::Gtk::SymbolicPaintable::snapshot_symbolic`.
13055///
13056/// More values may be added over time.
13057#[cfg(feature = "v4_6")]
13058#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13059#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13060#[non_exhaustive]
13061#[doc(alias = "GtkSymbolicColor")]
13062pub enum SymbolicColor {
13063    /// The default foreground color
13064    #[doc(alias = "GTK_SYMBOLIC_COLOR_FOREGROUND")]
13065    Foreground,
13066    /// Indication color for errors
13067    #[doc(alias = "GTK_SYMBOLIC_COLOR_ERROR")]
13068    Error,
13069    /// Indication color for warnings
13070    #[doc(alias = "GTK_SYMBOLIC_COLOR_WARNING")]
13071    Warning,
13072    /// Indication color for success
13073    #[doc(alias = "GTK_SYMBOLIC_COLOR_SUCCESS")]
13074    Success,
13075    /// The system accent color.
13076    #[cfg(feature = "v4_22")]
13077    #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
13078    #[doc(alias = "GTK_SYMBOLIC_COLOR_ACCENT")]
13079    Accent,
13080    #[doc(hidden)]
13081    __Unknown(i32),
13082}
13083
13084#[cfg(feature = "v4_6")]
13085#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13086#[doc(hidden)]
13087impl IntoGlib for SymbolicColor {
13088    type GlibType = ffi::GtkSymbolicColor;
13089
13090    #[inline]
13091    fn into_glib(self) -> ffi::GtkSymbolicColor {
13092        match self {
13093            Self::Foreground => ffi::GTK_SYMBOLIC_COLOR_FOREGROUND,
13094            Self::Error => ffi::GTK_SYMBOLIC_COLOR_ERROR,
13095            Self::Warning => ffi::GTK_SYMBOLIC_COLOR_WARNING,
13096            Self::Success => ffi::GTK_SYMBOLIC_COLOR_SUCCESS,
13097            #[cfg(feature = "v4_22")]
13098            Self::Accent => ffi::GTK_SYMBOLIC_COLOR_ACCENT,
13099            Self::__Unknown(value) => value,
13100        }
13101    }
13102}
13103
13104#[cfg(feature = "v4_6")]
13105#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13106#[doc(hidden)]
13107impl FromGlib<ffi::GtkSymbolicColor> for SymbolicColor {
13108    #[inline]
13109    unsafe fn from_glib(value: ffi::GtkSymbolicColor) -> Self {
13110        skip_assert_initialized!();
13111
13112        match value {
13113            ffi::GTK_SYMBOLIC_COLOR_FOREGROUND => Self::Foreground,
13114            ffi::GTK_SYMBOLIC_COLOR_ERROR => Self::Error,
13115            ffi::GTK_SYMBOLIC_COLOR_WARNING => Self::Warning,
13116            ffi::GTK_SYMBOLIC_COLOR_SUCCESS => Self::Success,
13117            #[cfg(feature = "v4_22")]
13118            ffi::GTK_SYMBOLIC_COLOR_ACCENT => Self::Accent,
13119            value => Self::__Unknown(value),
13120        }
13121    }
13122}
13123
13124#[cfg(feature = "v4_6")]
13125#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13126impl StaticType for SymbolicColor {
13127    #[inline]
13128    #[doc(alias = "gtk_symbolic_color_get_type")]
13129    fn static_type() -> glib::Type {
13130        unsafe { from_glib(ffi::gtk_symbolic_color_get_type()) }
13131    }
13132}
13133
13134#[cfg(feature = "v4_6")]
13135#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13136impl glib::HasParamSpec for SymbolicColor {
13137    type ParamSpec = glib::ParamSpecEnum;
13138    type SetValue = Self;
13139    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13140
13141    fn param_spec_builder() -> Self::BuilderFn {
13142        Self::ParamSpec::builder_with_default
13143    }
13144}
13145
13146#[cfg(feature = "v4_6")]
13147#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13148impl glib::value::ValueType for SymbolicColor {
13149    type Type = Self;
13150}
13151
13152#[cfg(feature = "v4_6")]
13153#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13154unsafe impl<'a> glib::value::FromValue<'a> for SymbolicColor {
13155    type Checker = glib::value::GenericValueTypeChecker<Self>;
13156
13157    #[inline]
13158    unsafe fn from_value(value: &'a glib::Value) -> Self {
13159        skip_assert_initialized!();
13160        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13161    }
13162}
13163
13164#[cfg(feature = "v4_6")]
13165#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13166impl ToValue for SymbolicColor {
13167    #[inline]
13168    fn to_value(&self) -> glib::Value {
13169        let mut value = glib::Value::for_value_type::<Self>();
13170        unsafe {
13171            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13172        }
13173        value
13174    }
13175
13176    #[inline]
13177    fn value_type(&self) -> glib::Type {
13178        Self::static_type()
13179    }
13180}
13181
13182#[cfg(feature = "v4_6")]
13183#[cfg_attr(docsrs, doc(cfg(feature = "v4_6")))]
13184impl From<SymbolicColor> for glib::Value {
13185    #[inline]
13186    fn from(v: SymbolicColor) -> Self {
13187        skip_assert_initialized!();
13188        ToValue::to_value(&v)
13189    }
13190}
13191
13192/// Values that can be passed to the [`WidgetImpl::system_setting_changed()`][crate::subclass::prelude::WidgetImpl::system_setting_changed()]
13193/// vfunc.
13194///
13195/// The values indicate which system setting has changed.
13196/// Widgets may need to drop caches, or react otherwise.
13197///
13198/// Most of the values correspond to [`Settings`][crate::Settings] properties.
13199///
13200/// More values may be added over time.
13201#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13202#[non_exhaustive]
13203#[doc(alias = "GtkSystemSetting")]
13204pub enum SystemSetting {
13205    /// the [`gtk-xft-dpi`][struct@crate::Settings#gtk-xft-dpi] setting has changed
13206    #[doc(alias = "GTK_SYSTEM_SETTING_DPI")]
13207    Dpi,
13208    /// The [`gtk-font-name`][struct@crate::Settings#gtk-font-name] setting has changed
13209    #[doc(alias = "GTK_SYSTEM_SETTING_FONT_NAME")]
13210    FontName,
13211    /// The font configuration has changed in a way that
13212    ///   requires text to be redrawn. This can be any of the
13213    ///   [`gtk-xft-antialias`][struct@crate::Settings#gtk-xft-antialias],
13214    ///   [`gtk-xft-hinting`][struct@crate::Settings#gtk-xft-hinting],
13215    ///   [`gtk-xft-hintstyle`][struct@crate::Settings#gtk-xft-hintstyle],
13216    ///   [`gtk-xft-rgba`][struct@crate::Settings#gtk-xft-rgba] or
13217    ///   [`gtk-fontconfig-timestamp`][struct@crate::Settings#gtk-fontconfig-timestamp] settings
13218    #[doc(alias = "GTK_SYSTEM_SETTING_FONT_CONFIG")]
13219    FontConfig,
13220    /// The display has changed
13221    #[doc(alias = "GTK_SYSTEM_SETTING_DISPLAY")]
13222    Display,
13223    /// The icon theme has changed in a way that requires
13224    ///   icons to be looked up again
13225    #[doc(alias = "GTK_SYSTEM_SETTING_ICON_THEME")]
13226    IconTheme,
13227    #[doc(hidden)]
13228    __Unknown(i32),
13229}
13230
13231#[doc(hidden)]
13232impl IntoGlib for SystemSetting {
13233    type GlibType = ffi::GtkSystemSetting;
13234
13235    #[inline]
13236    fn into_glib(self) -> ffi::GtkSystemSetting {
13237        match self {
13238            Self::Dpi => ffi::GTK_SYSTEM_SETTING_DPI,
13239            Self::FontName => ffi::GTK_SYSTEM_SETTING_FONT_NAME,
13240            Self::FontConfig => ffi::GTK_SYSTEM_SETTING_FONT_CONFIG,
13241            Self::Display => ffi::GTK_SYSTEM_SETTING_DISPLAY,
13242            Self::IconTheme => ffi::GTK_SYSTEM_SETTING_ICON_THEME,
13243            Self::__Unknown(value) => value,
13244        }
13245    }
13246}
13247
13248#[doc(hidden)]
13249impl FromGlib<ffi::GtkSystemSetting> for SystemSetting {
13250    #[inline]
13251    unsafe fn from_glib(value: ffi::GtkSystemSetting) -> Self {
13252        skip_assert_initialized!();
13253
13254        match value {
13255            ffi::GTK_SYSTEM_SETTING_DPI => Self::Dpi,
13256            ffi::GTK_SYSTEM_SETTING_FONT_NAME => Self::FontName,
13257            ffi::GTK_SYSTEM_SETTING_FONT_CONFIG => Self::FontConfig,
13258            ffi::GTK_SYSTEM_SETTING_DISPLAY => Self::Display,
13259            ffi::GTK_SYSTEM_SETTING_ICON_THEME => Self::IconTheme,
13260            value => Self::__Unknown(value),
13261        }
13262    }
13263}
13264
13265impl StaticType for SystemSetting {
13266    #[inline]
13267    #[doc(alias = "gtk_system_setting_get_type")]
13268    fn static_type() -> glib::Type {
13269        unsafe { from_glib(ffi::gtk_system_setting_get_type()) }
13270    }
13271}
13272
13273impl glib::HasParamSpec for SystemSetting {
13274    type ParamSpec = glib::ParamSpecEnum;
13275    type SetValue = Self;
13276    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13277
13278    fn param_spec_builder() -> Self::BuilderFn {
13279        Self::ParamSpec::builder_with_default
13280    }
13281}
13282
13283impl glib::value::ValueType for SystemSetting {
13284    type Type = Self;
13285}
13286
13287unsafe impl<'a> glib::value::FromValue<'a> for SystemSetting {
13288    type Checker = glib::value::GenericValueTypeChecker<Self>;
13289
13290    #[inline]
13291    unsafe fn from_value(value: &'a glib::Value) -> Self {
13292        skip_assert_initialized!();
13293        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13294    }
13295}
13296
13297impl ToValue for SystemSetting {
13298    #[inline]
13299    fn to_value(&self) -> glib::Value {
13300        let mut value = glib::Value::for_value_type::<Self>();
13301        unsafe {
13302            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13303        }
13304        value
13305    }
13306
13307    #[inline]
13308    fn value_type(&self) -> glib::Type {
13309        Self::static_type()
13310    }
13311}
13312
13313impl From<SystemSetting> for glib::Value {
13314    #[inline]
13315    fn from(v: SystemSetting) -> Self {
13316        skip_assert_initialized!();
13317        ToValue::to_value(&v)
13318    }
13319}
13320
13321/// Reading directions for text.
13322#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13323#[non_exhaustive]
13324#[doc(alias = "GtkTextDirection")]
13325pub enum TextDirection {
13326    /// No direction.
13327    #[doc(alias = "GTK_TEXT_DIR_NONE")]
13328    None,
13329    /// Left to right text direction.
13330    #[doc(alias = "GTK_TEXT_DIR_LTR")]
13331    Ltr,
13332    /// Right to left text direction.
13333    #[doc(alias = "GTK_TEXT_DIR_RTL")]
13334    Rtl,
13335    #[doc(hidden)]
13336    __Unknown(i32),
13337}
13338
13339#[doc(hidden)]
13340impl IntoGlib for TextDirection {
13341    type GlibType = ffi::GtkTextDirection;
13342
13343    #[inline]
13344    fn into_glib(self) -> ffi::GtkTextDirection {
13345        match self {
13346            Self::None => ffi::GTK_TEXT_DIR_NONE,
13347            Self::Ltr => ffi::GTK_TEXT_DIR_LTR,
13348            Self::Rtl => ffi::GTK_TEXT_DIR_RTL,
13349            Self::__Unknown(value) => value,
13350        }
13351    }
13352}
13353
13354#[doc(hidden)]
13355impl FromGlib<ffi::GtkTextDirection> for TextDirection {
13356    #[inline]
13357    unsafe fn from_glib(value: ffi::GtkTextDirection) -> Self {
13358        skip_assert_initialized!();
13359
13360        match value {
13361            ffi::GTK_TEXT_DIR_NONE => Self::None,
13362            ffi::GTK_TEXT_DIR_LTR => Self::Ltr,
13363            ffi::GTK_TEXT_DIR_RTL => Self::Rtl,
13364            value => Self::__Unknown(value),
13365        }
13366    }
13367}
13368
13369impl StaticType for TextDirection {
13370    #[inline]
13371    #[doc(alias = "gtk_text_direction_get_type")]
13372    fn static_type() -> glib::Type {
13373        unsafe { from_glib(ffi::gtk_text_direction_get_type()) }
13374    }
13375}
13376
13377impl glib::HasParamSpec for TextDirection {
13378    type ParamSpec = glib::ParamSpecEnum;
13379    type SetValue = Self;
13380    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13381
13382    fn param_spec_builder() -> Self::BuilderFn {
13383        Self::ParamSpec::builder_with_default
13384    }
13385}
13386
13387impl glib::value::ValueType for TextDirection {
13388    type Type = Self;
13389}
13390
13391unsafe impl<'a> glib::value::FromValue<'a> for TextDirection {
13392    type Checker = glib::value::GenericValueTypeChecker<Self>;
13393
13394    #[inline]
13395    unsafe fn from_value(value: &'a glib::Value) -> Self {
13396        skip_assert_initialized!();
13397        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13398    }
13399}
13400
13401impl ToValue for TextDirection {
13402    #[inline]
13403    fn to_value(&self) -> glib::Value {
13404        let mut value = glib::Value::for_value_type::<Self>();
13405        unsafe {
13406            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13407        }
13408        value
13409    }
13410
13411    #[inline]
13412    fn value_type(&self) -> glib::Type {
13413        Self::static_type()
13414    }
13415}
13416
13417impl From<TextDirection> for glib::Value {
13418    #[inline]
13419    fn from(v: TextDirection) -> Self {
13420        skip_assert_initialized!();
13421        ToValue::to_value(&v)
13422    }
13423}
13424
13425/// Granularity types that extend the text selection. Use the
13426/// `GtkTextView::extend-selection` signal to customize the selection.
13427#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13428#[non_exhaustive]
13429#[doc(alias = "GtkTextExtendSelection")]
13430pub enum TextExtendSelection {
13431    /// Selects the current word. It is triggered by
13432    ///   a double-click for example.
13433    #[doc(alias = "GTK_TEXT_EXTEND_SELECTION_WORD")]
13434    Word,
13435    /// Selects the current line. It is triggered by
13436    ///   a triple-click for example.
13437    #[doc(alias = "GTK_TEXT_EXTEND_SELECTION_LINE")]
13438    Line,
13439    #[doc(hidden)]
13440    __Unknown(i32),
13441}
13442
13443#[doc(hidden)]
13444impl IntoGlib for TextExtendSelection {
13445    type GlibType = ffi::GtkTextExtendSelection;
13446
13447    #[inline]
13448    fn into_glib(self) -> ffi::GtkTextExtendSelection {
13449        match self {
13450            Self::Word => ffi::GTK_TEXT_EXTEND_SELECTION_WORD,
13451            Self::Line => ffi::GTK_TEXT_EXTEND_SELECTION_LINE,
13452            Self::__Unknown(value) => value,
13453        }
13454    }
13455}
13456
13457#[doc(hidden)]
13458impl FromGlib<ffi::GtkTextExtendSelection> for TextExtendSelection {
13459    #[inline]
13460    unsafe fn from_glib(value: ffi::GtkTextExtendSelection) -> Self {
13461        skip_assert_initialized!();
13462
13463        match value {
13464            ffi::GTK_TEXT_EXTEND_SELECTION_WORD => Self::Word,
13465            ffi::GTK_TEXT_EXTEND_SELECTION_LINE => Self::Line,
13466            value => Self::__Unknown(value),
13467        }
13468    }
13469}
13470
13471impl StaticType for TextExtendSelection {
13472    #[inline]
13473    #[doc(alias = "gtk_text_extend_selection_get_type")]
13474    fn static_type() -> glib::Type {
13475        unsafe { from_glib(ffi::gtk_text_extend_selection_get_type()) }
13476    }
13477}
13478
13479impl glib::HasParamSpec for TextExtendSelection {
13480    type ParamSpec = glib::ParamSpecEnum;
13481    type SetValue = Self;
13482    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13483
13484    fn param_spec_builder() -> Self::BuilderFn {
13485        Self::ParamSpec::builder_with_default
13486    }
13487}
13488
13489impl glib::value::ValueType for TextExtendSelection {
13490    type Type = Self;
13491}
13492
13493unsafe impl<'a> glib::value::FromValue<'a> for TextExtendSelection {
13494    type Checker = glib::value::GenericValueTypeChecker<Self>;
13495
13496    #[inline]
13497    unsafe fn from_value(value: &'a glib::Value) -> Self {
13498        skip_assert_initialized!();
13499        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13500    }
13501}
13502
13503impl ToValue for TextExtendSelection {
13504    #[inline]
13505    fn to_value(&self) -> glib::Value {
13506        let mut value = glib::Value::for_value_type::<Self>();
13507        unsafe {
13508            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13509        }
13510        value
13511    }
13512
13513    #[inline]
13514    fn value_type(&self) -> glib::Type {
13515        Self::static_type()
13516    }
13517}
13518
13519impl From<TextExtendSelection> for glib::Value {
13520    #[inline]
13521    fn from(v: TextExtendSelection) -> Self {
13522        skip_assert_initialized!();
13523        ToValue::to_value(&v)
13524    }
13525}
13526
13527/// Used to reference the layers of [`TextView`][crate::TextView] for the purpose of customized
13528/// drawing with the ::snapshot_layer vfunc.
13529#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13530#[non_exhaustive]
13531#[doc(alias = "GtkTextViewLayer")]
13532pub enum TextViewLayer {
13533    /// The layer rendered below the text (but above the background).
13534    #[doc(alias = "GTK_TEXT_VIEW_LAYER_BELOW_TEXT")]
13535    BelowText,
13536    /// The layer rendered above the text.
13537    #[doc(alias = "GTK_TEXT_VIEW_LAYER_ABOVE_TEXT")]
13538    AboveText,
13539    #[doc(hidden)]
13540    __Unknown(i32),
13541}
13542
13543#[doc(hidden)]
13544impl IntoGlib for TextViewLayer {
13545    type GlibType = ffi::GtkTextViewLayer;
13546
13547    #[inline]
13548    fn into_glib(self) -> ffi::GtkTextViewLayer {
13549        match self {
13550            Self::BelowText => ffi::GTK_TEXT_VIEW_LAYER_BELOW_TEXT,
13551            Self::AboveText => ffi::GTK_TEXT_VIEW_LAYER_ABOVE_TEXT,
13552            Self::__Unknown(value) => value,
13553        }
13554    }
13555}
13556
13557#[doc(hidden)]
13558impl FromGlib<ffi::GtkTextViewLayer> for TextViewLayer {
13559    #[inline]
13560    unsafe fn from_glib(value: ffi::GtkTextViewLayer) -> Self {
13561        skip_assert_initialized!();
13562
13563        match value {
13564            ffi::GTK_TEXT_VIEW_LAYER_BELOW_TEXT => Self::BelowText,
13565            ffi::GTK_TEXT_VIEW_LAYER_ABOVE_TEXT => Self::AboveText,
13566            value => Self::__Unknown(value),
13567        }
13568    }
13569}
13570
13571impl StaticType for TextViewLayer {
13572    #[inline]
13573    #[doc(alias = "gtk_text_view_layer_get_type")]
13574    fn static_type() -> glib::Type {
13575        unsafe { from_glib(ffi::gtk_text_view_layer_get_type()) }
13576    }
13577}
13578
13579impl glib::HasParamSpec for TextViewLayer {
13580    type ParamSpec = glib::ParamSpecEnum;
13581    type SetValue = Self;
13582    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13583
13584    fn param_spec_builder() -> Self::BuilderFn {
13585        Self::ParamSpec::builder_with_default
13586    }
13587}
13588
13589impl glib::value::ValueType for TextViewLayer {
13590    type Type = Self;
13591}
13592
13593unsafe impl<'a> glib::value::FromValue<'a> for TextViewLayer {
13594    type Checker = glib::value::GenericValueTypeChecker<Self>;
13595
13596    #[inline]
13597    unsafe fn from_value(value: &'a glib::Value) -> Self {
13598        skip_assert_initialized!();
13599        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13600    }
13601}
13602
13603impl ToValue for TextViewLayer {
13604    #[inline]
13605    fn to_value(&self) -> glib::Value {
13606        let mut value = glib::Value::for_value_type::<Self>();
13607        unsafe {
13608            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13609        }
13610        value
13611    }
13612
13613    #[inline]
13614    fn value_type(&self) -> glib::Type {
13615        Self::static_type()
13616    }
13617}
13618
13619impl From<TextViewLayer> for glib::Value {
13620    #[inline]
13621    fn from(v: TextViewLayer) -> Self {
13622        skip_assert_initialized!();
13623        ToValue::to_value(&v)
13624    }
13625}
13626
13627/// Used to reference the parts of [`TextView`][crate::TextView].
13628#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13629#[non_exhaustive]
13630#[doc(alias = "GtkTextWindowType")]
13631pub enum TextWindowType {
13632    /// Window that floats over scrolling areas.
13633    #[doc(alias = "GTK_TEXT_WINDOW_WIDGET")]
13634    Widget,
13635    /// Scrollable text window.
13636    #[doc(alias = "GTK_TEXT_WINDOW_TEXT")]
13637    Text,
13638    /// Left side border window.
13639    #[doc(alias = "GTK_TEXT_WINDOW_LEFT")]
13640    Left,
13641    /// Right side border window.
13642    #[doc(alias = "GTK_TEXT_WINDOW_RIGHT")]
13643    Right,
13644    /// Top border window.
13645    #[doc(alias = "GTK_TEXT_WINDOW_TOP")]
13646    Top,
13647    /// Bottom border window.
13648    #[doc(alias = "GTK_TEXT_WINDOW_BOTTOM")]
13649    Bottom,
13650    #[doc(hidden)]
13651    __Unknown(i32),
13652}
13653
13654#[doc(hidden)]
13655impl IntoGlib for TextWindowType {
13656    type GlibType = ffi::GtkTextWindowType;
13657
13658    #[inline]
13659    fn into_glib(self) -> ffi::GtkTextWindowType {
13660        match self {
13661            Self::Widget => ffi::GTK_TEXT_WINDOW_WIDGET,
13662            Self::Text => ffi::GTK_TEXT_WINDOW_TEXT,
13663            Self::Left => ffi::GTK_TEXT_WINDOW_LEFT,
13664            Self::Right => ffi::GTK_TEXT_WINDOW_RIGHT,
13665            Self::Top => ffi::GTK_TEXT_WINDOW_TOP,
13666            Self::Bottom => ffi::GTK_TEXT_WINDOW_BOTTOM,
13667            Self::__Unknown(value) => value,
13668        }
13669    }
13670}
13671
13672#[doc(hidden)]
13673impl FromGlib<ffi::GtkTextWindowType> for TextWindowType {
13674    #[inline]
13675    unsafe fn from_glib(value: ffi::GtkTextWindowType) -> Self {
13676        skip_assert_initialized!();
13677
13678        match value {
13679            ffi::GTK_TEXT_WINDOW_WIDGET => Self::Widget,
13680            ffi::GTK_TEXT_WINDOW_TEXT => Self::Text,
13681            ffi::GTK_TEXT_WINDOW_LEFT => Self::Left,
13682            ffi::GTK_TEXT_WINDOW_RIGHT => Self::Right,
13683            ffi::GTK_TEXT_WINDOW_TOP => Self::Top,
13684            ffi::GTK_TEXT_WINDOW_BOTTOM => Self::Bottom,
13685            value => Self::__Unknown(value),
13686        }
13687    }
13688}
13689
13690impl StaticType for TextWindowType {
13691    #[inline]
13692    #[doc(alias = "gtk_text_window_type_get_type")]
13693    fn static_type() -> glib::Type {
13694        unsafe { from_glib(ffi::gtk_text_window_type_get_type()) }
13695    }
13696}
13697
13698impl glib::HasParamSpec for TextWindowType {
13699    type ParamSpec = glib::ParamSpecEnum;
13700    type SetValue = Self;
13701    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13702
13703    fn param_spec_builder() -> Self::BuilderFn {
13704        Self::ParamSpec::builder_with_default
13705    }
13706}
13707
13708impl glib::value::ValueType for TextWindowType {
13709    type Type = Self;
13710}
13711
13712unsafe impl<'a> glib::value::FromValue<'a> for TextWindowType {
13713    type Checker = glib::value::GenericValueTypeChecker<Self>;
13714
13715    #[inline]
13716    unsafe fn from_value(value: &'a glib::Value) -> Self {
13717        skip_assert_initialized!();
13718        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13719    }
13720}
13721
13722impl ToValue for TextWindowType {
13723    #[inline]
13724    fn to_value(&self) -> glib::Value {
13725        let mut value = glib::Value::for_value_type::<Self>();
13726        unsafe {
13727            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13728        }
13729        value
13730    }
13731
13732    #[inline]
13733    fn value_type(&self) -> glib::Type {
13734        Self::static_type()
13735    }
13736}
13737
13738impl From<TextWindowType> for glib::Value {
13739    #[inline]
13740    fn from(v: TextWindowType) -> Self {
13741        skip_assert_initialized!();
13742        ToValue::to_value(&v)
13743    }
13744}
13745
13746/// The sizing method the column uses to determine its width.  Please note
13747/// that [`Autosize`][Self::Autosize] are inefficient for large views, and
13748/// can make columns appear choppy.
13749///
13750/// # Deprecated since 4.20
13751///
13752/// There is no replacement.
13753#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
13754#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13755#[non_exhaustive]
13756#[doc(alias = "GtkTreeViewColumnSizing")]
13757pub enum TreeViewColumnSizing {
13758    /// Columns only get bigger in reaction to changes in the model
13759    #[doc(alias = "GTK_TREE_VIEW_COLUMN_GROW_ONLY")]
13760    GrowOnly,
13761    /// Columns resize to be the optimal size every time the model changes.
13762    #[doc(alias = "GTK_TREE_VIEW_COLUMN_AUTOSIZE")]
13763    Autosize,
13764    /// Columns are a fixed numbers of pixels wide.
13765    #[doc(alias = "GTK_TREE_VIEW_COLUMN_FIXED")]
13766    Fixed,
13767    #[doc(hidden)]
13768    __Unknown(i32),
13769}
13770
13771#[allow(deprecated)]
13772#[doc(hidden)]
13773impl IntoGlib for TreeViewColumnSizing {
13774    type GlibType = ffi::GtkTreeViewColumnSizing;
13775
13776    #[inline]
13777    fn into_glib(self) -> ffi::GtkTreeViewColumnSizing {
13778        match self {
13779            Self::GrowOnly => ffi::GTK_TREE_VIEW_COLUMN_GROW_ONLY,
13780            Self::Autosize => ffi::GTK_TREE_VIEW_COLUMN_AUTOSIZE,
13781            Self::Fixed => ffi::GTK_TREE_VIEW_COLUMN_FIXED,
13782            Self::__Unknown(value) => value,
13783        }
13784    }
13785}
13786
13787#[allow(deprecated)]
13788#[doc(hidden)]
13789impl FromGlib<ffi::GtkTreeViewColumnSizing> for TreeViewColumnSizing {
13790    #[inline]
13791    unsafe fn from_glib(value: ffi::GtkTreeViewColumnSizing) -> Self {
13792        skip_assert_initialized!();
13793
13794        match value {
13795            ffi::GTK_TREE_VIEW_COLUMN_GROW_ONLY => Self::GrowOnly,
13796            ffi::GTK_TREE_VIEW_COLUMN_AUTOSIZE => Self::Autosize,
13797            ffi::GTK_TREE_VIEW_COLUMN_FIXED => Self::Fixed,
13798            value => Self::__Unknown(value),
13799        }
13800    }
13801}
13802
13803#[allow(deprecated)]
13804impl StaticType for TreeViewColumnSizing {
13805    #[inline]
13806    #[doc(alias = "gtk_tree_view_column_sizing_get_type")]
13807    fn static_type() -> glib::Type {
13808        unsafe { from_glib(ffi::gtk_tree_view_column_sizing_get_type()) }
13809    }
13810}
13811
13812#[allow(deprecated)]
13813impl glib::HasParamSpec for TreeViewColumnSizing {
13814    type ParamSpec = glib::ParamSpecEnum;
13815    type SetValue = Self;
13816    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13817
13818    fn param_spec_builder() -> Self::BuilderFn {
13819        Self::ParamSpec::builder_with_default
13820    }
13821}
13822
13823#[allow(deprecated)]
13824impl glib::value::ValueType for TreeViewColumnSizing {
13825    type Type = Self;
13826}
13827
13828#[allow(deprecated)]
13829unsafe impl<'a> glib::value::FromValue<'a> for TreeViewColumnSizing {
13830    type Checker = glib::value::GenericValueTypeChecker<Self>;
13831
13832    #[inline]
13833    unsafe fn from_value(value: &'a glib::Value) -> Self {
13834        skip_assert_initialized!();
13835        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13836    }
13837}
13838
13839#[allow(deprecated)]
13840impl ToValue for TreeViewColumnSizing {
13841    #[inline]
13842    fn to_value(&self) -> glib::Value {
13843        let mut value = glib::Value::for_value_type::<Self>();
13844        unsafe {
13845            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13846        }
13847        value
13848    }
13849
13850    #[inline]
13851    fn value_type(&self) -> glib::Type {
13852        Self::static_type()
13853    }
13854}
13855
13856#[allow(deprecated)]
13857impl From<TreeViewColumnSizing> for glib::Value {
13858    #[inline]
13859    fn from(v: TreeViewColumnSizing) -> Self {
13860        skip_assert_initialized!();
13861        ToValue::to_value(&v)
13862    }
13863}
13864
13865/// An enum for determining where a dropped row goes.
13866///
13867/// # Deprecated since 4.20
13868///
13869/// There is no replacement.
13870#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
13871#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13872#[non_exhaustive]
13873#[doc(alias = "GtkTreeViewDropPosition")]
13874pub enum TreeViewDropPosition {
13875    /// dropped row is inserted before
13876    #[doc(alias = "GTK_TREE_VIEW_DROP_BEFORE")]
13877    Before,
13878    /// dropped row is inserted after
13879    #[doc(alias = "GTK_TREE_VIEW_DROP_AFTER")]
13880    After,
13881    /// dropped row becomes a child or is inserted before
13882    #[doc(alias = "GTK_TREE_VIEW_DROP_INTO_OR_BEFORE")]
13883    IntoOrBefore,
13884    /// dropped row becomes a child or is inserted after
13885    #[doc(alias = "GTK_TREE_VIEW_DROP_INTO_OR_AFTER")]
13886    IntoOrAfter,
13887    #[doc(hidden)]
13888    __Unknown(i32),
13889}
13890
13891#[allow(deprecated)]
13892#[doc(hidden)]
13893impl IntoGlib for TreeViewDropPosition {
13894    type GlibType = ffi::GtkTreeViewDropPosition;
13895
13896    #[inline]
13897    fn into_glib(self) -> ffi::GtkTreeViewDropPosition {
13898        match self {
13899            Self::Before => ffi::GTK_TREE_VIEW_DROP_BEFORE,
13900            Self::After => ffi::GTK_TREE_VIEW_DROP_AFTER,
13901            Self::IntoOrBefore => ffi::GTK_TREE_VIEW_DROP_INTO_OR_BEFORE,
13902            Self::IntoOrAfter => ffi::GTK_TREE_VIEW_DROP_INTO_OR_AFTER,
13903            Self::__Unknown(value) => value,
13904        }
13905    }
13906}
13907
13908#[allow(deprecated)]
13909#[doc(hidden)]
13910impl FromGlib<ffi::GtkTreeViewDropPosition> for TreeViewDropPosition {
13911    #[inline]
13912    unsafe fn from_glib(value: ffi::GtkTreeViewDropPosition) -> Self {
13913        skip_assert_initialized!();
13914
13915        match value {
13916            ffi::GTK_TREE_VIEW_DROP_BEFORE => Self::Before,
13917            ffi::GTK_TREE_VIEW_DROP_AFTER => Self::After,
13918            ffi::GTK_TREE_VIEW_DROP_INTO_OR_BEFORE => Self::IntoOrBefore,
13919            ffi::GTK_TREE_VIEW_DROP_INTO_OR_AFTER => Self::IntoOrAfter,
13920            value => Self::__Unknown(value),
13921        }
13922    }
13923}
13924
13925#[allow(deprecated)]
13926impl StaticType for TreeViewDropPosition {
13927    #[inline]
13928    #[doc(alias = "gtk_tree_view_drop_position_get_type")]
13929    fn static_type() -> glib::Type {
13930        unsafe { from_glib(ffi::gtk_tree_view_drop_position_get_type()) }
13931    }
13932}
13933
13934#[allow(deprecated)]
13935impl glib::HasParamSpec for TreeViewDropPosition {
13936    type ParamSpec = glib::ParamSpecEnum;
13937    type SetValue = Self;
13938    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
13939
13940    fn param_spec_builder() -> Self::BuilderFn {
13941        Self::ParamSpec::builder_with_default
13942    }
13943}
13944
13945#[allow(deprecated)]
13946impl glib::value::ValueType for TreeViewDropPosition {
13947    type Type = Self;
13948}
13949
13950#[allow(deprecated)]
13951unsafe impl<'a> glib::value::FromValue<'a> for TreeViewDropPosition {
13952    type Checker = glib::value::GenericValueTypeChecker<Self>;
13953
13954    #[inline]
13955    unsafe fn from_value(value: &'a glib::Value) -> Self {
13956        skip_assert_initialized!();
13957        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
13958    }
13959}
13960
13961#[allow(deprecated)]
13962impl ToValue for TreeViewDropPosition {
13963    #[inline]
13964    fn to_value(&self) -> glib::Value {
13965        let mut value = glib::Value::for_value_type::<Self>();
13966        unsafe {
13967            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
13968        }
13969        value
13970    }
13971
13972    #[inline]
13973    fn value_type(&self) -> glib::Type {
13974        Self::static_type()
13975    }
13976}
13977
13978#[allow(deprecated)]
13979impl From<TreeViewDropPosition> for glib::Value {
13980    #[inline]
13981    fn from(v: TreeViewDropPosition) -> Self {
13982        skip_assert_initialized!();
13983        ToValue::to_value(&v)
13984    }
13985}
13986
13987/// Used to indicate which grid lines to draw in a tree view.
13988///
13989/// # Deprecated since 4.20
13990///
13991/// There is no replacement
13992#[cfg_attr(feature = "v4_20", deprecated = "Since 4.20")]
13993#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
13994#[non_exhaustive]
13995#[doc(alias = "GtkTreeViewGridLines")]
13996pub enum TreeViewGridLines {
13997    /// No grid lines.
13998    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_NONE")]
13999    None,
14000    /// Horizontal grid lines.
14001    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_HORIZONTAL")]
14002    Horizontal,
14003    /// Vertical grid lines.
14004    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_VERTICAL")]
14005    Vertical,
14006    /// Horizontal and vertical grid lines.
14007    #[doc(alias = "GTK_TREE_VIEW_GRID_LINES_BOTH")]
14008    Both,
14009    #[doc(hidden)]
14010    __Unknown(i32),
14011}
14012
14013#[allow(deprecated)]
14014#[doc(hidden)]
14015impl IntoGlib for TreeViewGridLines {
14016    type GlibType = ffi::GtkTreeViewGridLines;
14017
14018    #[inline]
14019    fn into_glib(self) -> ffi::GtkTreeViewGridLines {
14020        match self {
14021            Self::None => ffi::GTK_TREE_VIEW_GRID_LINES_NONE,
14022            Self::Horizontal => ffi::GTK_TREE_VIEW_GRID_LINES_HORIZONTAL,
14023            Self::Vertical => ffi::GTK_TREE_VIEW_GRID_LINES_VERTICAL,
14024            Self::Both => ffi::GTK_TREE_VIEW_GRID_LINES_BOTH,
14025            Self::__Unknown(value) => value,
14026        }
14027    }
14028}
14029
14030#[allow(deprecated)]
14031#[doc(hidden)]
14032impl FromGlib<ffi::GtkTreeViewGridLines> for TreeViewGridLines {
14033    #[inline]
14034    unsafe fn from_glib(value: ffi::GtkTreeViewGridLines) -> Self {
14035        skip_assert_initialized!();
14036
14037        match value {
14038            ffi::GTK_TREE_VIEW_GRID_LINES_NONE => Self::None,
14039            ffi::GTK_TREE_VIEW_GRID_LINES_HORIZONTAL => Self::Horizontal,
14040            ffi::GTK_TREE_VIEW_GRID_LINES_VERTICAL => Self::Vertical,
14041            ffi::GTK_TREE_VIEW_GRID_LINES_BOTH => Self::Both,
14042            value => Self::__Unknown(value),
14043        }
14044    }
14045}
14046
14047#[allow(deprecated)]
14048impl StaticType for TreeViewGridLines {
14049    #[inline]
14050    #[doc(alias = "gtk_tree_view_grid_lines_get_type")]
14051    fn static_type() -> glib::Type {
14052        unsafe { from_glib(ffi::gtk_tree_view_grid_lines_get_type()) }
14053    }
14054}
14055
14056#[allow(deprecated)]
14057impl glib::HasParamSpec for TreeViewGridLines {
14058    type ParamSpec = glib::ParamSpecEnum;
14059    type SetValue = Self;
14060    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14061
14062    fn param_spec_builder() -> Self::BuilderFn {
14063        Self::ParamSpec::builder_with_default
14064    }
14065}
14066
14067#[allow(deprecated)]
14068impl glib::value::ValueType for TreeViewGridLines {
14069    type Type = Self;
14070}
14071
14072#[allow(deprecated)]
14073unsafe impl<'a> glib::value::FromValue<'a> for TreeViewGridLines {
14074    type Checker = glib::value::GenericValueTypeChecker<Self>;
14075
14076    #[inline]
14077    unsafe fn from_value(value: &'a glib::Value) -> Self {
14078        skip_assert_initialized!();
14079        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14080    }
14081}
14082
14083#[allow(deprecated)]
14084impl ToValue for TreeViewGridLines {
14085    #[inline]
14086    fn to_value(&self) -> glib::Value {
14087        let mut value = glib::Value::for_value_type::<Self>();
14088        unsafe {
14089            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14090        }
14091        value
14092    }
14093
14094    #[inline]
14095    fn value_type(&self) -> glib::Type {
14096        Self::static_type()
14097    }
14098}
14099
14100#[allow(deprecated)]
14101impl From<TreeViewGridLines> for glib::Value {
14102    #[inline]
14103    fn from(v: TreeViewGridLines) -> Self {
14104        skip_assert_initialized!();
14105        ToValue::to_value(&v)
14106    }
14107}
14108
14109/// See also gtk_print_settings_set_paper_width().
14110#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
14111#[non_exhaustive]
14112#[doc(alias = "GtkUnit")]
14113pub enum Unit {
14114    /// No units.
14115    #[doc(alias = "GTK_UNIT_NONE")]
14116    None,
14117    /// Dimensions in points.
14118    #[doc(alias = "GTK_UNIT_POINTS")]
14119    Points,
14120    /// Dimensions in inches.
14121    #[doc(alias = "GTK_UNIT_INCH")]
14122    Inch,
14123    /// Dimensions in millimeters
14124    #[doc(alias = "GTK_UNIT_MM")]
14125    Mm,
14126    #[doc(hidden)]
14127    __Unknown(i32),
14128}
14129
14130#[doc(hidden)]
14131impl IntoGlib for Unit {
14132    type GlibType = ffi::GtkUnit;
14133
14134    #[inline]
14135    fn into_glib(self) -> ffi::GtkUnit {
14136        match self {
14137            Self::None => ffi::GTK_UNIT_NONE,
14138            Self::Points => ffi::GTK_UNIT_POINTS,
14139            Self::Inch => ffi::GTK_UNIT_INCH,
14140            Self::Mm => ffi::GTK_UNIT_MM,
14141            Self::__Unknown(value) => value,
14142        }
14143    }
14144}
14145
14146#[doc(hidden)]
14147impl FromGlib<ffi::GtkUnit> for Unit {
14148    #[inline]
14149    unsafe fn from_glib(value: ffi::GtkUnit) -> Self {
14150        skip_assert_initialized!();
14151
14152        match value {
14153            ffi::GTK_UNIT_NONE => Self::None,
14154            ffi::GTK_UNIT_POINTS => Self::Points,
14155            ffi::GTK_UNIT_INCH => Self::Inch,
14156            ffi::GTK_UNIT_MM => Self::Mm,
14157            value => Self::__Unknown(value),
14158        }
14159    }
14160}
14161
14162impl StaticType for Unit {
14163    #[inline]
14164    #[doc(alias = "gtk_unit_get_type")]
14165    fn static_type() -> glib::Type {
14166        unsafe { from_glib(ffi::gtk_unit_get_type()) }
14167    }
14168}
14169
14170impl glib::HasParamSpec for Unit {
14171    type ParamSpec = glib::ParamSpecEnum;
14172    type SetValue = Self;
14173    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14174
14175    fn param_spec_builder() -> Self::BuilderFn {
14176        Self::ParamSpec::builder_with_default
14177    }
14178}
14179
14180impl glib::value::ValueType for Unit {
14181    type Type = Self;
14182}
14183
14184unsafe impl<'a> glib::value::FromValue<'a> for Unit {
14185    type Checker = glib::value::GenericValueTypeChecker<Self>;
14186
14187    #[inline]
14188    unsafe fn from_value(value: &'a glib::Value) -> Self {
14189        skip_assert_initialized!();
14190        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14191    }
14192}
14193
14194impl ToValue for Unit {
14195    #[inline]
14196    fn to_value(&self) -> glib::Value {
14197        let mut value = glib::Value::for_value_type::<Self>();
14198        unsafe {
14199            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14200        }
14201        value
14202    }
14203
14204    #[inline]
14205    fn value_type(&self) -> glib::Type {
14206        Self::static_type()
14207    }
14208}
14209
14210impl From<Unit> for glib::Value {
14211    #[inline]
14212    fn from(v: Unit) -> Self {
14213        skip_assert_initialized!();
14214        ToValue::to_value(&v)
14215    }
14216}
14217
14218/// Determines which point or edge of a window is meant to remain fixed
14219/// when a window changes size.
14220#[cfg(feature = "v4_20")]
14221#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14222#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
14223#[non_exhaustive]
14224#[doc(alias = "GtkWindowGravity")]
14225pub enum WindowGravity {
14226    /// The top left corner
14227    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_LEFT")]
14228    TopLeft,
14229    /// The top edge
14230    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP")]
14231    Top,
14232    /// The top right corner
14233    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_RIGHT")]
14234    TopRight,
14235    /// The left edge
14236    #[doc(alias = "GTK_WINDOW_GRAVITY_LEFT")]
14237    Left,
14238    /// The center pointer
14239    #[doc(alias = "GTK_WINDOW_GRAVITY_CENTER")]
14240    Center,
14241    /// The right edge
14242    #[doc(alias = "GTK_WINDOW_GRAVITY_RIGHT")]
14243    Right,
14244    /// The bottom left corner
14245    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_LEFT")]
14246    BottomLeft,
14247    /// the bottom edge
14248    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM")]
14249    Bottom,
14250    /// The bottom right corner
14251    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_RIGHT")]
14252    BottomRight,
14253    /// The top left or top right corner,
14254    ///   depending on the text direction
14255    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_START")]
14256    TopStart,
14257    /// The top right or top left corner,
14258    ///   depending on the text direction
14259    #[doc(alias = "GTK_WINDOW_GRAVITY_TOP_END")]
14260    TopEnd,
14261    /// The left or right edge,
14262    ///   depending on the text direction
14263    #[doc(alias = "GTK_WINDOW_GRAVITY_START")]
14264    Start,
14265    /// The right or left edge,
14266    ///   depending on the text direction
14267    #[doc(alias = "GTK_WINDOW_GRAVITY_END")]
14268    End,
14269    /// The bottom left or top right corner,
14270    ///   depending on the text direction
14271    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_START")]
14272    BottomStart,
14273    /// The bottom right or top left corner,
14274    ///   depending on the text direction
14275    #[doc(alias = "GTK_WINDOW_GRAVITY_BOTTOM_END")]
14276    BottomEnd,
14277    #[doc(hidden)]
14278    __Unknown(i32),
14279}
14280
14281#[cfg(feature = "v4_20")]
14282#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14283#[doc(hidden)]
14284impl IntoGlib for WindowGravity {
14285    type GlibType = ffi::GtkWindowGravity;
14286
14287    fn into_glib(self) -> ffi::GtkWindowGravity {
14288        match self {
14289            Self::TopLeft => ffi::GTK_WINDOW_GRAVITY_TOP_LEFT,
14290            Self::Top => ffi::GTK_WINDOW_GRAVITY_TOP,
14291            Self::TopRight => ffi::GTK_WINDOW_GRAVITY_TOP_RIGHT,
14292            Self::Left => ffi::GTK_WINDOW_GRAVITY_LEFT,
14293            Self::Center => ffi::GTK_WINDOW_GRAVITY_CENTER,
14294            Self::Right => ffi::GTK_WINDOW_GRAVITY_RIGHT,
14295            Self::BottomLeft => ffi::GTK_WINDOW_GRAVITY_BOTTOM_LEFT,
14296            Self::Bottom => ffi::GTK_WINDOW_GRAVITY_BOTTOM,
14297            Self::BottomRight => ffi::GTK_WINDOW_GRAVITY_BOTTOM_RIGHT,
14298            Self::TopStart => ffi::GTK_WINDOW_GRAVITY_TOP_START,
14299            Self::TopEnd => ffi::GTK_WINDOW_GRAVITY_TOP_END,
14300            Self::Start => ffi::GTK_WINDOW_GRAVITY_START,
14301            Self::End => ffi::GTK_WINDOW_GRAVITY_END,
14302            Self::BottomStart => ffi::GTK_WINDOW_GRAVITY_BOTTOM_START,
14303            Self::BottomEnd => ffi::GTK_WINDOW_GRAVITY_BOTTOM_END,
14304            Self::__Unknown(value) => value,
14305        }
14306    }
14307}
14308
14309#[cfg(feature = "v4_20")]
14310#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14311#[doc(hidden)]
14312impl FromGlib<ffi::GtkWindowGravity> for WindowGravity {
14313    unsafe fn from_glib(value: ffi::GtkWindowGravity) -> Self {
14314        skip_assert_initialized!();
14315
14316        match value {
14317            ffi::GTK_WINDOW_GRAVITY_TOP_LEFT => Self::TopLeft,
14318            ffi::GTK_WINDOW_GRAVITY_TOP => Self::Top,
14319            ffi::GTK_WINDOW_GRAVITY_TOP_RIGHT => Self::TopRight,
14320            ffi::GTK_WINDOW_GRAVITY_LEFT => Self::Left,
14321            ffi::GTK_WINDOW_GRAVITY_CENTER => Self::Center,
14322            ffi::GTK_WINDOW_GRAVITY_RIGHT => Self::Right,
14323            ffi::GTK_WINDOW_GRAVITY_BOTTOM_LEFT => Self::BottomLeft,
14324            ffi::GTK_WINDOW_GRAVITY_BOTTOM => Self::Bottom,
14325            ffi::GTK_WINDOW_GRAVITY_BOTTOM_RIGHT => Self::BottomRight,
14326            ffi::GTK_WINDOW_GRAVITY_TOP_START => Self::TopStart,
14327            ffi::GTK_WINDOW_GRAVITY_TOP_END => Self::TopEnd,
14328            ffi::GTK_WINDOW_GRAVITY_START => Self::Start,
14329            ffi::GTK_WINDOW_GRAVITY_END => Self::End,
14330            ffi::GTK_WINDOW_GRAVITY_BOTTOM_START => Self::BottomStart,
14331            ffi::GTK_WINDOW_GRAVITY_BOTTOM_END => Self::BottomEnd,
14332            value => Self::__Unknown(value),
14333        }
14334    }
14335}
14336
14337#[cfg(feature = "v4_20")]
14338#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14339impl StaticType for WindowGravity {
14340    #[inline]
14341    #[doc(alias = "gtk_window_gravity_get_type")]
14342    fn static_type() -> glib::Type {
14343        unsafe { from_glib(ffi::gtk_window_gravity_get_type()) }
14344    }
14345}
14346
14347#[cfg(feature = "v4_20")]
14348#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14349impl glib::HasParamSpec for WindowGravity {
14350    type ParamSpec = glib::ParamSpecEnum;
14351    type SetValue = Self;
14352    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14353
14354    fn param_spec_builder() -> Self::BuilderFn {
14355        Self::ParamSpec::builder_with_default
14356    }
14357}
14358
14359#[cfg(feature = "v4_20")]
14360#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14361impl glib::value::ValueType for WindowGravity {
14362    type Type = Self;
14363}
14364
14365#[cfg(feature = "v4_20")]
14366#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14367unsafe impl<'a> glib::value::FromValue<'a> for WindowGravity {
14368    type Checker = glib::value::GenericValueTypeChecker<Self>;
14369
14370    #[inline]
14371    unsafe fn from_value(value: &'a glib::Value) -> Self {
14372        skip_assert_initialized!();
14373        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14374    }
14375}
14376
14377#[cfg(feature = "v4_20")]
14378#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14379impl ToValue for WindowGravity {
14380    #[inline]
14381    fn to_value(&self) -> glib::Value {
14382        let mut value = glib::Value::for_value_type::<Self>();
14383        unsafe {
14384            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14385        }
14386        value
14387    }
14388
14389    #[inline]
14390    fn value_type(&self) -> glib::Type {
14391        Self::static_type()
14392    }
14393}
14394
14395#[cfg(feature = "v4_20")]
14396#[cfg_attr(docsrs, doc(cfg(feature = "v4_20")))]
14397impl From<WindowGravity> for glib::Value {
14398    #[inline]
14399    fn from(v: WindowGravity) -> Self {
14400        skip_assert_initialized!();
14401        ToValue::to_value(&v)
14402    }
14403}
14404
14405/// Describes a type of line wrapping.
14406#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy)]
14407#[non_exhaustive]
14408#[doc(alias = "GtkWrapMode")]
14409pub enum WrapMode {
14410    /// do not wrap lines; just make the text area wider
14411    #[doc(alias = "GTK_WRAP_NONE")]
14412    None,
14413    /// wrap text, breaking lines anywhere the cursor can
14414    ///   appear (between characters, usually - if you want to be technical,
14415    ///   between graphemes, see pango_get_log_attrs())
14416    #[doc(alias = "GTK_WRAP_CHAR")]
14417    Char,
14418    /// wrap text, breaking lines in between words
14419    #[doc(alias = "GTK_WRAP_WORD")]
14420    Word,
14421    /// wrap text, breaking lines in between words, or if
14422    ///   that is not enough, also between graphemes
14423    #[doc(alias = "GTK_WRAP_WORD_CHAR")]
14424    WordChar,
14425    #[doc(hidden)]
14426    __Unknown(i32),
14427}
14428
14429#[doc(hidden)]
14430impl IntoGlib for WrapMode {
14431    type GlibType = ffi::GtkWrapMode;
14432
14433    #[inline]
14434    fn into_glib(self) -> ffi::GtkWrapMode {
14435        match self {
14436            Self::None => ffi::GTK_WRAP_NONE,
14437            Self::Char => ffi::GTK_WRAP_CHAR,
14438            Self::Word => ffi::GTK_WRAP_WORD,
14439            Self::WordChar => ffi::GTK_WRAP_WORD_CHAR,
14440            Self::__Unknown(value) => value,
14441        }
14442    }
14443}
14444
14445#[doc(hidden)]
14446impl FromGlib<ffi::GtkWrapMode> for WrapMode {
14447    #[inline]
14448    unsafe fn from_glib(value: ffi::GtkWrapMode) -> Self {
14449        skip_assert_initialized!();
14450
14451        match value {
14452            ffi::GTK_WRAP_NONE => Self::None,
14453            ffi::GTK_WRAP_CHAR => Self::Char,
14454            ffi::GTK_WRAP_WORD => Self::Word,
14455            ffi::GTK_WRAP_WORD_CHAR => Self::WordChar,
14456            value => Self::__Unknown(value),
14457        }
14458    }
14459}
14460
14461impl StaticType for WrapMode {
14462    #[inline]
14463    #[doc(alias = "gtk_wrap_mode_get_type")]
14464    fn static_type() -> glib::Type {
14465        unsafe { from_glib(ffi::gtk_wrap_mode_get_type()) }
14466    }
14467}
14468
14469impl glib::HasParamSpec for WrapMode {
14470    type ParamSpec = glib::ParamSpecEnum;
14471    type SetValue = Self;
14472    type BuilderFn = fn(&str, Self) -> glib::ParamSpecEnumBuilder<Self>;
14473
14474    fn param_spec_builder() -> Self::BuilderFn {
14475        Self::ParamSpec::builder_with_default
14476    }
14477}
14478
14479impl glib::value::ValueType for WrapMode {
14480    type Type = Self;
14481}
14482
14483unsafe impl<'a> glib::value::FromValue<'a> for WrapMode {
14484    type Checker = glib::value::GenericValueTypeChecker<Self>;
14485
14486    #[inline]
14487    unsafe fn from_value(value: &'a glib::Value) -> Self {
14488        skip_assert_initialized!();
14489        unsafe { from_glib(glib::gobject_ffi::g_value_get_enum(value.to_glib_none().0)) }
14490    }
14491}
14492
14493impl ToValue for WrapMode {
14494    #[inline]
14495    fn to_value(&self) -> glib::Value {
14496        let mut value = glib::Value::for_value_type::<Self>();
14497        unsafe {
14498            glib::gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, self.into_glib());
14499        }
14500        value
14501    }
14502
14503    #[inline]
14504    fn value_type(&self) -> glib::Type {
14505        Self::static_type()
14506    }
14507}
14508
14509impl From<WrapMode> for glib::Value {
14510    #[inline]
14511    fn from(v: WrapMode) -> Self {
14512        skip_assert_initialized!();
14513        ToValue::to_value(&v)
14514    }
14515}