gtk4

Struct Builder

Source
pub struct Builder { /* private fields */ }
Expand description

A Builder reads XML descriptions of a user interface and instantiates the described objects.

To create a Builder from a user interface description, call from_file(), from_resource() or from_string().

In the (unusual) case that you want to add user interface descriptions from multiple sources to the same Builder you can call new() to get an empty builder and populate it by (multiple) calls to add_from_file(), add_from_resource() or add_from_string().

A Builder holds a reference to all objects that it has constructed and drops these references when it is finalized. This finalization can cause the destruction of non-widget objects or widgets which are not contained in a toplevel window. For toplevel windows constructed by a builder, it is the responsibility of the user to call Gtk::Window::destroy() to get rid of them and all the widgets they contain.

The functions object() and objects() can be used to access the widgets in the interface by the names assigned to them inside the UI description. Toplevel windows returned by these functions will stay around until the user explicitly destroys them with Gtk::Window::destroy(). Other widgets will either be part of a larger hierarchy constructed by the builder (in which case you should not have to worry about their lifecycle), or without a parent, in which case they have to be added to some container to make use of them. Non-widget objects need to be reffed with g_object_ref() to keep them beyond the lifespan of the builder.

§GtkBuilder UI Definitions

Builder parses textual descriptions of user interfaces which are specified in XML format. We refer to these descriptions as “GtkBuilder UI definitions” or just “UI definitions” if the context is clear.

§Structure of UI definitions

UI definition files are always encoded in UTF-8.

The toplevel element is <interface>. It optionally takes a “domain” attribute, which will make the builder look for translated strings using dgettext() in the domain specified. This can also be done by calling set_translation_domain() on the builder. For example:

<?xml version="1.0" encoding="UTF-8">
<interface domain="your-app">
  ...
</interface>

§Requirements

The target toolkit version(s) are described by <requires> elements, the “lib” attribute specifies the widget library in question (currently the only supported value is “gtk”) and the “version” attribute specifies the target version in the form “<major>.<minor>”. Builder will error out if the version requirements are not met. For example:

<?xml version="1.0" encoding="UTF-8">
<interface domain="your-app">
  <requires lib="gtk" version="4.0" />
</interface>

§Objects

Objects are defined as children of the <interface> element.

Objects are described by <object> elements, which can contain <property> elements to set properties, <signal> elements which connect signals to handlers, and <child> elements, which describe child objects.

Typically, the specific kind of object represented by an <object> element is specified by the “class” attribute. If the type has not been loaded yet, GTK tries to find the get_type() function from the class name by applying heuristics. This works in most cases, but if necessary, it is possible to specify the name of the get_type() function explicitly with the “type-func” attribute. If your UI definition is referencing internal types, you should make sure to call g_type_ensure() for each object type before parsing the UI definition.

Objects may be given a name with the “id” attribute, which allows the application to retrieve them from the builder with object(). An id is also necessary to use the object as property value in other parts of the UI definition. GTK reserves ids starting and ending with ___ (three consecutive underscores) for its own purposes.

§Properties

Setting properties of objects is pretty straightforward with the <property> element: the “name” attribute specifies the name of the property, and the content of the element specifies the value:

<object class="GtkButton">
  <property name="label">Hello, world</property>
</object>

If the “translatable” attribute is set to a true value, GTK uses gettext() (or dgettext() if the builder has a translation domain set) to find a translation for the value. This happens before the value is parsed, so it can be used for properties of any type, but it is probably most useful for string properties. It is also possible to specify a context to disambiguate short strings, and comments which may help the translators:

<object class="GtkButton">
  <property name="label" translatable="yes" context="button">Hello, world</property>
</object>

Builder can parse textual representations for the most common property types:

  • characters
  • strings
  • integers
  • floating-point numbers
  • booleans (strings like “TRUE”, “t”, “yes”, “y”, “1” are interpreted as true values, strings like “FALSE”, “f”, “no”, “n”, “0” are interpreted as false values)
  • enumeration types (can be specified by their full C identifier their short name used when registering the enumeration type, or their integer value)
  • flag types (can be specified by their C identifier or short name, optionally combined with “|” for bitwise OR, or a single integer value e.g., “GTK_INPUT_HINT_EMOJI|GTK_INPUT_HINT_LOWERCASE”, or “emoji|lowercase” or 520).
  • colors (in a format understood by gdk::RGBA::parse())
  • GVariant (can be specified in the format understood by GLib::Variant::parse())
  • pixbufs (can be specified as an object id, a resource path or a filename of an image file to load relative to the Builder file or the CWD if add_from_string() was used)
  • GFile (like pixbufs, can be specified as an object id, a URI or a filename of a file to load relative to the Builder file or the CWD if add_from_string() was used)

