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
// 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::object::IsA;
use crate::object::ObjectType as ObjectType_;
use crate::translate::*;
use crate::Object;
use crate::StaticType;
use std::fmt;
crate::wrapper! {
/// [`SignalGroup`][crate::SignalGroup] manages to simplify the process of connecting
/// many signals to a [`Object`][crate::Object] as a group. As such there is no API
/// to disconnect a signal from the group.
///
/// In particular, this allows you to:
///
/// - Change the target instance, which automatically causes disconnection
/// of the signals from the old instance and connecting to the new instance.
/// - Block and unblock signals as a group
/// - Ensuring that blocked state transfers across target instances.
///
/// One place you might want to use such a structure is with `GtkTextView` and
/// `GtkTextBuffer`. Often times, you'll need to connect to many signals on
/// `GtkTextBuffer` from a `GtkTextView` subclass. This allows you to create a
/// signal group during instance construction, simply bind the
/// `GtkTextView:buffer` property to `property::SignalGroup::target` and connect
/// all the signals you need. When the `GtkTextView:buffer` property changes
/// all of the signals will be transitioned correctly.
///
/// # Implements
///
/// [`ObjectExt`][trait@crate::prelude::ObjectExt]
#[doc(alias = "GSignalGroup")]
pub struct SignalGroup(Object<gobject_ffi::GSignalGroup>);
match fn {
type_ => || gobject_ffi::g_signal_group_get_type(),
}
}
impl SignalGroup {
/// Creates a new [`SignalGroup`][crate::SignalGroup] for target instances of `target_type`.
/// ## `target_type`
/// the `GType` of the target instance.
///
/// # Returns
///
/// a new [`SignalGroup`][crate::SignalGroup]
#[doc(alias = "g_signal_group_new")]
pub fn new(target_type: crate::types::Type) -> SignalGroup {
unsafe { from_glib_full(gobject_ffi::g_signal_group_new(target_type.into_glib())) }
}
/// Blocks all signal handlers managed by `self` so they will not
/// be called during any signal emissions. Must be unblocked exactly
/// the same number of times it has been blocked to become active again.
///
/// This blocked state will be kept across changes of the target instance.
#[doc(alias = "g_signal_group_block")]
pub fn block(&self) {
unsafe {
gobject_ffi::g_signal_group_block(self.to_glib_none().0);
}
}
/// Gets the target instance used when connecting signals.
///
/// # Returns
///
/// The target instance
#[doc(alias = "g_signal_group_dup_target")]
#[doc(alias = "dup_target")]
pub fn target(&self) -> Option<Object> {
unsafe {
from_glib_full(gobject_ffi::g_signal_group_dup_target(
self.to_glib_none().0,
))
}
}
/// Sets the target instance used when connecting signals. Any signal
/// that has been registered with `g_signal_group_connect_object()` or
/// similar functions will be connected to this object.
///
/// If the target instance was previously set, signals will be
/// disconnected from that object prior to connecting to `target`.
/// ## `target`
/// The target instance used
/// when connecting signals.
#[doc(alias = "g_signal_group_set_target")]
pub fn set_target(&self, target: Option<&impl IsA<Object>>) {
unsafe {
gobject_ffi::g_signal_group_set_target(
self.to_glib_none().0,
target.map(|p| p.as_ref()).to_glib_none().0,
);
}
}
/// Unblocks all signal handlers managed by `self` so they will be
/// called again during any signal emissions unless it is blocked
/// again. Must be unblocked exactly the same number of times it
/// has been blocked to become active again.
#[doc(alias = "g_signal_group_unblock")]
pub fn unblock(&self) {
unsafe {
gobject_ffi::g_signal_group_unblock(self.to_glib_none().0);
}
}
/// The `GType` of the target property.
#[cfg(any(feature = "v2_72", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_72")))]
#[doc(alias = "target-type")]
pub fn target_type(&self) -> crate::types::Type {
crate::ObjectExt::property(self, "target-type")
}
}
unsafe impl Send for SignalGroup {}
unsafe impl Sync for SignalGroup {}
impl fmt::Display for SignalGroup {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("SignalGroup")
}
}