Skip to main content

gtk4/auto/
alternative_trigger.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::{ShortcutTrigger, ffi};
6use glib::{prelude::*, translate::*};
7
8glib::wrapper! {
9    /// Combines two shortcut triggers.
10    ///
11    /// The [`AlternativeTrigger`][crate::AlternativeTrigger] triggers when either of the two trigger.
12    ///
13    /// This can be cascaded to combine more than two triggers.
14    ///
15    /// ## Properties
16    ///
17    ///
18    /// #### `first`
19    ///  The first [`ShortcutTrigger`][crate::ShortcutTrigger] to check.
20    ///
21    /// Readable | Writable | Construct Only
22    ///
23    ///
24    /// #### `second`
25    ///  The second [`ShortcutTrigger`][crate::ShortcutTrigger] to check.
26    ///
27    /// Readable | Writable | Construct Only
28    ///
29    /// # Implements
30    ///
31    /// [`ShortcutTriggerExt`][trait@crate::prelude::ShortcutTriggerExt], [`trait@glib::ObjectExt`], [`trait@gio::prelude::ListModelExt`], [`ShortcutTriggerExtManual`][trait@crate::prelude::ShortcutTriggerExtManual]
32    #[doc(alias = "GtkAlternativeTrigger")]
33    pub struct AlternativeTrigger(Object<ffi::GtkAlternativeTrigger, ffi::GtkAlternativeTriggerClass>) @extends ShortcutTrigger, @implements gio::ListModel;
34
35    match fn {
36        type_ => || ffi::gtk_alternative_trigger_get_type(),
37    }
38}
39
40impl AlternativeTrigger {
41    /// Creates a [`ShortcutTrigger`][crate::ShortcutTrigger] that will trigger whenever
42    /// either of the two given triggers gets triggered.
43    ///
44    /// Note that nesting is allowed, so if you want more than two
45    /// alternative, create a new alternative trigger for each option.
46    /// ## `first`
47    /// The first trigger that may trigger
48    /// ## `second`
49    /// The second trigger that may trigger
50    ///
51    /// # Returns
52    ///
53    /// a new [`ShortcutTrigger`][crate::ShortcutTrigger]
54    #[doc(alias = "gtk_alternative_trigger_new")]
55    pub fn new(
56        first: impl IsA<ShortcutTrigger>,
57        second: impl IsA<ShortcutTrigger>,
58    ) -> AlternativeTrigger {
59        skip_assert_initialized!();
60        unsafe {
61            ShortcutTrigger::from_glib_full(ffi::gtk_alternative_trigger_new(
62                first.upcast().into_glib_ptr(),
63                second.upcast().into_glib_ptr(),
64            ))
65            .unsafe_cast()
66        }
67    }
68
69    /// Creates a [`ShortcutTrigger`][crate::ShortcutTrigger] that will trigger whenever
70    /// any of the given triggers gets triggered.
71    /// ## `triggers`
72    /// the triggers
73    ///
74    /// # Returns
75    ///
76    /// a new [`ShortcutTrigger`][crate::ShortcutTrigger]
77    #[cfg(feature = "v4_24")]
78    #[cfg_attr(docsrs, doc(cfg(feature = "v4_24")))]
79    #[doc(alias = "gtk_alternative_trigger_newv")]
80    pub fn newv(triggers: &[ShortcutTrigger]) -> AlternativeTrigger {
81        assert_initialized_main_thread!();
82        let n_triggers = triggers.len() as _;
83        unsafe {
84            ShortcutTrigger::from_glib_full(ffi::gtk_alternative_trigger_newv(
85                triggers.to_glib_full(),
86                n_triggers,
87            ))
88            .unsafe_cast()
89        }
90    }
91
92    // rustdoc-stripper-ignore-next
93    /// Creates a new builder-pattern struct instance to construct [`AlternativeTrigger`] objects.
94    ///
95    /// This method returns an instance of [`AlternativeTriggerBuilder`](crate::builders::AlternativeTriggerBuilder) which can be used to create [`AlternativeTrigger`] objects.
96    pub fn builder() -> AlternativeTriggerBuilder {
97        AlternativeTriggerBuilder::new()
98    }
99
100    /// Gets the first of the two alternative triggers that may
101    /// trigger @self.
102    ///
103    /// [`second()`][Self::second()] will return
104    /// the other one.
105    ///
106    /// # Returns
107    ///
108    /// the first alternative trigger
109    #[doc(alias = "gtk_alternative_trigger_get_first")]
110    #[doc(alias = "get_first")]
111    pub fn first(&self) -> ShortcutTrigger {
112        unsafe {
113            from_glib_none(ffi::gtk_alternative_trigger_get_first(
114                self.to_glib_none().0,
115            ))
116        }
117    }
118
119    /// Gets the second of the two alternative triggers that may
120    /// trigger @self.
121    ///
122    /// [`first()`][Self::first()] will return
123    /// the other one.
124    ///
125    /// # Returns
126    ///
127    /// the second alternative trigger
128    #[doc(alias = "gtk_alternative_trigger_get_second")]
129    #[doc(alias = "get_second")]
130    pub fn second(&self) -> ShortcutTrigger {
131        unsafe {
132            from_glib_none(ffi::gtk_alternative_trigger_get_second(
133                self.to_glib_none().0,
134            ))
135        }
136    }
137}
138
139impl Default for AlternativeTrigger {
140    fn default() -> Self {
141        glib::object::Object::new::<Self>()
142    }
143}
144
145// rustdoc-stripper-ignore-next
146/// A [builder-pattern] type to construct [`AlternativeTrigger`] objects.
147///
148/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
149#[must_use = "The builder must be built to be used"]
150pub struct AlternativeTriggerBuilder {
151    builder: glib::object::ObjectBuilder<'static, AlternativeTrigger>,
152}
153
154impl AlternativeTriggerBuilder {
155    fn new() -> Self {
156        Self {
157            builder: glib::object::Object::builder(),
158        }
159    }
160
161    /// The first [`ShortcutTrigger`][crate::ShortcutTrigger] to check.
162    pub fn first(self, first: &impl IsA<ShortcutTrigger>) -> Self {
163        Self {
164            builder: self.builder.property("first", first.clone().upcast()),
165        }
166    }
167
168    /// The second [`ShortcutTrigger`][crate::ShortcutTrigger] to check.
169    pub fn second(self, second: &impl IsA<ShortcutTrigger>) -> Self {
170        Self {
171            builder: self.builder.property("second", second.clone().upcast()),
172        }
173    }
174
175    // rustdoc-stripper-ignore-next
176    /// Build the [`AlternativeTrigger`].
177    #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
178    pub fn build(self) -> AlternativeTrigger {
179        assert_initialized_main_thread!();
180        self.builder.build()
181    }
182}