Struct gtk4::Widget

source ·
#[repr(transparent)]
pub struct Widget { /* private fields */ }
Expand description

The base class for all widgets.

Widget is the base class all widgets in GTK derive from. It manages the widget lifecycle, layout, states and style.

Height-for-width Geometry Management

GTK uses a height-for-width (and width-for-height) geometry management system. Height-for-width means that a widget can change how much vertical space it needs, depending on the amount of horizontal space that it is given (and similar for width-for-height). The most common example is a label that reflows to fill up the available width, wraps to fewer lines, and therefore needs less height.

Height-for-width geometry management is implemented in GTK by way of two virtual methods:

  • vfunc::Gtk::Widget::get_request_mode
  • vfunc::Gtk::Widget::measure

There are some important things to keep in mind when implementing height-for-width and when using it in widget implementations.

If you implement a direct Widget subclass that supports height-for-width or width-for-height geometry management for itself or its child widgets, the vfunc::Gtk::Widget::get_request_mode virtual function must be implemented as well and return the widget’s preferred request mode. The default implementation of this virtual function returns SizeRequestMode::ConstantSize, which means that the widget will only ever get -1 passed as the for_size value to its vfunc::Gtk::Widget::measure implementation.

The geometry management system will query a widget hierarchy in only one orientation at a time. When widgets are initially queried for their minimum sizes it is generally done in two initial passes in the SizeRequestMode chosen by the toplevel.

For example, when queried in the normal SizeRequestMode::HeightForWidth mode:

First, the default minimum and natural width for each widget in the interface will be computed using prelude::WidgetExt::measure with an orientation of Orientation::Horizontal and a for_size of -1. Because the preferred widths for each widget depend on the preferred widths of their children, this information propagates up the hierarchy, and finally a minimum and natural width is determined for the entire toplevel. Next, the toplevel will use the minimum width to query for the minimum height contextual to that width using prelude::WidgetExt::measure with an orientation of Orientation::Vertical and a for_size of the just computed width. This will also be a highly recursive operation. The minimum height for the minimum width is normally used to set the minimum size constraint on the toplevel.

After the toplevel window has initially requested its size in both dimensions it can go on to allocate itself a reasonable size (or a size previously specified with GtkWindowExt::set_default_size()). During the recursive allocation process it’s important to note that request cycles will be recursively executed while widgets allocate their children. Each widget, once allocated a size, will go on to first share the space in one orientation among its children and then request each child’s height for its target allocated width or its width for allocated height, depending. In this way a Widget will typically be requested its size a number of times before actually being allocated a size. The size a widget is finally allocated can of course differ from the size it has requested. For this reason, Widget caches a small number of results to avoid re-querying for the same sizes in one allocation cycle.

If a widget does move content around to intelligently use up the allocated size then it must support the request in both SizeRequestModes even if the widget in question only trades sizes in a single orientation.

For instance, a Label that does height-for-width word wrapping will not expect to have vfunc::Gtk::Widget::measure with an orientation of Orientation::Vertical called because that call is specific to a width-for-height request. In this case the label must return the height required for its own minimum possible width. By following this rule any widget that handles height-for-width or width-for-height requests will always be allocated at least enough space to fit its own content.

Here are some examples of how a SizeRequestMode::HeightForWidth widget generally deals with width-for-height requests:

⚠️ The following code is in c ⚠️

static void
foo_widget_measure (GtkWidget      *widget,
                    GtkOrientation  orientation,
                    int             for_size,
                    int            *minimum_size,
                    int            *natural_size,
                    int            *minimum_baseline,
                    int            *natural_baseline)
{
  if (orientation == GTK_ORIENTATION_HORIZONTAL)
    {
      // Calculate minimum and natural width
    }
  else // VERTICAL
    {
      if (i_am_in_height_for_width_mode)
        {
          int min_width, dummy;

          // First, get the minimum width of our widget
          GTK_WIDGET_GET_CLASS (widget)->measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
                                                  &min_width, &dummy, &dummy, &dummy);

          // Now use the minimum width to retrieve the minimum and natural height to display
          // that width.
          GTK_WIDGET_GET_CLASS (widget)->measure (widget, GTK_ORIENTATION_VERTICAL, min_width,
                                                  minimum_size, natural_size, &dummy, &dummy);
        }
      else
        {
          // ... some widgets do both.
        }
    }
}

Often a widget needs to get its own request during size request or allocation. For example, when computing height it may need to also compute width. Or when deciding how to use an allocation, the widget may need to know its natural size. In these cases, the widget should be careful to call its virtual methods directly, like in the code example above.