Objects can be referred to by their name and by default refer to objects declared in the local XML fragment and objects exposed via expose_object(). In general, Builder allows forward references to objects declared in the local XML; an object doesn’t have to be constructed before it can be referred to. The exception to this rule is that an object has to be constructed before it can be used as the value of a construct-only property.

§Child objects

Many widgets have properties for child widgets, such as child. In this case, the preferred way to specify the child widget in a ui file is to simply set the property:

<object class="GtkExpander">
  <property name="child">
    <object class="GtkLabel">
    ...
    </object>
  </property>
</object>

Generic containers that can contain an arbitrary number of children, such as Box instead use the <child> element. A <child> element contains an <object> element which describes the child object. Most often, child objects are widgets inside a container, but they can also be, e.g., actions in an action group, or columns in a tree model.

Any object type that implements the Buildable interface can specify how children may be added to it. Since many objects and widgets that are included with GTK already implement the Buildable interface, typically child objects can be added using the <child> element without having to be concerned about the underlying implementation.

See the [Widget documentation](class.Widget.html#gtkwidget-as-gtkbuildable) for many examples of using Builder with widgets, including setting child objects using the <child> element.

A noteworthy special case to the general rule that only objects implementing Buildable may specify how to handle the <child> element is that Builder provides special support for adding objects to a Gio::ListStore by using the <child> element. For instance:

<object class="GListStore">
  <property name="item-type">MyObject</property>
  <child>
    <object class="MyObject" />
  </child>
  ...
</object>

§Property bindings

It is also possible to bind a property value to another object’s property value using the attributes “bind-source” to specify the source object of the binding, and optionally, “bind-property” and “bind-flags” to specify the source property and source binding flags respectively. Internally, Builder implements this using GObject::Binding objects.

For instance, in the example below the “label” property of the bottom_label widget is bound to the “label” property of the top_button widget:

<object class="GtkBox">
  <property name="orientation">vertical</property>
  <child>
    <object class="GtkButton" id="top_button">
      <property name="label">Hello, world</property>
    </object>
  </child>
  <child>
    <object class="GtkLabel" id="bottom_label">
      <property name="label"
                bind-source="top_button"
                bind-property="label"
                bind-flags="sync-create" />
    </object>
  </child>
</object>

For more information, see the documentation of the ObjectExt::bind_property() method.

Please note that another way to set up bindings between objects in .ui files is to use the Expression methodology. See the [Expression documentation](class.Expression.html#gtkexpression-in-ui-files) for more information.

§Internal children

Sometimes it is necessary to refer to widgets which have implicitly been constructed by GTK as part of a composite widget, to set properties on them or to add further children (e.g. the content area of a Dialog). This can be achieved by setting the “internal-child” property of the <child> element to a true value. Note that Builder still requires an <object> element for the internal child, even if it has already been constructed.

§Specialized children

A number of widgets have different places where a child can be added (e.g. tabs vs. page content in notebooks). This can be reflected in a UI definition by specifying the “type” attribute on a <child> The possible values for the “type” attribute are described in the sections describing the widget-specific portions of UI definitions.

§Signal handlers and function pointers

Signal handlers are set up with the <signal> element. The “name” attribute specifies the name of the signal, and the “handler” attribute specifies the function to connect to the signal.

<object class="GtkButton" id="hello_button">
  <signal name="clicked" handler="hello_button__clicked" />
</object>

The remaining attributes, “after”, “swapped” and “object”, have the same meaning as the corresponding parameters of the signal_connect_object() or signal_connect_data() functions:

  • “after” matches the G_CONNECT_AFTER flag, and will ensure that the handler is called after the default class closure for the signal
  • “swapped” matches the G_CONNECT_SWAPPED flag, and will swap the instance and closure arguments when invoking the signal handler
  • “object” will bind the signal handler to the lifetime of the object referenced by the attribute

By default “swapped” will be set to “yes” if not specified otherwise, in the case where “object” is set, for convenience. A “last_modification_time” attribute is also allowed, but it does not have a meaning to the builder.

When compiling applications for Windows, you must declare signal callbacks with the G_MODULE_EXPORT decorator, or they will not be put in the symbol table:

⚠️ The following code is in c ⚠️

G_MODULE_EXPORT void
hello_button__clicked (GtkButton *button,
                       gpointer data)
{
  // ...
}

On Linux and Unix, this is not necessary; applications should instead be compiled with the -Wl,--export-dynamic argument inside their compiler flags, and linked against gmodule-export-2.0.

§Example UI Definition

<interface>
  <object class="GtkDialog" id="dialog1">
    <child internal-child="content_area">
      <object class="GtkBox">
        <child internal-child="action_area">
          <object class="GtkBox">
            <child>
              <object class="GtkButton" id="ok_button">
                <property name="label" translatable="yes">_Ok</property>
                <property name="use-underline">True</property>
                <signal name="clicked" handler="ok_button_clicked"/>
              </object>
            </child>
          </object>
        </child>
      </object>
    </child>
  </object>
</interface>

§Using GtkBuildable for extending UI definitions

Objects can implement the Buildable interface to add custom elements and attributes to the XML. Typically, any extension will be documented in each type that implements the interface.

§Templates

When describing a Widget, you can use the <template> tag to describe a UI bound to a specific widget type. GTK will automatically load the UI definition when instantiating the type, and bind children and signal handlers to instance fields and function symbols.

For more information, see the [Widget documentation](class.Widget.html#building-composite-widgets-from-template-xml) for details.

§Properties

§current-object

The object the builder is evaluating for.

Readable | Writeable

§scope

The scope the builder is operating in

Readable | Writeable | Construct

§translation-domain

The translation domain used when translating property values that have been marked as translatable.

If the translation domain is None, Builder uses gettext(), otherwise g_dgettext().

Readable | Writeable

§Implements

[trait@glib::ObjectExt]

GLib type: GObject with reference counted clone semantics.

Implementations§

Source§

impl Builder

Source

pub fn new() -> Builder

Creates a new empty builder object.

This function is only useful if you intend to make multiple calls to add_from_file(), add_from_resource() or add_from_string() in order to merge multiple UI descriptions into a single builder.

§Returns

a new (empty) Builder object

Source

pub fn from_resource(resource_path: &str) -> Builder

Parses the UI definition at @resource_path.

If there is an error locating the resource or parsing the description, then the program will be aborted.

§resource_path

a GResource resource path

§Returns

a Builder containing the described interface

Source

pub fn from_string(string: &str) -> Builder

Parses the UI definition in @string.

If @string is None-terminated, then @length should be -1. If @length is not -1, then it is the length of @string.

If there is an error parsing @string then the program will be aborted. You should not attempt to parse user interface description from untrusted sources.

§string

a user interface (XML) description

§length

the length of @string, or -1

§Returns

a Builder containing the interface described by @string

Source

pub fn add_from_resource(&self, resource_path: &str) -> Result<(), Error>

Parses a resource file containing a UI definition and merges it with the current contents of @self.

This function is useful if you need to call set_current_object() to add user data to callbacks before loading GtkBuilder UI. Otherwise, you probably want from_resource() instead.

If an error occurs, 0 will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR, G_MARKUP_ERROR or G_RESOURCE_ERROR domain.

It’s not really reasonable to attempt to handle failures of this call. The only reasonable thing to do when an error is detected is to call g_error().

§resource_path

the path of the resource file to parse

§Returns

true on success, false if an error occurred

Source

pub fn add_from_string(&self, buffer: &str) -> Result<(), Error>

Parses a string containing a UI definition and merges it with the current contents of @self.

This function is useful if you need to call set_current_object() to add user data to callbacks before loading Builder UI. Otherwise, you probably want from_string() instead.

Upon errors false will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR, G_MARKUP_ERROR or G_VARIANT_PARSE_ERROR domain.

It’s not really reasonable to attempt to handle failures of this call. The only reasonable thing to do when an error is detected is to call g_error().

§buffer

the string to parse

§length

the length of @buffer (may be -1 if @buffer is nul-terminated)

§Returns

true on success, false if an error occurred

Source

pub fn add_objects_from_file( &self, filename: impl AsRef<Path>, object_ids: &[&str], ) -> Result<(), Error>

Parses a file containing a UI definition building only the requested objects and merges them with the current contents of @self.

Upon errors, 0 will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR, G_MARKUP_ERROR or G_FILE_ERROR domain.

If you are adding an object that depends on an object that is not its child (for instance a TreeView that depends on its TreeModel), you have to explicitly list all of them in @object_ids.

§filename

the name of the file to parse

§object_ids

nul-terminated array of objects to build

§Returns

true on success, false if an error occurred

Source

pub fn add_objects_from_resource( &self, resource_path: &str, object_ids: &[&str], ) -> Result<(), Error>

Parses a resource file containing a UI definition, building only the requested objects and merges them with the current contents of @self.

Upon errors, 0 will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR, G_MARKUP_ERROR or G_RESOURCE_ERROR domain.

If you are adding an object that depends on an object that is not its child (for instance a TreeView that depends on its TreeModel), you have to explicitly list all of them in @object_ids.

§resource_path

the path of the resource file to parse

§object_ids

nul-terminated array of objects to build

§Returns

true on success, false if an error occurred

Source

pub fn add_objects_from_string( &self, buffer: &str, object_ids: &[&str], ) -> Result<(), Error>

Parses a string containing a UI definition, building only the requested objects and merges them with the current contents of @self.

Upon errors false will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR or G_MARKUP_ERROR domain.

If you are adding an object that depends on an object that is not its child (for instance a TreeView that depends on its TreeModel), you have to explicitly list all of them in @object_ids.

§buffer

the string to parse

§length

the length of @buffer (may be -1 if @buffer is nul-terminated)

§object_ids

nul-terminated array of objects to build

§Returns

true on success, false if an error occurred

Source

pub fn create_closure( &self, function_name: &str, flags: BuilderClosureFlags, object: Option<&impl IsA<Object>>, ) -> Result<Option<Closure>, Error>

Creates a closure to invoke the function called @function_name.

This is using the create_closure() implementation of @self’s BuilderScope.

If no closure could be created, None will be returned and @error will be set.

§function_name

name of the function to look up

§flags

closure creation flags

§object

Object to create the closure with

§Returns

A new closure for invoking @function_name

Source

pub fn expose_object(&self, name: &str, object: &impl IsA<Object>)

Add @object to the @self object pool so it can be referenced just like any other object built by builder.

Only a single object may be added using @name. However, it is not an error to expose the same object under multiple names. gtk_builder_get_object() may be used to determine if an object has already been added with @name.

§name

the name of the object exposed to the builder

§object

the object to expose

Source

pub fn extend_with_template( &self, object: &impl IsA<Object>, template_type: Type, buffer: &str, ) -> Result<(), Error>

Main private entry point for building composite components from template XML.

Most likely you do not need to call this function in applications as templates are handled by Widget.

§object

the object that is being extended

§template_type

the type that the template is for

§buffer

the string to parse

§length

the length of @buffer (may be -1 if @buffer is nul-terminated)

§Returns

A positive value on success, 0 if an error occurred

Source

pub fn objects(&self) -> Vec<Object>

Gets all objects that have been constructed by @self.

Note that this function does not increment the reference counts of the returned objects.

§Returns

a newly-allocated GSList containing all the objects constructed by the GtkBuilder instance. It should be freed by g_slist_free()

Source

pub fn scope(&self) -> BuilderScope

Gets the scope in use that was set via gtk_builder_set_scope().

§Returns

the current scope

Source

pub fn translation_domain(&self) -> Option<GString>

Gets the translation domain of @self.

§Returns

the translation domain

Source

pub fn type_from_name(&self, type_name: &str) -> Type

Looks up a type by name.

This is using the virtual function that Builder has for that purpose. This is mainly used when implementing the Buildable interface on a type.

§type_name

type name to lookup

§Returns

the GType found for @type_name or G_TYPE_INVALID if no type was found

Source

pub fn set_current_object(&self, current_object: Option<&impl IsA<Object>>)

Sets the current object for the @self.

The current object can be thought of as the this object that the builder is working for and will often be used as the default object when an object is optional.

Gtk::Widget::init_template() for example will set the current object to the widget the template is inited for. For functions like from_resource(), the current object will be None.

§current_object

the new current object

Source

pub fn set_scope(&self, scope: Option<&impl IsA<BuilderScope>>)

Sets the scope the builder should operate in.

If @scope is None, a new Gtk::BuilderCScope will be created.

§scope

the scope to use

Source

pub fn set_translation_domain(&self, domain: Option<&str>)

Sets the translation domain of @self.

§domain

the translation domain

Source

pub fn value_from_string( &self, pspec: impl AsRef<ParamSpec>, string: &str, ) -> Result<Value, Error>

Demarshals a value from a string.

This function calls g_value_init() on the @value argument, so it need not be initialised beforehand.

Can handle char, uchar, boolean, int, uint, long, ulong, enum, flags, float, double, string, gdk::RGBA and Adjustment type values.

Upon errors false will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR domain.

§pspec

the GParamSpec for the property

§string

the string representation of the value

§Returns

true on success

§value

the GValue to store the result in

Source

pub fn value_from_string_type( &self, type_: Type, string: &str, ) -> Result<Value, Error>

Demarshals a value from a string.

Unlike value_from_string(), this function takes a GType instead of GParamSpec.

Calls g_value_init() on the @value argument, so it need not be initialised beforehand.

Upon errors false will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR domain.

§type_

the GType of the value

§string

the string representation of the value

§Returns

true on success

§value

the GValue to store the result in

Source

pub fn connect_current_object_notify<F: Fn(&Self) + 'static>( &self, f: F, ) -> SignalHandlerId

Source

pub fn connect_scope_notify<F: Fn(&Self) + 'static>( &self, f: F, ) -> SignalHandlerId

Source

pub fn connect_translation_domain_notify<F: Fn(&Self) + 'static>( &self, f: F, ) -> SignalHandlerId

Source§

impl Builder

Source

pub fn from_file(file_path: impl AsRef<Path>) -> Self

Parses the UI definition in the file @filename.

If there is an error opening the file or parsing the description then the program will be aborted. You should only ever attempt to parse user interface descriptions that are shipped as part of your program.

§filename

filename of user interface description file

§Returns

a Builder containing the described interface

Source

pub fn current_object(&self) -> Option<Object>

Gets the current object set via gtk_builder_set_current_object().

§Returns

the current object

Source

pub fn object<T: IsA<Object>>(&self, name: impl IntoGStr) -> Option<T>

Gets the object named @name.

Note that this function does not increment the reference count of the returned object.

§name

name of object to get

§Returns

the object named @name

Source

pub fn add_from_file(&self, file_path: impl AsRef<Path>) -> Result<(), Error>

Parses a file containing a UI definition and merges it with the current contents of @self.

This function is useful if you need to call set_current_object()) to add user data to callbacks before loading GtkBuilder UI. Otherwise, you probably want from_file() instead.

If an error occurs, 0 will be returned and @error will be assigned a GError from the GTK_BUILDER_ERROR, G_MARKUP_ERROR or G_FILE_ERROR domains.

It’s not really reasonable to attempt to handle failures of this call. You should not use this function with untrusted files (ie: files that are not part of your application). Broken Builder files can easily crash your program, and it’s possible that memory was leaked leading up to the reported failure. The only reasonable thing to do when an error is detected is to call g_error().

§filename

the name of the file to parse

§Returns

true on success, false if an error occurred

Trait Implementations§

Source§

impl Clone for Builder

Source§

fn clone(&self) -> Self

Makes a clone of this shared reference.

This increments the strong reference count of the object. Dropping the object will decrement it again.

1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Builder

Source§

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

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

impl Default for Builder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl HasParamSpec for Builder

Source§

type ParamSpec = ParamSpecObject

Source§

type SetValue = Builder

Preferred value to be used as setter for the associated ParamSpec.
Source§

type BuilderFn = fn(_: &str) -> ParamSpecObjectBuilder<'_, Builder>

Source§

fn param_spec_builder() -> Self::BuilderFn

Source§

impl Hash for Builder

Source§

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

Hashes the memory address of this object.

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 Ord for Builder

Source§

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

Comparison for two GObjects.

Compares the memory addresses of the provided objects.

1.21.0 · Source§

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

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

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

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

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

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

impl ParentClassIs for Builder

Source§

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

Source§

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

Equality for two GObjects.

Two GObjects are equal if their memory addresses are equal.

1.0.0 · Source§

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

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 Builder

Source§

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

Partial comparison for two GObjects.

Compares the memory addresses of the provided objects.

1.0.0 · Source§

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

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

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

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StaticType for Builder

Source§

fn static_type() -> Type

Returns the type identifier of Self.
Source§

impl Eq for Builder

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> Cast for T
where T: ObjectType,

Source§

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

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

fn upcast_ref<T>(&self) -> &T
where 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: MayDowncastTo<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: MayDowncastTo<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 upcast will do many checks at compile-time already. downcast will perform the same checks at runtime as dynamic_cast, but will also ensure some amount of compile-time safety. 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) -> T
where T: ObjectType,

Casts to T unconditionally. Read more
Source§

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

Casts to &T unconditionally. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for T

Source§

unsafe fn from_glib_none_as_vec(ptr: *const GList) -> Vec<T>

Source§

unsafe fn from_glib_container_as_vec(_: *const GList) -> Vec<T>

Source§

unsafe fn from_glib_full_as_vec(_: *const GList) -> Vec<T>

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for T

Source§

unsafe fn from_glib_none_as_vec(ptr: *const GSList) -> Vec<T>

Source§

unsafe fn from_glib_container_as_vec(_: *const GSList) -> Vec<T>

Source§

unsafe fn from_glib_full_as_vec(_: *const GSList) -> Vec<T>

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for T

Source§

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

Source§

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

Source§

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

Source§

impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for T

Source§

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

Source§

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

Source§

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

Source§

impl<O> GObjectPropertyExpressionExt for O
where O: IsA<Object>,

Source§

fn property_expression(&self, property_name: &str) -> PropertyExpression

Create an expression looking up an object’s property.
Source§

fn property_expression_weak(&self, property_name: &str) -> PropertyExpression

Create an expression looking up an object’s property with a weak reference.
Source§

fn this_expression(property_name: &str) -> PropertyExpression

Create an expression looking up a property in the bound this object.
Source§

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

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<T> IntoClosureReturnValue for T
where T: Into<Value>,

Source§

impl<U> IsSubclassableExt for U

Source§

impl<T> ObjectExt for T
where T: ObjectType,

Source§

fn is<U>(&self) -> bool
where 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 set_property(&self, property_name: &str, value: impl Into<Value>)

Sets the property property_name of the object to value value. Read more
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 set_properties(&self, property_values: &[(&str, &dyn ToValue)])

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

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

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

fn property<V>(&self, property_name: &str) -> V
where 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 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) -> bool

