[]Struct gio::Application

pub struct 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 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 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:

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 ApplicationCommandLineExt::get_cwd, ApplicationCommandLineExt::get_environ and ApplicationCommandLineExt::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, ApplicationExtManual

Methods

impl Application[src]

pub fn new<'a, P: Into<Option<&'a str>>>(
    application_id: P,
    flags: ApplicationFlags
) -> Application
[src]

Creates 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]

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]

Checks if application_id is a valid application identifier.

A valid ID is required for calls to Application::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

impl Clone for Application

default fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Eq for Application

impl<T: ObjectType> PartialOrd<T> for Application

#[must_use]
default fn lt(&self, other: &Rhs) -> bool
1.0.0
[src]

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

#[must_use]
default fn le(&self, other: &Rhs) -> bool
1.0.0
[src]

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

#[must_use]
default fn gt(&self, other: &Rhs) -> bool
1.0.0
[src]

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

#[must_use]
default fn ge(&self, other: &Rhs) -> bool
1.0.0
[src]

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

impl<T: ObjectType> PartialEq<T> for Application

#[must_use]
default fn ne(&self, other: &Rhs) -> bool
1.0.0
[src]

This method tests for !=.

impl Ord for Application

default fn max(self, other: Self) -> Self
1.21.0
[src]

Compares and returns the maximum of two values. Read more

default fn min(self, other: Self) -> Self
1.21.0
[src]

Compares and returns the minimum of two values. Read more

default fn clamp(self, min: Self, max: Self) -> Self[src]

🔬 This is a nightly-only experimental API. (clamp)

Restrict a value to a certain interval. Read more

impl Debug for Application

impl Display for Application[src]

impl Hash for Application

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

Feeds a slice of this type into the given [Hasher]. Read more

impl IsA<ActionGroup> for Application

impl IsA<ActionMap> for Application

impl StaticType for Application

Auto Trait Implementations

impl !Send for Application

impl !Sync for Application

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> Any for T where
    T: 'static + ?Sized
[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>>)

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>>)

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>>)

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

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

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

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

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

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

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

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

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

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

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

default 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

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

Casts to T unconditionally. Read more

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

Casts to &T unconditionally. Read more

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

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

impl<T> ToValue for T where
    T: SetValue + ?Sized