It will not work to use the wrapper function WidgetExt::measure() inside your own vfunc::Gtk::Widget::size_allocate implementation. These return a request adjusted by SizeGroup, the widget’s align and expand flags, as well as its CSS style.

If a widget used the wrappers inside its virtual method implementations, then the adjustments (such as widget margins) would be applied twice. GTK therefore does not allow this and will warn if you try to do it.

Of course if you are getting the size request for another widget, such as a child widget, you must use prelude::WidgetExt::measure; otherwise, you would not properly consider widget margins, SizeGroup, and so forth.

GTK also supports baseline vertical alignment of widgets. This means that widgets are positioned such that the typographical baseline of widgets in the same row are aligned. This happens if a widget supports baselines, has a vertical alignment of Align::Baseline, and is inside a widget that supports baselines and has a natural “row” that it aligns to the baseline, or a baseline assigned to it by the grandparent.

Baseline alignment support for a widget is also done by the vfunc::Gtk::Widget::measure virtual function. It allows you to report both a minimum and natural size.

If a widget ends up baseline aligned it will be allocated all the space in the parent as if it was Align::Fill, but the selected baseline can be found via [prelude::WidgetExt::get_allocated_baseline][crate::prelude::WidgetExt::get_allocated_baseline]. If the baseline has a value other than -1 you need to align the widget such that the baseline appears at the position.

GtkWidget as GtkBuildable

The Widget implementation of the Buildable interface supports various custom elements to specify additional aspects of widgets that are not directly expressed as properties.

If the widget uses a LayoutManager, Widget supports a custom <layout> element, used to define layout properties:

<object class="GtkGrid" id="my_grid">
  <child>
    <object class="GtkLabel" id="label1">
      <property name="label">Description</property>
      <layout>
        <property name="column">0</property>
        <property name="row">0</property>
        <property name="row-span">1</property>
        <property name="column-span">1</property>
      </layout>
    </object>
  </child>
  <child>
    <object class="GtkEntry" id="description_entry">
      <layout>
        <property name="column">1</property>
        <property name="row">0</property>
        <property name="row-span">1</property>
        <property name="column-span">1</property>
      </layout>
    </object>
  </child>
</object>

Widget allows style information such as style classes to be associated with widgets, using the custom <style> element:

<object class="GtkButton" id="button1">
  <style>
    <class name="my-special-button-class"/>
    <class name="dark-button"/>
  </style>
</object>

Widget allows defining accessibility information, such as properties, relations, and states, using the custom <accessibility> element:

<object class="GtkButton" id="button1">
  <accessibility>
    <property name="label">Download</property>
    <relation name="labelled-by">label1</relation>
  </accessibility>
</object>

Building composite widgets from template XML

GtkWidget exposes some facilities to automate the procedure of creating composite widgets using “templates”.

To create composite widgets with Builder XML, one must associate the interface description with the widget class at class initialization time using Gtk::WidgetClass::set_template().

The interface description semantics expected in composite template descriptions is slightly different from regular Builder XML.

Unlike regular interface descriptions, Gtk::WidgetClass::set_template() will expect a <template> tag as a direct child of the toplevel <interface> tag. The <template> tag must specify the “class” attribute which must be the type name of the widget. Optionally, the “parent” attribute may be specified to specify the direct parent type of the widget type, this is ignored by Builder but required for UI design tools like Glade to introspect what kind of properties and internal children exist for a given type when the actual type does not exist.

The XML which is contained inside the <template> tag behaves as if it were added to the <object> tag defining the widget itself. You may set properties on a widget by inserting <property> tags into the <template> tag, and also add <child> tags to add children and extend a widget in the normal way you would with <object> tags.

Additionally, <object> tags can also be added before and after the initial <template> tag in the normal way, allowing one to define auxiliary objects which might be referenced by other widgets declared as children of the <template> tag.

An example of a template definition:

<interface>
  <template class="FooWidget" parent="GtkBox">
    <property name="orientation">horizontal</property>
    <property name="spacing">4</property>
    <child>
      <object class="GtkButton" id="hello_button">
        <property name="label">Hello World</property>
        <signal name="clicked" handler="hello_button_clicked" object="FooWidget" swapped="yes"/>
      </object>
    </child>
    <child>
      <object class="GtkButton" id="goodbye_button">
        <property name="label">Goodbye World</property>
      </object>
    </child>
  </template>
</interface>

