[−]Struct gio::Application
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 ApplicationExt::hold and ApplicationExt::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 the 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 Application::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 Application::run promptly returns. See the code
examples below.
If used, the expected form of an application identifier is very close
to that of of a
D-Bus bus name.
Examples include: "com.example.MyApp", "org.example.internal-apps.Calculator".
For details on valid application identifiers, see Application::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::get_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
ActionMap::add_action. When invoking an action by calling
ActionGroup::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 Application::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 ApplicationCommandLine::get_cwd,
ApplicationCommandLine::get_environ and
ApplicationCommandLine::get_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::SendEnvironment 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
Application::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.
Implements
ApplicationExt, glib::object::ObjectExt, ActionGroupExt, ActionMapExt
Methods
impl Application[src]
impl Applicationpub fn new<'a, P: Into<Option<&'a str>>>(
application_id: P,
flags: ApplicationFlags
) -> Application[src]
pub fn new<'a, P: Into<Option<&'a str>>>(
application_id: P,
flags: ApplicationFlags
) -> ApplicationCreates a new Application instance.
If non-None, the application id must be valid. See
Application::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
pub fn get_default() -> Option<Application>[src]
pub fn get_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
pub fn id_is_valid(application_id: &str) -> bool[src]
pub fn id_is_valid(application_id: &str) -> boolChecks if application_id is a valid application identifier.
A valid ID is required for calls to Application::new and
ApplicationExt::set_application_id.
For convenience, the restrictions on application identifiers are reproduced here:
-
Application identifiers must contain only the ASCII characters "[A-Z][a-z][0-9]_-." and must not begin with a digit.
-
Application identifiers must contain at least one '.' (period) character (and thus at least three elements).
-
Application identifiers must not begin or end with a '.' (period) character.
-
Application identifiers must not contain consecutive '.' (period) characters.
-
Application identifiers must not exceed 255 characters.
application_id
a potential application identifier
Returns
true if application_id is valid
Trait Implementations
impl<T: IsA<Object>> PartialOrd<T> for Application
impl<T: IsA<Object>> PartialOrd<T> for Applicationfn partial_cmp(&self, other: &T) -> Option<Ordering>
fn partial_cmp(&self, other: &T) -> Option<Ordering>#[must_use]
fn lt(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn lt(&self, other: &Rhs) -> boolThis method tests less than (for self and other) and is used by the < operator. Read more
#[must_use]
fn le(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn le(&self, other: &Rhs) -> boolThis method tests less than or equal to (for self and other) and is used by the <= operator. Read more
#[must_use]
fn gt(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn gt(&self, other: &Rhs) -> boolThis method tests greater than (for self and other) and is used by the > operator. Read more
#[must_use]
fn ge(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn ge(&self, other: &Rhs) -> boolThis method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
impl Ord for Application
impl Ord for Applicationfn cmp(&self, other: &Application) -> Ordering
fn cmp(&self, other: &Application) -> Orderingfn max(self, other: Self) -> Self1.21.0[src]
fn max(self, other: Self) -> SelfCompares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self1.21.0[src]
fn min(self, other: Self) -> SelfCompares and returns the minimum of two values. Read more
impl<T: IsA<Object>> PartialEq<T> for Application
impl<T: IsA<Object>> PartialEq<T> for Applicationfn eq(&self, other: &T) -> bool
fn eq(&self, other: &T) -> bool#[must_use]
fn ne(&self, other: &Rhs) -> bool1.0.0[src]
#[must_use]
fn ne(&self, other: &Rhs) -> boolThis method tests for !=.
impl Clone for Application
impl Clone for Applicationfn clone(&self) -> Application
fn clone(&self) -> Applicationfn clone_from(&mut self, source: &Self)1.0.0[src]
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl Eq for Application
impl Eq for Applicationimpl Debug for Application
impl Debug for Applicationimpl Hash for Application
impl Hash for Applicationfn hash<__H: Hasher>(&self, state: &mut __H)
fn hash<__H: Hasher>(&self, state: &mut __H)fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher, 1.3.0[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher, Feeds a slice of this type into the given [Hasher]. Read more
impl IsA<ActionGroup> for Application
impl IsA<ActionGroup> for Applicationimpl IsA<ActionMap> for Application
impl IsA<ActionMap> for Applicationimpl IsA<Object> for Application
impl IsA<Object> for Applicationimpl StaticType for Application
impl StaticType for Applicationfn static_type() -> Type
fn static_type() -> TypeAuto Trait Implementations
impl !Send for Application
impl !Send for Applicationimpl !Sync for Application
impl !Sync for ApplicationBlanket Implementations
impl<T, U> Into for T where
U: From<T>, [src]
impl<T, U> Into for T where
U: From<T>, impl<T> ToOwned for T where
T: Clone, [src]
impl<T> ToOwned for T where
T: Clone, impl<T> From for T[src]
impl<T> From for Timpl<T, U> TryFrom for T where
T: From<U>, [src]
impl<T, U> TryFrom for T where
T: From<U>, type Error = !
try_from)The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>impl<T> Borrow for T where
T: ?Sized, [src]
impl<T> Borrow for T where
T: ?Sized, impl<T> BorrowMut for T where
T: ?Sized, [src]
impl<T> BorrowMut for T where
T: ?Sized, fn borrow_mut(&mut self) -> &mut T[src]
fn borrow_mut(&mut self) -> &mut Timpl<T, U> TryInto for T where
U: TryFrom<T>, [src]
impl<T, U> TryInto for T where
U: TryFrom<T>, type Error = <U as TryFrom<T>>::Error
try_from)The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>impl<T> Any for T where
T: 'static + ?Sized, [src]
impl<T> Any for T where
T: 'static + ?Sized, fn get_type_id(&self) -> TypeId[src]
fn get_type_id(&self) -> TypeIdimpl<'a, T> ToGlibContainerFromSlice for T where
T: GlibPtrDefault + ToGlibPtr<'a, <T as GlibPtrDefault>::GlibType>, [src]
impl<'a, T> ToGlibContainerFromSlice for T where
T: GlibPtrDefault + ToGlibPtr<'a, <T as GlibPtrDefault>::GlibType>, type Storage = (Option<Array>, Vec<Stash<'a, <T as GlibPtrDefault>::GlibType, T>>)
fn to_glib_none_from_slice(
t: &'a [T]
) -> (*mut GArray, <T as ToGlibContainerFromSlice<'a, *mut GArray>>::Storage)[src]
fn to_glib_none_from_slice(
t: &'a [T]
) -> (*mut GArray, <T as ToGlibContainerFromSlice<'a, *mut GArray>>::Storage)fn to_glib_container_from_slice(
t: &'a [T]
) -> (*mut GArray, <T as ToGlibContainerFromSlice<'a, *mut GArray>>::Storage)[src]
fn to_glib_container_from_slice(
t: &'a [T]
) -> (*mut GArray, <T as ToGlibContainerFromSlice<'a, *mut GArray>>::Storage)fn to_glib_full_from_slice(t: &[T]) -> *mut GArray[src]
fn to_glib_full_from_slice(t: &[T]) -> *mut GArrayimpl<'a, T> ToGlibContainerFromSlice for T where
T: GlibPtrDefault + ToGlibPtr<'a, <T as GlibPtrDefault>::GlibType>, [src]
impl<'a, T> ToGlibContainerFromSlice for T where
T: GlibPtrDefault + ToGlibPtr<'a, <T as GlibPtrDefault>::GlibType>, type Storage = (Option<List>, Vec<Stash<'a, <T as GlibPtrDefault>::GlibType, T>>)
fn to_glib_none_from_slice(
t: &'a [T]
) -> (*const GList, <T as ToGlibContainerFromSlice<'a, *const GList>>::Storage)[src]
fn to_glib_none_from_slice(
t: &'a [T]
) -> (*const GList, <T as ToGlibContainerFromSlice<'a, *const GList>>::Storage)fn to_glib_container_from_slice(
_t: &'a [T]
) -> (*const GList, <T as ToGlibContainerFromSlice<'a, *const GList>>::Storage)[src]
fn to_glib_container_from_slice(
_t: &'a [T]
) -> (*const GList, <T as ToGlibContainerFromSlice<'a, *const GList>>::Storage)fn to_glib_full_from_slice(_t: &[T]) -> *const GList[src]
fn to_glib_full_from_slice(_t: &[T]) -> *const GListimpl<'a, T> ToGlibContainerFromSlice for T where
T: GlibPtrDefault + ToGlibPtr<'a, <T as GlibPtrDefault>::GlibType>, [src]
impl<'a, T> ToGlibContainerFromSlice for T where
T: GlibPtrDefault + ToGlibPtr<'a, <T as GlibPtrDefault>::GlibType>, type Storage = (Option<List>, Vec<Stash<'a, <T as GlibPtrDefault>::GlibType, T>>)
fn to_glib_none_from_slice(
t: &'a [T]
) -> (*mut GList, <T as ToGlibContainerFromSlice<'a, *mut GList>>::Storage)[src]
fn to_glib_none_from_slice(
t: &'a [T]
) -> (*mut GList, <T as ToGlibContainerFromSlice<'a, *mut GList>>::Storage)fn to_glib_container_from_slice(
t: &'a [T]
) -> (*mut GList, <T as ToGlibContainerFromSlice<'a, *mut GList>>::Storage)[src]
fn to_glib_container_from_slice(
t: &'a [T]
) -> (*mut GList, <T as ToGlibContainerFromSlice<'a, *mut GList>>::Storage)fn to_glib_full_from_slice(t: &[T]) -> *mut GList[src]
fn to_glib_full_from_slice(t: &[T]) -> *mut GListimpl<T> Cast for T where
T: IsA<Object>, [src]
impl<T> Cast for T where
T: IsA<Object>, fn upcast<T>(self) -> T where
Self: IsA<T>,
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, [src]
fn upcast<T>(self) -> T where
Self: IsA<T>,
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, Upcasts an object to a superclass or interface T. Read more
fn upcast_ref<T>(&self) -> &T where
Self: IsA<T>,
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, [src]
fn upcast_ref<T>(&self) -> &T where
Self: IsA<T>,
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, Upcasts an object to a reference of its superclass or interface T. Read more
fn downcast<T>(self) -> Result<T, Self> where
Self: Downcast<T>, [src]
fn downcast<T>(self) -> Result<T, Self> where
Self: Downcast<T>, Tries to downcast to a subclass or interface implementor T. Read more
fn downcast_ref<T>(&self) -> Option<&T> where
Self: Downcast<T>, [src]
fn downcast_ref<T>(&self) -> Option<&T> where
Self: Downcast<T>, Tries to downcast to a reference of its subclass or interface implementor T. Read more
fn is<T>(&self) -> bool where
T: StaticType, [src]
fn is<T>(&self) -> bool where
T: StaticType, Returns true if the object is an instance of (can be cast to) T.
fn dynamic_cast<T>(self) -> Result<T, Self> where
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, [src]
fn dynamic_cast<T>(self) -> Result<T, Self> where
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, 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
fn dynamic_cast_ref<T>(&self) -> Option<&T> where
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, [src]
fn dynamic_cast_ref<T>(&self) -> Option<&T> where
T: StaticType + UnsafeFrom<ObjectRef> + Wrapper, 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
impl<T> IsA for T where
T: StaticType + Wrapper + Into<ObjectRef> + UnsafeFrom<ObjectRef> + ToGlibPtr<'a, *mut <T as Wrapper>::GlibType>, [src]
impl<T> IsA for T where
T: StaticType + Wrapper + Into<ObjectRef> + UnsafeFrom<ObjectRef> + ToGlibPtr<'a, *mut <T as Wrapper>::GlibType>, impl<Super, Sub> Downcast for Super where
Sub: IsA<Super>,
Super: IsA<Super>, [src]
impl<Super, Sub> Downcast for Super where
Sub: IsA<Super>,
Super: IsA<Super>, fn can_downcast(&self) -> bool[src]
fn can_downcast(&self) -> boolfn downcast(self) -> Result<Sub, Super>[src]
fn downcast(self) -> Result<Sub, Super>fn downcast_ref(&self) -> Option<&Sub>[src]
fn downcast_ref(&self) -> Option<&Sub>unsafe fn downcast_unchecked(self) -> Sub[src]
unsafe fn downcast_unchecked(self) -> Subunsafe fn downcast_ref_unchecked(&self) -> &Sub[src]
unsafe fn downcast_ref_unchecked(&self) -> &Subimpl<T> ObjectExt for T where
T: IsA<Object> + SetValue, [src]
impl<T> ObjectExt for T where
T: IsA<Object> + SetValue, fn get_type(&self) -> Type[src]
fn get_type(&self) -> Typefn set_property<'a, N>(
&self,
property_name: N,
value: &dyn ToValue
) -> Result<(), BoolError> where
N: Into<&'a str>, [src]
fn set_property<'a, N>(
&self,
property_name: N,
value: &dyn ToValue
) -> Result<(), BoolError> where
N: Into<&'a str>, fn get_property<'a, N>(&self, property_name: N) -> Result<Value, BoolError> where
N: Into<&'a str>, [src]
fn get_property<'a, N>(&self, property_name: N) -> Result<Value, BoolError> where
N: Into<&'a str>, fn block_signal(&self, handler_id: &SignalHandlerId)[src]
fn block_signal(&self, handler_id: &SignalHandlerId)fn unblock_signal(&self, handler_id: &SignalHandlerId)[src]
fn unblock_signal(&self, handler_id: &SignalHandlerId)fn stop_signal_emission(&self, signal_name: &str)[src]
fn stop_signal_emission(&self, signal_name: &str)fn disconnect(&self, handler_id: SignalHandlerId)[src]
fn disconnect(&self, handler_id: SignalHandlerId)fn connect_notify<'a, P, F>(&self, name: P, f: F) -> SignalHandlerId where
F: 'static + Send + Sync + Fn(&T, &ParamSpec),
P: Into<Option<&'a str>>, [src]
fn connect_notify<'a, P, F>(&self, name: P, f: F) -> SignalHandlerId where
F: 'static + Send + Sync + Fn(&T, &ParamSpec),
P: Into<Option<&'a str>>, fn notify<'a, N>(&self, property_name: N) where
N: Into<&'a str>, [src]
fn notify<'a, N>(&self, property_name: N) where
N: Into<&'a str>, fn notify_by_pspec(&self, pspec: &ParamSpec)[src]
fn notify_by_pspec(&self, pspec: &ParamSpec)fn has_property<'a, N>(
&self,
property_name: N,
type_: Option<Type>
) -> Result<(), BoolError> where
N: Into<&'a str>, [src]
fn has_property<'a, N>(
&self,
property_name: N,
type_: Option<Type>
) -> Result<(), BoolError> where
N: Into<&'a str>, fn get_property_type<'a, N>(&self, property_name: N) -> Option<Type> where
N: Into<&'a str>, [src]
fn get_property_type<'a, N>(&self, property_name: N) -> Option<Type> where
N: Into<&'a str>, fn find_property<'a, N>(&self, property_name: N) -> Option<ParamSpec> where
N: Into<&'a str>, [src]
fn find_property<'a, N>(&self, property_name: N) -> Option<ParamSpec> where
N: Into<&'a str>, fn list_properties(&self) -> Vec<ParamSpec>[src]
fn list_properties(&self) -> Vec<ParamSpec>fn connect<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
N: Into<&'a str>, [src]
fn connect<'a, N, F>(
&self,
signal_name: N,
after: bool,
callback: F
) -> Result<SignalHandlerId, BoolError> where
F: Fn(&[Value]) -> Option<Value> + Send + Sync + 'static,
N: Into<&'a str>, fn emit<'a, N>(
&self,
signal_name: N,
args: &[&dyn ToValue]
) -> Result<Option<Value>, BoolError> where
N: Into<&'a str>, [src]
fn emit<'a, N>(
&self,
signal_name: N,
args: &[&dyn ToValue]
) -> Result<Option<Value>, BoolError> where
N: Into<&'a str>, fn downgrade(&self) -> WeakRef<T>[src]
fn downgrade(&self) -> WeakRef<T>fn bind_property<'a, O, N, M>(
&'a self,
source_property: N,
target: &'a O,
target_property: M
) -> BindingBuilder<'a, T, O> where
M: Into<&'a str>,
N: Into<&'a str>,
O: IsA<Object>, [src]
fn bind_property<'a, O, N, M>(
&'a self,
source_property: N,
target: &'a O,
target_property: M
) -> BindingBuilder<'a, T, O> where
M: Into<&'a str>,
N: Into<&'a str>,
O: IsA<Object>, fn ref_count(&self) -> u32[src]
fn ref_count(&self) -> u32impl<T> ToValue for T where
T: SetValue + ?Sized, [src]
impl<T> ToValue for T where
T: SetValue + ?Sized,