Struct gio::Application
source · #[repr(transparent)]pub struct Application { /* private fields */ }
Expand description
A Application
is the foundation of an application. It wraps some
low-level platform-specific services and is intended to act as the
foundation for higher-level application classes such as
GtkApplication
or MxApplication
. In general, you should not use
this class outside of a higher level framework.
GApplication provides convenient life cycle management by maintaining
a “use count” for the primary application instance. The use count can
be changed using ApplicationExtManual::hold()
and [ApplicationExtManual::release()
][crate::prelude::ApplicationExtManual::release()]. If
it drops to zero, the application exits. Higher-level classes such as
GtkApplication
employ the use count to ensure that the application
stays alive as long as it has any opened windows.
Another feature that GApplication (optionally) provides is process uniqueness. Applications can make use of this functionality by providing a unique application ID. If given, only one application with this ID can be running at a time per session. The session concept is platform-dependent, but corresponds roughly to a graphical desktop login. When your application is launched again, its arguments are passed through platform communication to the already running program. The already running instance of the program is called the “primary instance”; for non-unique applications this is always the current instance. On Linux, the D-Bus session bus is used for communication.
The use of Application
differs from some other commonly-used
uniqueness libraries (such as libunique) in important ways. The
application is not expected to manually register itself and check
if it is the primary instance. Instead, the main()
function of a
Application
should do very little more than instantiating the
application instance, possibly connecting signal handlers, then
calling ApplicationExtManual::run()
. All checks for uniqueness are done
internally. If the application is the primary instance then the
startup signal is emitted and the mainloop runs. If the application
is not the primary instance then a signal is sent to the primary
instance and ApplicationExtManual::run()
promptly returns. See the code
examples below.
If used, the expected form of an application identifier is the same as
that of of a
D-Bus well-known bus name.
Examples include: com.example.MyApp
, org.example.internal_apps.Calculator
,
org._7_zip.Archiver
.
For details on valid application identifiers, see id_is_valid()
.
On Linux, the application identifier is claimed as a well-known bus name
on the user’s session bus. This means that the uniqueness of your
application is scoped to the current session. It also means that your
application may provide additional services (through registration of other
object paths) at that bus name. The registration of these object paths
should be done with the shared GDBus session bus. Note that due to the
internal architecture of GDBus, method calls can be dispatched at any time
(even if a main loop is not running). For this reason, you must ensure that
any object paths that you wish to register are registered before Application
attempts to acquire the bus name of your application (which happens in
ApplicationExt::register()
). Unfortunately, this means that you cannot use
ApplicationExt::is_remote()
to decide if you want to register object paths.
GApplication also implements the ActionGroup
and ActionMap
interfaces and lets you easily export actions by adding them with
ActionMapExt::add_action()
. When invoking an action by calling
ActionGroupExt::activate_action()
on the application, it is always
invoked in the primary instance. The actions are also exported on
the session bus, and GIO provides the DBusActionGroup
wrapper to
conveniently access them remotely. GIO provides a DBusMenuModel
wrapper
for remote access to exported GMenuModels
.
There is a number of different entry points into a GApplication:
-
via ‘Activate’ (i.e. just starting the application)
-
via ‘Open’ (i.e. opening some files)
-
by handling a command-line
-
via activating an action
The startup
signal lets you handle the application
initialization for all of these in a single place.
Regardless of which of these entry points is used to start the
application, GApplication passes some ‘platform data’ from the
launching instance to the primary instance, in the form of a
glib::Variant
dictionary mapping strings to variants. To use platform
data, override the before_emit
or after_emit
virtual functions
in your Application
subclass. When dealing with
ApplicationCommandLine
objects, the platform data is
directly available via ApplicationCommandLineExt::cwd()
,
ApplicationCommandLineExt::environ()
and
ApplicationCommandLineExt::platform_data()
.
As the name indicates, the platform data may vary depending on the
operating system, but it always includes the current directory (key
“cwd”), and optionally the environment (ie the set of environment
variables and their values) of the calling process (key “environ”).
The environment is only added to the platform data if the
ApplicationFlags::SEND_ENVIRONMENT
flag is set. Application
subclasses
can add their own platform data by overriding the add_platform_data
virtual function. For instance, GtkApplication
adds startup notification
data in this way.
To parse commandline arguments you may handle the
command-line
signal or override the local_command_line()
vfunc, to parse them in either the primary instance or the local instance,
respectively.
For an example of opening files with a GApplication, see gapplication-example-open.c.
For an example of using actions with GApplication, see gapplication-example-actions.c.
For an example of using extra D-Bus hooks with GApplication, see gapplication-example-dbushooks.c.
Properties
action-group
Writeable
application-id
Readable | Writeable | Construct
flags
Readable | Writeable
inactivity-timeout
Readable | Writeable
is-busy
Whether the application is currently marked as busy through
ApplicationExtManual::mark_busy()
or ApplicationExt::bind_busy_property()
.
Readable
is-registered
Readable
is-remote
Readable
resource-base-path
Readable | Writeable
Signals
activate
The ::activate signal is emitted on the primary instance when an
activation occurs. See ApplicationExt::activate()
.
command-line
The ::command-line signal is emitted on the primary instance when
a commandline is not handled locally. See ApplicationExtManual::run()
and
the ApplicationCommandLine
documentation for more information.
handle-local-options
The ::handle-local-options signal is emitted on the local instance after the parsing of the commandline options has occurred.
You can add options to be recognised during commandline option
parsing using g_application_add_main_option_entries()
and
g_application_add_option_group()
.
Signal handlers can inspect options
(along with values pointed to
from the arg_data
of an installed GOptionEntrys
) in order to
decide to perform certain actions, including direct local handling
(which may be useful for options like –version).
In the event that the application is marked
ApplicationFlags::HANDLES_COMMAND_LINE
the “normal processing” will
send the options
dictionary to the primary instance where it can be
read with ApplicationCommandLineExt::options_dict()
. The signal
handler can modify the dictionary before returning, and the
modified dictionary will be sent.
In the event that ApplicationFlags::HANDLES_COMMAND_LINE
is not set,
“normal processing” will treat the remaining uncollected command
line arguments as filenames or URIs. If there are no arguments,
the application is activated by ApplicationExt::activate()
. One or
more arguments results in a call to ApplicationExt::open()
.
If you want to handle the local commandline arguments for yourself
by converting them to calls to ApplicationExt::open()
or
ActionGroupExt::activate_action()
then you must be sure to register
the application first. You should probably not call
ApplicationExt::activate()
for yourself, however: just return -1 and
allow the default handler to do it for you. This will ensure that
the --gapplication-service
switch works properly (i.e. no activation
in that case).
Note that this signal is emitted from the default implementation of
local_command_line()
. If you override that function and don’t
chain up then this signal will never be emitted.
You can override local_command_line()
if you need more powerful
capabilities than what is provided here, but this should not
normally be required.
name-lost
The ::name-lost signal is emitted only on the registered primary instance
when a new instance has taken over. This can only happen if the application
is using the ApplicationFlags::ALLOW_REPLACEMENT
flag.
The default handler for this signal calls ApplicationExt::quit()
.
open
The ::open signal is emitted on the primary instance when there are
files to open. See ApplicationExt::open()
for more information.
shutdown
The ::shutdown signal is emitted only on the registered primary instance immediately after the main loop terminates.
startup
The ::startup signal is emitted on the primary instance immediately
after registration. See ApplicationExt::register()
.
ActionGroup
action-added
Signals that a new action was just added to the group. This signal is emitted after the action has been added and is now visible.
Detailed
action-enabled-changed
Signals that the enabled status of the named action has changed.
Detailed
action-removed
Signals that an action is just about to be removed from the group. This signal is emitted before the action is removed, so the action is still visible and can be queried from the signal handler.
Detailed
action-state-changed
Signals that the state of the named action has changed.
Detailed
Implements
ApplicationExt
, glib::ObjectExt
, ActionGroupExt
, ActionMapExt
, ApplicationExtManual
, ActionMapExtManual
Implementations§
source§impl Application
impl Application
pub const NONE: Option<&'static Application> = None
sourcepub fn new(application_id: Option<&str>, flags: ApplicationFlags) -> Application
pub fn new(application_id: Option<&str>, flags: ApplicationFlags) -> Application
Creates a new Application
instance.
If non-None
, the application id must be valid. See
id_is_valid()
.
If no application ID is given then some features of Application
(most notably application uniqueness) will be disabled.
application_id
the application id
flags
the application flags
Returns
a new Application
instance
sourcepub fn builder() -> ApplicationBuilder
pub fn builder() -> ApplicationBuilder
Creates a new builder-pattern struct instance to construct Application
objects.
This method returns an instance of ApplicationBuilder
which can be used to create Application
objects.
sourcepub fn default() -> Option<Application>
pub fn default() -> Option<Application>
Returns the default Application
instance for this process.
Normally there is only one Application
per process and it becomes
the default when it is created. You can exercise more control over
this by using ApplicationExt::set_default()
.
If there is no default application then None
is returned.
Returns
the default application for this process, or None
sourcepub fn id_is_valid(application_id: &str) -> bool
pub fn id_is_valid(application_id: &str) -> bool
Checks if application_id
is a valid application identifier.
A valid ID is required for calls to new()
and
ApplicationExt::set_application_id()
.
Application identifiers follow the same format as D-Bus well-known bus names. For convenience, the restrictions on application identifiers are reproduced here:
-
Application identifiers are composed of 1 or more elements separated by a period (
.
) character. All elements must contain at least one character. -
Each element must only contain the ASCII characters
[A-Z][a-z][0-9]_-
, with-
discouraged in new application identifiers. Each element must not begin with a digit. -
Application identifiers must contain at least one
.
(period) character (and thus at least two elements). -
Application identifiers must not begin with a
.
(period) character. -
Application identifiers must not exceed 255 characters.
Note that the hyphen (-
) character is allowed in application identifiers,
but is problematic or not allowed in various specifications and APIs that
refer to D-Bus, such as
Flatpak application IDs,
the
DBusActivatable
interface in the Desktop Entry Specification,
and the convention that an application’s “main” interface and object path
resemble its application identifier and bus name. To avoid situations that
require special-case handling, it is recommended that new application
identifiers consistently replace hyphens with underscores.
Like D-Bus interface names, application identifiers should start with the reversed DNS domain name of the author of the interface (in lower-case), and it is conventional for the rest of the application identifier to consist of words run together, with initial capital letters.
As with D-Bus interface names, if the author’s DNS domain name contains
hyphen/minus characters they should be replaced by underscores, and if it
contains leading digits they should be escaped by prepending an underscore.
For example, if the owner of 7-zip.org used an application identifier for an
archiving application, it might be named org._7_zip.Archiver
.
application_id
a potential application identifier
Returns
true
if application_id
is valid
Trait Implementations§
source§impl Clone for Application
impl Clone for Application
source§impl Debug for Application
impl Debug for Application
source§impl Default for Application
impl Default for Application
source§impl Display for Application
impl Display for Application
source§impl HasParamSpec for Application
impl HasParamSpec for Application
type ParamSpec = ParamSpecObject
§type SetValue = Application
type SetValue = Application
type BuilderFn = fn(_: &str) -> ParamSpecObjectBuilder<'_, Application>
fn param_spec_builder() -> Self::BuilderFn
source§impl Hash for Application
impl Hash for Application
source§impl<T: ApplicationImpl> IsSubclassable<T> for Application
impl<T: ApplicationImpl> IsSubclassable<T> for Application
source§fn class_init(class: &mut Class<Self>)
fn class_init(class: &mut Class<Self>)
source§fn instance_init(instance: &mut InitializingObject<T>)
fn instance_init(instance: &mut InitializingObject<T>)
source§impl Ord for Application
impl Ord for Application
source§impl ParentClassIs for Application
impl ParentClassIs for Application
source§impl<OT: ObjectType> PartialEq<OT> for Application
impl<OT: ObjectType> PartialEq<OT> for Application
source§impl<OT: ObjectType> PartialOrd<OT> for Application
impl<OT: ObjectType> PartialOrd<OT> for Application
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresource§impl StaticType for Application
impl StaticType for Application
source§fn static_type() -> Type
fn static_type() -> Type
Self
.impl Eq for Application
impl IsA<ActionGroup> for Application
impl IsA<ActionMap> for Application
Auto Trait Implementations§
impl RefUnwindSafe for Application
impl !Send for Application
impl !Sync for Application
impl Unpin for Application
impl UnwindSafe for Application
Blanket Implementations§
source§impl<O> ActionGroupExt for Owhere
O: IsA<ActionGroup>,
impl<O> ActionGroupExt for Owhere O: IsA<ActionGroup>,
source§fn action_added(&self, action_name: &str)
fn action_added(&self, action_name: &str)
source§fn action_enabled_changed(&self, action_name: &str, enabled: bool)
fn action_enabled_changed(&self, action_name: &str, enabled: bool)
source§fn action_removed(&self, action_name: &str)
fn action_removed(&self, action_name: &str)
source§fn action_state_changed(&self, action_name: &str, state: &Variant)
fn action_state_changed(&self, action_name: &str, state: &Variant)
source§fn activate_action(&self, action_name: &str, parameter: Option<&Variant>)
fn activate_action(&self, action_name: &str, parameter: Option<&Variant>)
self
. Read moresource§fn change_action_state(&self, action_name: &str, value: &Variant)
fn change_action_state(&self, action_name: &str, value: &Variant)
source§fn is_action_enabled(&self, action_name: &str) -> bool
fn is_action_enabled(&self, action_name: &str) -> bool
self
is currently enabled. Read moresource§fn action_parameter_type(&self, action_name: &str) -> Option<VariantType>
fn action_parameter_type(&self, action_name: &str) -> Option<VariantType>
self
. Read moresource§fn action_state(&self, action_name: &str) -> Option<Variant>
fn action_state(&self, action_name: &str) -> Option<Variant>
self
. Read moresource§fn action_state_hint(&self, action_name: &str) -> Option<Variant>
fn action_state_hint(&self, action_name: &str) -> Option<Variant>
self
. Read moresource§fn action_state_type(&self, action_name: &str) -> Option<VariantType>
fn action_state_type(&self, action_name: &str) -> Option<VariantType>
self
. Read moresource§fn has_action(&self, action_name: &str) -> bool
fn has_action(&self, action_name: &str) -> bool
self
. Read moresource§fn list_actions(&self) -> Vec<GString, Global>
fn list_actions(&self) -> Vec<GString, Global>
self
. Read moresource§fn connect_action_added<F>(&self, detail: Option<&str>, f: F) -> SignalHandlerIdwhere
F: Fn(&O, &str) + 'static,
fn connect_action_added<F>(&self, detail: Option<&str>, f: F) -> SignalHandlerIdwhere F: Fn(&O, &str) + 'static,
source§fn connect_action_enabled_changed<F>(
&self,
detail: Option<&str>,
f: F
) -> SignalHandlerIdwhere
F: Fn(&O, &str, bool) + 'static,
fn connect_action_enabled_changed<F>( &self, detail: Option<&str>, f: F ) -> SignalHandlerIdwhere F: Fn(&O, &str, bool) + 'static,
source§fn connect_action_removed<F>(
&self,
detail: Option<&str>,
f: F
) -> SignalHandlerIdwhere
F: Fn(&O, &str) + 'static,
fn connect_action_removed<F>( &self, detail: Option<&str>, f: F ) -> SignalHandlerIdwhere F: Fn(&O, &str) + 'static,
source§impl<O> ActionMapExt for Owhere
O: IsA<ActionMap>,
impl<O> ActionMapExt for Owhere O: IsA<ActionMap>,
source§impl<O> ActionMapExtManual for Owhere
O: IsA<ActionMap>,
impl<O> ActionMapExtManual for Owhere O: IsA<ActionMap>,
source§fn add_action_entries(&self, entries: impl IntoIterator<Item = ActionEntry<O>>)
fn add_action_entries(&self, entries: impl IntoIterator<Item = ActionEntry<O>>)
SimpleAction
instances
and adding them to a ActionMap
. Read moresource§impl<O> ApplicationExt for Owhere
O: IsA<Application>,
impl<O> ApplicationExt for Owhere O: IsA<Application>,
source§fn add_main_option(
&self,
long_name: &str,
short_name: Char,
flags: OptionFlags,
arg: OptionArg,
description: &str,
arg_description: Option<&str>
)
fn add_main_option( &self, long_name: &str, short_name: Char, flags: OptionFlags, arg: OptionArg, description: &str, arg_description: Option<&str> )
self
. Read moresource§fn bind_busy_property(&self, object: &impl IsA<Object>, property: &str)
fn bind_busy_property(&self, object: &impl IsA<Object>, property: &str)
self
as busy (see ApplicationExtManual::mark_busy()
) while
property
on object
is true
. Read moresource§fn dbus_connection(&self) -> Option<DBusConnection>
fn dbus_connection(&self) -> Option<DBusConnection>
source§fn dbus_object_path(&self) -> Option<GString>
fn dbus_object_path(&self) -> Option<GString>
source§fn flags(&self) -> ApplicationFlags
fn flags(&self) -> ApplicationFlags
self
. Read moresource§fn inactivity_timeout(&self) -> u32
fn inactivity_timeout(&self) -> u32
source§fn is_busy(&self) -> bool
fn is_busy(&self) -> bool
ApplicationExtManual::mark_busy()
or bind_busy_property()
. Read moresource§fn is_registered(&self) -> bool
fn is_registered(&self) -> bool
self
is registered. Read moresource§fn resource_base_path(&self) -> Option<GString>
fn resource_base_path(&self) -> Option<GString>
self
. Read moresource§fn register(
&self,
cancellable: Option<&impl IsA<Cancellable>>
) -> Result<(), Error>
fn register( &self, cancellable: Option<&impl IsA<Cancellable>> ) -> Result<(), Error>
source§fn send_notification(&self, id: Option<&str>, notification: &Notification)
fn send_notification(&self, id: Option<&str>, notification: &Notification)
self
to the desktop shell.
There is no guarantee that the notification is displayed immediately,
or even at all. Read moresource§fn set_application_id(&self, application_id: Option<&str>)
fn set_application_id(&self, application_id: Option<&str>)
self
. Read moresource§fn set_default(&self)
fn set_default(&self)
Application::default()
. Read moresource§fn set_flags(&self, flags: ApplicationFlags)
fn set_flags(&self, flags: ApplicationFlags)
self
. Read moresource§fn set_inactivity_timeout(&self, inactivity_timeout: u32)
fn set_inactivity_timeout(&self, inactivity_timeout: u32)
source§fn set_option_context_description(&self, description: Option<&str>)
fn set_option_context_description(&self, description: Option<&str>)
self
option context. Read moresource§fn set_option_context_parameter_string(&self, parameter_string: Option<&str>)
fn set_option_context_parameter_string(&self, parameter_string: Option<&str>)
self
. Read moresource§fn set_option_context_summary(&self, summary: Option<&str>)
fn set_option_context_summary(&self, summary: Option<&str>)
self
option context. Read moresource§fn set_resource_base_path(&self, resource_path: Option<&str>)
fn set_resource_base_path(&self, resource_path: Option<&str>)
self
. Read moresource§fn unbind_busy_property(&self, object: &impl IsA<Object>, property: &str)
fn unbind_busy_property(&self, object: &impl IsA<Object>, property: &str)
property
and the busy state of
self
that was previously created with
bind_busy_property()
. Read moresource§fn withdraw_notification(&self, id: &str)
fn withdraw_notification(&self, id: &str)
send_notification()
. Read morefn set_action_group<P>(&self, action_group: Option<&P>)where P: IsA<ActionGroup>,
source§fn connect_activate<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O) + 'static,
fn connect_activate<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
activate()
.source§fn connect_command_line<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O, &ApplicationCommandLine) -> i32 + 'static,
fn connect_command_line<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O, &ApplicationCommandLine) -> i32 + 'static,
ApplicationExtManual::run()
and
the ApplicationCommandLine
documentation for more information. Read moresource§fn connect_handle_local_options<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O, &VariantDict) -> i32 + 'static,
fn connect_handle_local_options<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O, &VariantDict) -> i32 + 'static,
source§fn connect_name_lost<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O) -> bool + 'static,
fn connect_name_lost<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) -> bool + 'static,
v2_60
only.ApplicationFlags::ALLOW_REPLACEMENT
flag. Read moresource§fn connect_shutdown<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O) + 'static,
fn connect_shutdown<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
source§fn connect_startup<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O) + 'static,
fn connect_startup<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
register()
.fn connect_action_group_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_application_id_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_flags_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_inactivity_timeout_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_is_busy_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_is_registered_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_is_remote_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
fn connect_resource_base_path_notify<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O) + 'static,
source§impl<O> ApplicationExtManual for Owhere
O: IsA<Application>,
impl<O> ApplicationExtManual for Owhere O: IsA<Application>,
fn run_with_args<S>(&self, args: &[S]) -> ExitCodewhere S: AsRef<str>,
source§fn connect_open<F>(&self, f: F) -> SignalHandlerIdwhere
F: Fn(&O, &[File], &str) + 'static,
fn connect_open<F>(&self, f: F) -> SignalHandlerIdwhere F: Fn(&O, &[File], &str) + 'static,
ApplicationExt::open()
for more information. Read moresource§fn hold(&self) -> ApplicationHoldGuard
fn hold(&self) -> ApplicationHoldGuard
self
. Read moresource§fn mark_busy(&self) -> ApplicationBusyGuard
fn mark_busy(&self) -> ApplicationBusyGuard
self
. Read moresource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Cast for Twhere
T: ObjectType,
impl<T> Cast for Twhere T: ObjectType,
source§fn upcast<T>(self) -> Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast<T>(self) -> Twhere T: ObjectType, Self: IsA<T>,
T
. Read moresource§fn upcast_ref<T>(&self) -> &Twhere
T: ObjectType,
Self: IsA<T>,
fn upcast_ref<T>(&self) -> &Twhere T: ObjectType, Self: IsA<T>,
T
. Read moresource§fn downcast<T>(self) -> Result<T, Self>where
T: ObjectType,
Self: CanDowncast<T>,
fn downcast<T>(self) -> Result<T, Self>where T: ObjectType, Self: CanDowncast<T>,
T
. Read moresource§fn downcast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
Self: CanDowncast<T>,
fn downcast_ref<T>(&self) -> Option<&T>where T: ObjectType, Self: CanDowncast<T>,
T
. Read moresource§fn dynamic_cast<T>(self) -> Result<T, Self>where
T: ObjectType,
fn dynamic_cast<T>(self) -> Result<T, Self>where T: ObjectType,
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 moresource§fn dynamic_cast_ref<T>(&self) -> Option<&T>where
T: ObjectType,
fn dynamic_cast_ref<T>(&self) -> Option<&T>where T: ObjectType,
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 moresource§unsafe fn unsafe_cast<T>(self) -> Twhere
T: ObjectType,
unsafe fn unsafe_cast<T>(self) -> Twhere T: ObjectType,
T
unconditionally. Read moresource§unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere
T: ObjectType,
unsafe fn unsafe_cast_ref<T>(&self) -> &Twhere T: ObjectType,
&T
unconditionally. Read moresource§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
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>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
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>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *const GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
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>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GPtrArray> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere
T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
impl<T> FromGlibPtrArrayContainerAsVec<<T as GlibPtrDefault>::GlibType, *mut GSList> for Twhere T: GlibPtrDefault + FromGlibPtrNone<<T as GlibPtrDefault>::GlibType> + FromGlibPtrFull<<T as GlibPtrDefault>::GlibType>,
source§impl<T> IntoClosureReturnValue for Twhere
T: Into<Value>,
impl<T> IntoClosureReturnValue for Twhere T: Into<Value>,
fn into_closure_return_value(self) -> Option<Value>
source§impl<U> IsSubclassableExt for Uwhere
U: IsClass + ParentClassIs,
impl<U> IsSubclassableExt for Uwhere U: IsClass + ParentClassIs,
fn parent_class_init<T>(class: &mut Class<U>)where T: ObjectSubclass, <U as ParentClassIs>::Parent: IsSubclassable<T>,
fn parent_instance_init<T>(instance: &mut InitializingObject<T>)where T: ObjectSubclass, <U as ParentClassIs>::Parent: IsSubclassable<T>,
source§impl<T> ObjectExt for Twhere
T: ObjectType,
impl<T> ObjectExt for Twhere T: ObjectType,
source§fn is<U>(&self) -> boolwhere
U: StaticType,
fn is<U>(&self) -> boolwhere U: StaticType,
true
if the object is an instance of (can be cast to) T
.source§fn object_class(&self) -> &Class<Object>
fn object_class(&self) -> &Class<Object>
ObjectClass
of the object. Read moresource§fn class_of<U>(&self) -> Option<&Class<U>>where
U: IsClass,
fn class_of<U>(&self) -> Option<&Class<U>>where U: IsClass,
T
. Read moresource§fn interface<U>(&self) -> Option<InterfaceRef<'_, U>>where
U: IsInterface,
fn interface<U>(&self) -> Option<InterfaceRef<'_, U>>where U: IsInterface,
T
of the object. Read moresource§fn set_property_from_value(&self, property_name: &str, value: &Value)
fn set_property_from_value(&self, property_name: &str, value: &Value)
source§fn set_properties(&self, property_values: &[(&str, &dyn ToValue)])
fn set_properties(&self, property_values: &[(&str, &dyn ToValue)])
source§fn set_properties_from_value(&self, property_values: &[(&str, Value)])
fn set_properties_from_value(&self, property_values: &[(&str, Value)])
source§fn property<V>(&self, property_name: &str) -> Vwhere
V: for<'b> FromValue<'b> + 'static,
fn property<V>(&self, property_name: &str) -> Vwhere V: for<'b> FromValue<'b> + 'static,
property_name
of the object and cast it to the type V. Read moresource§fn property_value(&self, property_name: &str) -> Value
fn property_value(&self, property_name: &str) -> Value
property_name
of the object. Read moresource§fn property_type(&self, property_name: &str) -> Option<Type>
fn property_type(&self, property_name: &str) -> Option<Type>
property_name
of this object. Read moresource§fn find_property(&self, property_name: &str) -> Option<ParamSpec>
fn find_property(&self, property_name: &str) -> Option<ParamSpec>
ParamSpec
of the property property_name
of this object.source§fn list_properties(&self) -> PtrSlice<ParamSpec>
fn list_properties(&self) -> PtrSlice<ParamSpec>
ParamSpec
of the properties of this object.source§fn freeze_notify(&self) -> PropertyNotificationFreezeGuard
fn freeze_notify(&self) -> PropertyNotificationFreezeGuard
source§unsafe fn set_qdata<QD>(&self, key: Quark, value: QD)where
QD: 'static,
unsafe fn set_qdata<QD>(&self, key: Quark, value: QD)where QD: 'static,
key
. Read moresource§unsafe fn qdata<QD>(&self, key: Quark) -> Option<NonNull<QD>>where
QD: 'static,
unsafe fn qdata<QD>(&self, key: Quark) -> Option<NonNull<QD>>where QD: 'static,
key
. Read moresource§unsafe fn steal_qdata<QD>(&self, key: Quark) -> Option<QD>where
QD: 'static,
unsafe fn steal_qdata<QD>(&self, key: Quark) -> Option<QD>where QD: 'static,
key
. Read moresource§unsafe fn set_data<QD>(&self, key: &str, value: QD)where
QD: 'static,
unsafe fn set_data<QD>(&self, key: &str, value: QD)where QD: 'static,
key
. Read moresource§unsafe fn data<QD>(&self, key: &str) -> Option<NonNull<QD>>where
QD: 'static,
unsafe fn data<QD>(&self, key: &str) -> Option<NonNull<QD>>where QD: 'static,
key
. Read moresource§unsafe fn steal_data<QD>(&self, key: &str) -> Option<QD>where
QD: 'static,
unsafe fn steal_data<QD>(&self, key: &str) -> Option<QD>where QD: 'static,
key
. Read moresource§fn block_signal(&self, handler_id: &SignalHandlerId)
fn block_signal(&self, handler_id: &SignalHandlerId)
source§fn unblock_signal(&self, handler_id: &SignalHandlerId)
fn unblock_signal(&self, handler_id: &SignalHandlerId)
source§fn stop_signal_emission(&self, signal_id: SignalId, detail: Option<Quark>)
fn stop_signal_emission(&self, signal_id: SignalId, detail: Option<Quark>)
source§fn stop_signal_emission_by_name(&self, signal_name: &str)
fn stop_signal_emission_by_name(&self, signal_name: &str)
source§fn connect<F>(
&self,
signal_name: &str,
after: bool,
callback: F
) -> SignalHandlerIdwhere
F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
fn connect<F>( &self, signal_name: &str, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
signal_name
on this object. Read moresource§fn connect_id<F>(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
callback: F
) -> SignalHandlerIdwhere
F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
fn connect_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
signal_id
on this object. Read moresource§fn connect_local<F>(
&self,
signal_name: &str,
after: bool,
callback: F
) -> SignalHandlerIdwhere
F: Fn(&[Value]) -> Option<Value> + 'static,
fn connect_local<F>( &self, signal_name: &str, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + 'static,
signal_name
on this object. Read moresource§fn connect_local_id<F>(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
callback: F
) -> SignalHandlerIdwhere
F: Fn(&[Value]) -> Option<Value> + 'static,
fn connect_local_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value> + 'static,
signal_id
on this object. Read moresource§unsafe fn connect_unsafe<F>(
&self,
signal_name: &str,
after: bool,
callback: F
) -> SignalHandlerIdwhere
F: Fn(&[Value]) -> Option<Value>,
unsafe fn connect_unsafe<F>( &self, signal_name: &str, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value>,
signal_name
on this object. Read moresource§unsafe fn connect_unsafe_id<F>(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
callback: F
) -> SignalHandlerIdwhere
F: Fn(&[Value]) -> Option<Value>,
unsafe fn connect_unsafe_id<F>( &self, signal_id: SignalId, details: Option<Quark>, after: bool, callback: F ) -> SignalHandlerIdwhere F: Fn(&[Value]) -> Option<Value>,
signal_id
on this object. Read moresource§fn connect_closure(
&self,
signal_name: &str,
after: bool,
closure: RustClosure
) -> SignalHandlerId
fn connect_closure( &self, signal_name: &str, after: bool, closure: RustClosure ) -> SignalHandlerId
signal_name
on this object. Read moresource§fn connect_closure_id(
&self,
signal_id: SignalId,
details: Option<Quark>,
after: bool,
closure: RustClosure
) -> SignalHandlerId
fn connect_closure_id( &self, signal_id: SignalId, details: Option<Quark>, after: bool, closure: RustClosure ) -> SignalHandlerId
signal_id
on this object. Read moresource§fn watch_closure(&self, closure: &impl AsRef<Closure>)
fn watch_closure(&self, closure: &impl AsRef<Closure>)
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]) -> Rwhere
R: TryFromClosureReturnValue,
fn emit<R>(&self, signal_id: SignalId, args: &[&dyn ToValue]) -> Rwhere R: TryFromClosureReturnValue,
source§fn emit_with_values(&self, signal_id: SignalId, args: &[Value]) -> Option<Value>
fn emit_with_values(&self, signal_id: SignalId, args: &[Value]) -> Option<Value>
Self::emit
but takes Value
for the arguments.source§fn emit_by_name<R>(&self, signal_name: &str, args: &[&dyn ToValue]) -> Rwhere
R: TryFromClosureReturnValue,
fn emit_by_name<R>(&self, signal_name: &str, args: &[&dyn ToValue]) -> Rwhere R: TryFromClosureReturnValue,
source§fn emit_by_name_with_values(
&self,
signal_name: &str,
args: &[Value]
) -> Option<Value>
fn emit_by_name_with_values( &self, signal_name: &str, args: &[Value] ) -> Option<Value>
source§fn emit_by_name_with_details<R>(
&self,
signal_name: &str,
details: Quark,
args: &[&dyn ToValue]
) -> Rwhere
R: TryFromClosureReturnValue,
fn emit_by_name_with_details<R>( &self, signal_name: &str, details: Quark, args: &[&dyn ToValue] ) -> Rwhere R: TryFromClosureReturnValue,
source§fn emit_by_name_with_details_and_values(
&self,
signal_name: &str,
details: Quark,
args: &[Value]
) -> Option<Value>
fn emit_by_name_with_details_and_values( &self, signal_name: &str, details: Quark, args: &[Value] ) -> Option<Value>
source§fn emit_with_details<R>(
&self,
signal_id: SignalId,
details: Quark,
args: &[&dyn ToValue]
) -> Rwhere
R: TryFromClosureReturnValue,
fn emit_with_details<R>( &self, signal_id: SignalId, details: Quark, args: &[&dyn ToValue] ) -> Rwhere R: TryFromClosureReturnValue,
source§fn emit_with_details_and_values(
&self,
signal_id: SignalId,
details: Quark,
args: &[Value]
) -> Option<Value>
fn emit_with_details_and_values( &self, signal_id: SignalId, details: Quark, args: &[Value] ) -> Option<Value>
source§fn disconnect(&self, handler_id: SignalHandlerId)
fn disconnect(&self, handler_id: SignalHandlerId)
source§fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerIdwhere
F: Fn(&T, &ParamSpec) + Send + Sync + 'static,
fn connect_notify<F>(&self, name: Option<&str>, f: F) -> SignalHandlerIdwhere F: Fn(&T, &ParamSpec) + Send + Sync + 'static,
notify
signal of the object. Read moresource§fn connect_notify_local<F>(&self, name: Option<&str>, f: F) -> SignalHandlerIdwhere
F: Fn(&T, &ParamSpec) + 'static,
fn connect_notify_local<F>(&self, name: Option<&str>, f: F) -> SignalHandlerIdwhere F: Fn(&T, &ParamSpec) + 'static,
notify
signal of the object. Read moresource§unsafe fn connect_notify_unsafe<F>(
&self,
name: Option<&str>,
f: F
) -> SignalHandlerIdwhere
F: Fn(&T, &ParamSpec),
unsafe fn connect_notify_unsafe<F>( &self, name: Option<&str>, f: F ) -> SignalHandlerIdwhere F: Fn(&T, &ParamSpec),
notify
signal of the object. Read more