Typically, you’ll place the template fragment into a file that is bundled with your project, using GResource. In order to load the template, you need to call Gtk::WidgetClass::set_template_from_resource() from the class initialization of your Widget type:

⚠️ The following code is in c ⚠️

static void
foo_widget_class_init (FooWidgetClass *klass)
{
  // ...

  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
                                               "/com/example/ui/foowidget.ui");
}

You will also need to call WidgetExt::init_template() from the instance initialization function:

⚠️ The following code is in c ⚠️

static void
foo_widget_init (FooWidget *self)
{
  // ...
  gtk_widget_init_template (GTK_WIDGET (self));
}

You can access widgets defined in the template using the [prelude::WidgetExt::get_template_child][crate::prelude::WidgetExt::get_template_child] function, but you will typically declare a pointer in the instance private data structure of your type using the same name as the widget in the template definition, and call Gtk::WidgetClass::bind_template_child_full() (or one of its wrapper macros widget_class_bind_template_child() and widget_class_bind_template_child_private()) with that name, e.g.

⚠️ The following code is in c ⚠️

typedef struct {
  GtkWidget *hello_button;
  GtkWidget *goodbye_button;
} FooWidgetPrivate;

G_DEFINE_TYPE_WITH_PRIVATE (FooWidget, foo_widget, GTK_TYPE_BOX)

static void
foo_widget_class_init (FooWidgetClass *klass)
{
  // ...
  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
                                               "/com/example/ui/foowidget.ui");
  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass),
                                                FooWidget, hello_button);
  gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass),
                                                FooWidget, goodbye_button);
}

static void
foo_widget_init (FooWidget *widget)
{

}

You can also use Gtk::WidgetClass::bind_template_callback_full() (or is wrapper macro widget_class_bind_template_callback()) to connect a signal callback defined in the template with a function visible in the scope of the class, e.g.

⚠️ The following code is in c ⚠️

// the signal handler has the instance and user data swapped
// because of the swapped="yes" attribute in the template XML
static void
hello_button_clicked (FooWidget *self,
                      GtkButton *button)
{
  g_print ("Hello, world!\n");
}

static void
foo_widget_class_init (FooWidgetClass *klass)
{
  // ...
  gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
                                               "/com/example/ui/foowidget.ui");
  gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), hello_button_clicked);
}

This is an Abstract Base Class, you cannot instantiate it.

Implements

WidgetExt, glib::ObjectExt, AccessibleExt, BuildableExt, ConstraintTargetExt, WidgetExtManual, AccessibleExtManual

Implementations§

source§

impl Widget

source

pub const NONE: Option<&'static Widget> = None

source

pub fn default_direction() -> TextDirection

Obtains the current default reading direction.

See set_default_direction().

Returns

the current default direction.

source

pub fn set_default_direction(dir: TextDirection)

Sets the default reading direction for widgets.

See WidgetExt::set_direction().

dir

the new default direction. This cannot be TextDirection::None.

Trait Implementations§

source§

impl Clone for Widget

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Widget

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for Widget

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Hash for Widget

source§

fn hash<H>(&self, state: &mut H)where H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T: WidgetImpl> IsSubclassable<T> for Widget

source§

fn class_init(class: &mut Class<Self>)

Override the virtual methods of this class for the given subclass and do other class initialization. Read more
source§

fn instance_init(instance: &mut InitializingObject<T>)

Instance specific initialization. Read more
source§

impl Ord for Widget

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl ParentClassIs for Widget

source§

impl<OT: ObjectType> PartialEq<OT> for Widget

source§

fn eq(&self, other: &OT) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<OT: ObjectType> PartialOrd<OT> for Widget

source§

fn partial_cmp(&self, other: &OT) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl StaticType for Widget

source§

fn static_type() -> Type

Returns the type identifier of Self.
source§

impl Eq for Widget

source§

impl IsA<Accessible> for Widget

source§

impl IsA<Buildable> for Widget

source§

impl IsA<ConstraintTarget> for Widget

source§

impl IsA<Widget> for AboutDialog

source§

impl IsA<Widget> for ActionBar

source§

impl IsA<Widget> for Actionable

source§

impl IsA<Widget> for AppChooser

source§

impl IsA<Widget> for AppChooserButton

source§

impl IsA<Widget> for AppChooserDialog

source§

impl IsA<Widget> for AppChooserWidget

source§

impl IsA<Widget> for ApplicationWindow

source§

impl IsA<Widget> for AspectFrame

source§

impl IsA<Widget> for Assistant

source§