Check if the object has a property property_name.
Source§

fn has_property_with_type(&self, property_name: &str, type_: Type) -> bool

Check if the object has a property property_name of the given type_.
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 connect<F>( &self, signal_name: &str, after: bool, callback: F, ) -> SignalHandlerId
where F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,

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

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

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

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

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

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

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

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

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

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

Connect to the signal signal_id on this object. Read more
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 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 invoke_with_values, or invoke when using Rust closures.
Source§

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

Emit signal by signal id. Read more
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 emit_by_name<R>(&self, signal_name: &str, args: &[&dyn ToValue]) -> R

Emit signal by its name. Read more
Source§

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

Emit signal by its name. Read more
Source§

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

Emit signal by its name with details. Read more
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 emit_with_details<R>( &self, signal_id: SignalId, details: Quark, args: &[&dyn ToValue], ) -> R

Emit signal by signal id with details. Read more
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) -> SignalHandlerId
where 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) -> SignalHandlerId
where 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, ) -> SignalHandlerId
where 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 add_weak_ref_notify<F>(&self, f: F) -> WeakRefNotify<T>
where F: FnOnce() + Send + 'static,

Add a callback to be notified when the Object is disposed.
Source§

fn add_weak_ref_notify_local<F>(&self, f: F) -> WeakRefNotify<T>
where F: FnOnce() + 'static,

Add a callback to be notified when the Object is disposed. Read more
Source§

fn bind_property<'a, 'f, 't, O>( &'a self, source_property: &'a str, target: &'a O, target_property: &'a str, ) -> BindingBuilder<'a, 'f, 't>
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§

unsafe fn run_dispose(&self)

Runs the dispose mechanism of the object. Read more
Source§

impl<T> Property for T
where T: HasParamSpec,

Source§

type Value = T

Source§

impl<T> PropertyGet for T
where T: HasParamSpec,

Source§

type Value = T

Source§

fn get<R, F>(&self, f: F) -> R
where F: Fn(&<T as PropertyGet>::Value) -> R,

Source§

impl<T> StaticTypeExt for T
where T: StaticType,

Source§

fn ensure_type()

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

impl<T> ToOwned for T
where T: Clone,

Source§

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> TransparentType for T

Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<'a, T, C, E> FromValueOptional<'a> for T
where T: FromValue<'a, Checker = C>, C: ValueTypeChecker<Error = ValueTypeMismatchOrNoneError<E>>, E: Error + Send + 'static,

Source§

impl<Super, Sub> MayDowncastTo<Sub> for Super
where Super: IsA<Super>, Sub: IsA<Super>,