1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
use crate::{EventController, PropagationLimit, PropagationPhase};
use glib::{
prelude::*,
signal::{connect_raw, SignalHandlerId},
translate::*,
};
use std::boxed::Box as Box_;
glib::wrapper! {
/// [`EventControllerLegacy`][crate::EventControllerLegacy] is an event controller that provides raw
/// access to the event stream.
///
/// It should only be used as a last resort if none of the other event
/// controllers or gestures do the job.
///
/// ## Signals
///
///
/// #### `event`
/// Emitted for each GDK event delivered to @controller.
///
///
///
/// # Implements
///
/// [`EventControllerExt`][trait@crate::prelude::EventControllerExt], [`trait@glib::ObjectExt`]
#[doc(alias = "GtkEventControllerLegacy")]
pub struct EventControllerLegacy(Object<ffi::GtkEventControllerLegacy, ffi::GtkEventControllerLegacyClass>) @extends EventController;
match fn {
type_ => || ffi::gtk_event_controller_legacy_get_type(),
}
}
impl EventControllerLegacy {
/// Creates a new legacy event controller.
///
/// # Returns
///
/// the newly created event controller.
#[doc(alias = "gtk_event_controller_legacy_new")]
pub fn new() -> EventControllerLegacy {
assert_initialized_main_thread!();
unsafe {
EventController::from_glib_full(ffi::gtk_event_controller_legacy_new()).unsafe_cast()
}
}
// rustdoc-stripper-ignore-next
/// Creates a new builder-pattern struct instance to construct [`EventControllerLegacy`] objects.
///
/// This method returns an instance of [`EventControllerLegacyBuilder`](crate::builders::EventControllerLegacyBuilder) which can be used to create [`EventControllerLegacy`] objects.
pub fn builder() -> EventControllerLegacyBuilder {
EventControllerLegacyBuilder::new()
}
/// Emitted for each GDK event delivered to @controller.
/// ## `event`
/// the [`gdk::Event`][crate::gdk::Event] which triggered this signal
///
/// # Returns
///
/// [`true`] to stop other handlers from being invoked for the event
/// and the emission of this signal. [`false`] to propagate the event further.
#[doc(alias = "event")]
pub fn connect_event<F: Fn(&Self, &gdk::Event) -> glib::Propagation + 'static>(
&self,
f: F,
) -> SignalHandlerId {
unsafe extern "C" fn event_trampoline<
F: Fn(&EventControllerLegacy, &gdk::Event) -> glib::Propagation + 'static,
>(
this: *mut ffi::GtkEventControllerLegacy,
event: *mut gdk::ffi::GdkEvent,
f: glib::ffi::gpointer,
) -> glib::ffi::gboolean {
let f: &F = &*(f as *const F);
f(&from_glib_borrow(this), &from_glib_borrow(event)).into_glib()
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"event\0".as_ptr() as *const _,
Some(std::mem::transmute::<_, unsafe extern "C" fn()>(
event_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl Default for EventControllerLegacy {
fn default() -> Self {
Self::new()
}
}
// rustdoc-stripper-ignore-next
/// A [builder-pattern] type to construct [`EventControllerLegacy`] objects.
///
/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
#[must_use = "The builder must be built to be used"]
pub struct EventControllerLegacyBuilder {
builder: glib::object::ObjectBuilder<'static, EventControllerLegacy>,
}
impl EventControllerLegacyBuilder {
fn new() -> Self {
Self {
builder: glib::object::Object::builder(),
}
}
/// The name for this controller, typically used for debugging purposes.
pub fn name(self, name: impl Into<glib::GString>) -> Self {
Self {
builder: self.builder.property("name", name.into()),
}
}
/// The limit for which events this controller will handle.
pub fn propagation_limit(self, propagation_limit: PropagationLimit) -> Self {
Self {
builder: self
.builder
.property("propagation-limit", propagation_limit),
}
}
/// The propagation phase at which this controller will handle events.
pub fn propagation_phase(self, propagation_phase: PropagationPhase) -> Self {
Self {
builder: self
.builder
.property("propagation-phase", propagation_phase),
}
}
// rustdoc-stripper-ignore-next
/// Build the [`EventControllerLegacy`].
#[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
pub fn build(self) -> EventControllerLegacy {
self.builder.build()
}
}