impl IsA<Widget> for Box

source§

impl IsA<Widget> for Button

source§

impl IsA<Widget> for Calendar

source§

impl IsA<Widget> for CellEditable

source§

impl IsA<Widget> for CellView

source§

impl IsA<Widget> for CenterBox

source§

impl IsA<Widget> for CheckButton

source§

impl IsA<Widget> for ColorButton

source§

impl IsA<Widget> for ColorChooserDialog

source§

impl IsA<Widget> for ColorChooserWidget

source§

impl IsA<Widget> for ColumnView

source§

impl IsA<Widget> for ComboBox

source§

impl IsA<Widget> for ComboBoxText

source§

impl IsA<Widget> for Dialog

source§

impl IsA<Widget> for DragIcon

source§

impl IsA<Widget> for DrawingArea

source§

impl IsA<Widget> for DropDown

source§

impl IsA<Widget> for Editable

source§

impl IsA<Widget> for EditableLabel

source§

impl IsA<Widget> for EmojiChooser

source§

impl IsA<Widget> for Entry

source§

impl IsA<Widget> for Expander

source§

impl IsA<Widget> for FileChooserDialog

source§

impl IsA<Widget> for FileChooserWidget

source§

impl IsA<Widget> for Fixed

source§

impl IsA<Widget> for FlowBox

source§

impl IsA<Widget> for FlowBoxChild

source§

impl IsA<Widget> for FontButton

source§

impl IsA<Widget> for FontChooserDialog

source§

impl IsA<Widget> for FontChooserWidget

source§

impl IsA<Widget> for Frame

source§

impl IsA<Widget> for GLArea

source§

impl IsA<Widget> for Grid

source§

impl IsA<Widget> for GridView

source§

impl IsA<Widget> for HeaderBar

source§

impl IsA<Widget> for IconView

source§

impl IsA<Widget> for Image

source§

impl IsA<Widget> for InfoBar

source§

impl IsA<Widget> for Label

source§

impl IsA<Widget> for LevelBar

source§

impl IsA<Widget> for LinkButton

source§

impl IsA<Widget> for ListBase

source§

impl IsA<Widget> for ListBox

source§

impl IsA<Widget> for ListBoxRow

source§

impl IsA<Widget> for ListView

source§

impl IsA<Widget> for LockButton

source§

impl IsA<Widget> for MediaControls

source§

impl IsA<Widget> for MenuButton

source§

impl IsA<Widget> for MessageDialog

source§

impl IsA<Widget> for Native

source§

impl IsA<Widget> for Notebook

source§

impl IsA<Widget> for Overlay

source§

impl IsA<Widget> for PageSetupUnixDialog

Available on Linux only.
source§

impl IsA<Widget> for Paned

source§

impl IsA<Widget> for PasswordEntry

source§

impl IsA<Widget> for Picture

source§

impl IsA<Widget> for Popover

source§

impl IsA<Widget> for PopoverMenu

source§

impl IsA<Widget> for PopoverMenuBar

source§

impl IsA<Widget> for PrintUnixDialog

Available on Linux only.
source§

impl IsA<Widget> for ProgressBar

source§

impl IsA<Widget> for Range

source§

impl IsA<Widget> for Revealer

source§

impl IsA<Widget> for Root

source§

impl IsA<Widget> for Scale

source§

impl IsA<Widget> for ScaleButton

source§

impl IsA<Widget> for Scrollbar

source§

impl IsA<Widget> for ScrolledWindow

source§

impl IsA<Widget> for SearchEntry

source§

impl IsA<Widget> for Separator

source§

impl IsA<Widget> for ShortcutLabel

source§

impl IsA<Widget> for ShortcutsGroup

source§

impl IsA<Widget> for ShortcutsSection

source§

impl IsA<Widget> for ShortcutsShortcut

source§

impl IsA<Widget> for ShortcutsWindow

source§

impl IsA<Widget> for SpinButton

source§

impl IsA<Widget> for Spinner

source§

impl IsA<Widget> for Stack

source§

impl IsA<Widget> for StackSidebar

source§

impl IsA<Widget> for StackSwitcher

source§

impl IsA<Widget> for Statusbar

source§

impl IsA<Widget> for Switch

source§

impl IsA<Widget> for Text

source§

impl IsA<Widget> for TextView

source§

impl IsA<Widget> for ToggleButton

source§

impl IsA<Widget> for TreeExpander

source§

impl IsA<Widget> for TreeView

source§

impl IsA<Widget> for Video

source§

impl IsA<Widget> for Viewport

source§

impl IsA<Widget> for VolumeButton

source§

impl IsA<Widget> for Window

source§

impl IsA<Widget> for WindowControls

source§

impl IsA<Widget> for WindowHandle

Auto Trait Implementations§

§

impl RefUnwindSafe for Widget

§

impl !Send for Widget

§

impl !Sync for Widget

§

impl Unpin for Widget

§

impl UnwindSafe for Widget

Blanket Implementations§

source§

impl<O> AccessibleExtManual for Owhere O: IsA<Accessible>,

source§

fn update_property(&self, properties: &[Property<'_>])

Updates an array of accessible properties. Read more
source§

fn update_relation(&self, relations: &[Relation<'_>])

Updates an array of accessible relations. Read more
source§

fn update_state(&self, states: &[State])

Updates an array of accessible states. Read more
source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Cast for Twhere T: ObjectType,

source§

fn upcast<T>(self) -> Twhere T: ObjectType, Self: IsA<T>,

Upcasts an object to a superclass or interface T. Read more
source§

fn upcast_ref<T>(&self) -> &Twhere T: ObjectType, Self: IsA<T>,

Upcasts an object to a reference of its superclass or interface T. Read more
source§

fn downcast<T>(self) -> Result<T, Self>where T: ObjectType, Self: CanDowncast<T>,

Tries to downcast to a subclass or interface implementor T. Read more
source§

fn downcast_ref<T>(&self) -> Option<&T>where T: ObjectType, Self: CanDowncast<T>,

Tries to downcast to a reference of its subclass or interface implementor T. Read more
source§

fn dynamic_cast<T>(self) -> Result<T, Self>where T: ObjectType,

Tries to cast to an object of type T. This handles upcasting, downcasting and casting between interface and interface implementors. All checks are performed at runtime, while downcast and upcast will do many checks at compile-time already. Read more
source§

fn dynamic_cast_ref<T>(&self) -> Option<&T>where T: ObjectType,

Tries to cast to reference to an object of type T. This handles upcasting, downcasting and casting between interface and interface implementors. All checks are performed at runtime, while downcast and upcast will do many checks at compile-time already. Read more
source§

unsafe fn unsafe_cast<T>(self) -> Twhere T: ObjectType,

Casts to T unconditionally. Read more
source§

unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere T: ObjectType,

Casts to &T unconditionally. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_num_as_vec( ptr: *const GPtrArray, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_container_num_as_vec( _: *const GPtrArray, _: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_full_num_as_vec( _: *const GPtrArray, _: usize ) -> Vec<T, Global>

source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_num_as_vec( ptr: *const GSList, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_container_num_as_vec( _: *const GSList, _: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_full_num_as_vec( _: *const GSList, _: usize ) -> Vec<T, Global>

source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_num_as_vec( ptr: *mut GList, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_container_num_as_vec( ptr: *mut GList, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_full_num_as_vec( ptr: *mut GList, num: usize ) -> Vec<T, Global>

source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_num_as_vec( ptr: *mut GPtrArray, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_container_num_as_vec( ptr: *mut GPtrArray, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_full_num_as_vec( ptr: *mut GPtrArray, num: usize ) -> Vec<T, Global>

source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_num_as_vec( ptr: *mut GSList, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_container_num_as_vec( ptr: *mut GSList, num: usize ) -> Vec<T, Global>

source§

unsafe fn from_glib_full_num_as_vec( ptr: *mut GSList, num: usize ) -> Vec<T, Global>

source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_as_vec(ptr: *const GPtrArray) -> Vec<T, Global>

source§

unsafe fn from_glib_container_as_vec(_: *const GPtrArray) -> Vec<T, Global>

source§

unsafe fn from_glib_full_as_vec(_: *const GPtrArray) -> Vec<T, Global>

source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_as_vec(ptr: *mut GList) -> Vec<T, Global>

source§

unsafe fn from_glib_container_as_vec(ptr: *mut GList) -> Vec<T, Global>

source§

unsafe fn from_glib_full_as_vec(ptr: *mut GList) -> Vec<T, Global>

source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_as_vec(ptr: *mut GPtrArray) -> Vec<T, Global>

source§

unsafe fn from_glib_container_as_vec(ptr: *mut GPtrArray) -> Vec<T, Global>

source§

unsafe fn from_glib_full_as_vec(ptr: *mut GPtrArray) -> Vec<T, Global>

source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,

source§

unsafe fn from_glib_none_as_vec(ptr: *mut GSList) -> Vec<T, Global>

source§

unsafe fn from_glib_container_as_vec(ptr: *mut GSList) -> Vec<T, Global>

source§

unsafe fn from_glib_full_as_vec(ptr: *mut GSList) -> Vec<T, Global>

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<U> IsSubclassableExt for Uwhere U: IsClass + ParentClassIs,

source§

impl<T> ObjectExt for Twhere T: ObjectType,

source§

fn is<U>(&self) -> boolwhere U: StaticType,

Returns true if the object is an instance of (can be cast to) T.
source§

fn type_(&self) -> Type

Returns the type of the object.
source§

fn object_class(&self) -> &Class<Object>

Returns the ObjectClass of the object. Read more
source§

fn class(&self) -> &Class<T>where T: IsClass,

Returns the class of the object.
source§

fn class_of<U>(&self) -> Option<&Class<U>>where U: IsClass,

Returns the class of the object in the given type T. Read more
source§

fn interface<U>(&self) -> Option<InterfaceRef<'_, U>>where U: IsInterface,

Returns the interface T of the object. Read more
source§

fn try_set_property<V>( &self, property_name: &str, value: V ) -> Result<(), BoolError>where V: ToValue,

Similar to Self::set_property but fails instead of panicking.
source§

fn set_property<V>(&self, property_name: &str, value: V)where V: ToValue,

Sets the property property_name of the object to value value. Read more
source§

fn try_set_property_from_value( &self, property_name: &str, value: &Value ) -> Result<(), BoolError>

Similar to Self::set_property but fails instead of panicking.
source§

fn set_property_from_value(&self, property_name: &str, value: &Value)

Sets the property property_name of the object to value value. Read more
source§

fn try_set_properties( &self, property_values: &[(&str, &dyn ToValue)] ) -> Result<(), BoolError>

Similar to Self::set_properties but fails instead of panicking.
source§

fn set_properties(&self, property_values: &[(&str, &dyn ToValue)])

Sets multiple properties of the object at once. Read more
source§

fn try_set_properties_from_value( &self, property_values: &[(&str, Value)] ) -> Result<(), BoolError>

Similar to Self::set_properties_from_value but fails instead of panicking.
source§

fn set_properties_from_value(&self, property_values: &[(&str, Value)])

Sets multiple properties of the object at once. Read more
source§

fn try_property<V>(&self, property_name: &str) -> Result<V, BoolError>where V: for<'b> FromValue<'b> + 'static,

Similar to Self::property but fails instead of panicking.
source§

fn property<V>(&self, property_name: &str) -> Vwhere V: for<'b> FromValue<'b> + 'static,

Gets the property property_name of the object and cast it to the type V. Read more
source§

fn try_property_value(&self, property_name: &str) -> Result<Value, BoolError>

Similar to Self::property_value but fails instead of panicking.
source§

fn property_value(&self, property_name: &str) -> Value

Gets the property property_name of the object. Read more
source§

fn has_property(&self, property_name: &str, type_: Option<Type>) -> bool

Check if the object has a property property_name of the given type_. Read more
source§

fn property_type(&self, property_name: &str) -> Option<Type>

Get the type of the property property_name of this object. Read more
source§

fn find_property(&self, property_name: &str) -> Option<ParamSpec>

Get the ParamSpec of the property property_name of this object.
source§

fn list_properties(&self) -> PtrSlice<ParamSpec>

Return all ParamSpec of the properties of this object.
source§

fn freeze_notify(&self) -> PropertyNotificationFreezeGuard

Freeze all property notifications until the return guard object is dropped. Read more
source§

unsafe fn set_qdata<QD>(&self, key: Quark, value: QD)where QD: 'static,

Set arbitrary data on this object with the given key. Read more
source§

unsafe fn qdata<QD>(&self, key: Quark) -> Option<NonNull<QD>>where QD: 'static,

Return previously set arbitrary data of this object with the given key. Read more
source§

unsafe fn steal_qdata<QD>(&self, key: Quark) -> Option<QD>where QD: 'static,

Retrieve previously set arbitrary data of this object with the given key. Read more
source§

unsafe fn set_data<QD>(&self, key: &str, value: QD)where QD: 'static,

Set arbitrary data on this object with the given key. Read more
source§

unsafe fn data<QD>(&self, key: &str) -> Option<NonNull<QD>>where QD: 'static,

Return previously set arbitrary data of this object with the given key. Read more
source§

unsafe fn steal_data<QD>(&self, key: &str) -> Option<QD>where QD: 'static,

Retrieve previously set arbitrary data of this object with the given key. Read more
source§

fn block_signal(&self, handler_id: &SignalHandlerId)

Block a given signal handler. Read more
source§

fn unblock_signal(&self, handler_id: &SignalHandlerId)

Unblock a given signal handler.
source§

fn stop_signal_emission(&self, signal_id: SignalId, detail: Option<Quark>)

Stop emission of the currently emitted signal.
source§

fn stop_signal_emission_by_name(&self, signal_name: &str)

Stop emission of the currently emitted signal by the (possibly detailed) signal name.
source§

fn try_connect<F>( &self, signal_name: &str, after: bool, callback: F ) -> Result<SignalHandlerId, BoolError>where F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,

Similar to Self::connect but fails instead of panicking.
source§

fn connect<F>( &self, signal_name: &str, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,

Connect to the signal signal_name on this object. Read more
source§

fn try_connect_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> Result<SignalHandlerId, BoolError>where F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,

Similar to Self::connect_id but fails instead of panicking.
source§

fn connect_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,

Connect to the signal signal_id on this object. Read more
source§

fn try_connect_local<F>( &self, signal_name: &str, after: bool, callback: F ) -> Result<SignalHandlerId, BoolError>where F: Fn(&[Value]) -> Option<Value> + 'static,

Similar to Self::connect_local but fails instead of panicking.
source§

fn connect_local<F>( &self, signal_name: &str, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + 'static,

Connect to the signal signal_name on this object. Read more
source§

fn try_connect_local_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> Result<SignalHandlerId, BoolError>where F: Fn(&[Value]) -> Option<Value> + 'static,

Similar to Self::connect_local_id but fails instead of panicking.
source§

fn connect_local_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + 'static,

Connect to the signal signal_id on this object. Read more
source§

unsafe fn try_connect_unsafe<F>( &self, signal_name: &str, after: bool, callback: F ) -> Result<SignalHandlerId, BoolError>where F: Fn(&[Value]) -> Option<Value>,

Similar to Self::connect_unsafe but fails instead of panicking.
source§

unsafe fn connect_unsafe<F>( &self, signal_name: &str, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value>,

Connect to the signal signal_name on this object. Read more
source§

unsafe fn try_connect_unsafe_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> Result<SignalHandlerId, BoolError>where F: Fn(&[Value]) -> Option<Value>,

Similar to Self::connect_unsafe_id but fails instead of panicking.
source§

fn try_connect_closure( &self, signal_name: &str, after: bool, closure: RustClosure ) -> Result<SignalHandlerId, BoolError>

Similar to Self::connect_closure but fails instead of panicking.
source§

fn connect_closure( &self, signal_name: &str, after: bool, closure: RustClosure ) -> SignalHandlerId

Connect a closure to the signal signal_name on this object. Read more
source§

fn try_connect_closure_id( &self, signal_id: SignalId, details: Option<Quark>, after: bool, closure: RustClosure ) -> Result<SignalHandlerId, BoolError>

Similar to Self::connect_closure_id but fails instead of panicking.
source§

fn connect_closure_id( &self, signal_id: SignalId, details: Option<Quark>, after: bool, closure: RustClosure ) -> SignalHandlerId

Connect a closure to the signal signal_id on this object. Read more
source§

fn watch_closure(&self, closure: &impl AsRef<Closure>)

Limits the lifetime of closure to the lifetime of the object. When the object’s reference count drops to zero, the closure will be invalidated. An invalidated closure will ignore any calls to Closure::invoke.
source§

unsafe fn connect_unsafe_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value>,

Connect to the signal signal_id on this object. Read more
source§

fn try_emit<R>( &self, signal_id: SignalId, args: &[&dyn ToValue] ) -> Result<R, BoolError>where R: TryFromClosureReturnValue,

Similar to Self::emit but fails instead of panicking.
source§

fn emit<R>(&self, signal_id: SignalId, args: &[&dyn ToValue]) -> Rwhere R: TryFromClosureReturnValue,

Emit signal by signal id. Read more
source§

fn try_emit_with_values( &self, signal_id: SignalId, args: &[Value] ) -> Result<Option<Value>, BoolError>

Similar to Self::emit_with_values but fails instead of panicking.
source§

fn emit_with_values(&self, signal_id: SignalId, args: &[Value]) -> Option<Value>

Same as Self::emit but takes Value for the arguments.
source§

fn try_emit_by_name<R>( &self, signal_name: &str, args: &[&dyn ToValue] ) -> Result<R, BoolError>where R: TryFromClosureReturnValue,

Similar to Self::emit_by_name but fails instead of panicking.
source§

fn emit_by_name<R>(&self, signal_name: &str, args: &[&dyn ToValue]) -> Rwhere R: TryFromClosureReturnValue,

Emit signal by its name. Read more
source§

fn try_emit_by_name_with_values( &self, signal_name: &str, args: &[Value] ) -> Result<Option<Value>, BoolError>

Similar to Self::emit_by_name_with_values but fails instead of panicking.
source§

fn emit_by_name_with_values( &self, signal_name: &str, args: &[Value] ) -> Option<Value>

Emit signal by its name. Read more
source§

fn try_emit_by_name_with_details<R>( &self, signal_name: &str, details: Quark, args: &[&dyn ToValue] ) -> Result<R, BoolError>where R: TryFromClosureReturnValue,

Similar to Self::emit_by_name_with_details but fails instead of panicking.
source§

fn emit_by_name_with_details<R>( &self, signal_name: &str, details: Quark, args: &[&dyn ToValue] ) -> Rwhere R: TryFromClosureReturnValue,

Emit signal by its name with details. Read more
source§

fn try_emit_by_name_with_details_and_values( &self, signal_name: &str, details: Quark, args: &[Value] ) -> Result<Option<Value>, BoolError>

Similar to Self::emit_by_name_with_details_and_values but fails instead of panicking.
source§

fn emit_by_name_with_details_and_values( &self, signal_name: &str, details: Quark, args: &[Value] ) -> Option<Value>

Emit signal by its name with details. Read more
source§

fn try_emit_with_details<R>( &self, signal_id: SignalId, details: Quark, args: &[&dyn ToValue] ) -> Result<R, BoolError>where R: TryFromClosureReturnValue,

Similar to Self::emit_with_details but fails instead of panicking.
source§

fn emit_with_details<R>( &self, signal_id: SignalId, details: Quark, args: &[&dyn ToValue] ) -> Rwhere R: TryFromClosureReturnValue,

Emit signal by signal id with details. Read more
source§

fn try_emit_with_details_and_values( &self, signal_id: SignalId, details: Quark, args: &[Value] ) -> Result<Option<Value>, BoolError>

Similar to Self::emit_with_details_and_values but fails instead of panicking.
source§

fn emit_with_details_and_values( &self, signal_id: SignalId, details: Quark, args: &[Value] ) -> Option<Value>

Emit signal by signal id with details. Read more
source§

fn disconnect(&self, handler_id: SignalHandlerId)

Disconnect a previously connected signal handler.
source§

fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerIdwhere F: Fn(&T, &ParamSpec) + Send + Sync + 'static,

Connect to the notify signal of the object. Read more
source§

fn connect_notify_local<F>(&self, name: Option<&str>, f: F) -> SignalHandlerIdwhere F: Fn(&T, &ParamSpec) + 'static,

Connect to the notify signal of the object. Read more
source§

unsafe fn connect_notify_unsafe<F>( &self, name: Option<&str>, f: F ) -> SignalHandlerIdwhere F: Fn(&T, &ParamSpec),

Connect to the notify signal of the object. Read more
source§

fn notify(&self, property_name: &str)

Notify that the given property has changed its value. Read more
source§

fn notify_by_pspec(&self, pspec: &ParamSpec)

Notify that the given property has changed its value. Read more
source§

fn downgrade(&self) -> WeakRef<T>

Downgrade this object to a weak reference.
source§

fn bind_property<O, 'a>( &'a self, source_property: &'a str, target: &'a O, target_property: &'a str ) -> BindingBuilder<'a>where O: ObjectType,

Bind property source_property on this object to the target_property on the target object. Read more
source§

fn ref_count(&self) -> u32

Returns the strong reference count of this object.
source§

impl<T> StaticTypeExt for Twhere T: StaticType,

source§

fn ensure_type()

Ensures that the type has been registered with the type system.
source§

impl<T> ToClosureReturnValue for Twhere T: ToValue,

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T> TryFromClosureReturnValue for Twhere T: for<'a> FromValue<'a> + StaticType + 'static,

source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<Super, Sub> CanDowncast<Sub> for Superwhere Super: IsA<Super>, Sub: IsA<Super>,

source§

impl<'a, T, C> FromValueOptional<'a> for Twhere T: FromValue<'a, Checker = C>, C: ValueTypeChecker<Error = ValueTypeMismatchOrNoneError>,