gio.application

Module for [Application] class

Types 3

[gio.application.Application] is the core class for application support.

A [gio.application.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 [gtk.application.Application] or MxApplication. In general, you should not use this class outside of a higher level framework.

[gio.application.Application] provides convenient life-cycle management by maintaining a "use count" for the primary application instance. The use count can be changed using [gio.application.Application.hold] and [gio.application.Application.release]. If it drops to zero, the application exits. Higher-level classes such as [gtk.application.Application] employ the use count to ensure that the application stays alive as long as it has any opened windows.

Another feature that [gio.application.Application] (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 [gio.application.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 [gio.application.Application] should do very little more than instantiating the application instance, possibly connecting signal handlers, then calling [gio.application.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 [gio.application.Application.run] promptly returns. See the code examples below.

If used, the expected form of an application identifier is the same as that 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 [gio.application.Application.idIsValid].

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 #GApplication attempts to acquire the bus name of your application (which happens in [gio.application.Application.register]). Unfortunately, this means that you cannot use property@Gio.Application:is-remote to decide if you want to register object paths.

[gio.application.Application] also implements the [gio.action_group.ActionGroup] and [gio.action_map.ActionMap] interfaces and lets you easily export actions by adding them with [gio.action_map.ActionMap.addAction]. When invoking an action by calling [gio.action_group.ActionGroup.activateAction] on the application, it is always invoked in the primary instance. The actions are also exported on the session bus, and GIO provides the [gio.dbus_action_group.DBusActionGroup] wrapper to conveniently access them remotely. GIO provides a [gio.dbus_menu_model.DBusMenuModel] wrapper for remote access to exported [gio.menu_model.MenuModel]s.

Note

Due to the fact that actions are exported on the session bus,

using maybe parameters is not supported, since D-Bus does not support maybe types.

There is a number of different entry points into a [gio.application.Application]:

  • 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 [gio.application.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, [gio.application.Application] passes some ‘platform data’ from the launching instance to the primary instance, in the form of a [glib.variant.Variant] dictionary mapping strings to variants. To use platform data, override the vfunc@Gio.Application.before_emit or vfunc@Gio.Application.after_emit virtual functions in your [gio.application.Application] subclass. When dealing with [gio.application_command_line.ApplicationCommandLine] objects, the platform data is directly available via [gio.application_command_line.ApplicationCommandLine.getCwd], [gio.application_command_line.ApplicationCommandLine.getEnviron] and [gio.application_command_line.ApplicationCommandLine.getPlatformData].

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 [gio.types.ApplicationFlags.SendEnvironment] flag is set. [gio.application.Application] subclasses can add their own platform data by overriding the vfunc@Gio.Application.add_platform_data virtual function. For instance, [gtk.application.Application] adds startup notification data in this way.

To parse commandline arguments you may handle the signal@Gio.Application::command-line signal or override the vfunc@Gio.Application.local_command_line virtual funcion, to parse them in either the primary instance or the local instance, respectively.

For an example of opening files with a [gio.application.Application], see

gapplication-example-open.c.

For an example of using actions with [gio.application.Application], see

gapplication-example-actions.c.

For an example of using extra D-Bus hooks with [gio.application.Application], see

gapplication-example-dbushooks.c.
Methods
GType _gType() @property
Application self()Returns `this`, for use in `with` statements.
ApplicationGidBuilder builder()Get builder for [gio.application.Application] Returns: New builder object
void actionGroup(gio.action_group.ActionGroup propval) @propertySet `actionGroup` property. Params: propval = The group of actions that the application exports.
string applicationId() @propertyGet `applicationId` property. Returns: The unique identifier for the application.
void applicationId(string propval) @propertySet `applicationId` property. Params: propval = The unique identifier for the application.
gio.types.ApplicationFlags flags() @propertyGet `flags` property. Returns: Flags specifying the behaviour of the application.
void flags(gio.types.ApplicationFlags propval) @propertySet `flags` property. Params: propval = Flags specifying the behaviour of the application.
uint inactivityTimeout() @propertyGet `inactivityTimeout` property. Returns: Time (in milliseconds) to stay alive after becoming idle.
void inactivityTimeout(uint propval) @propertySet `inactivityTimeout` property. Params: propval = Time (in milliseconds) to stay alive after becoming idle.
bool isBusy() @propertyGet `isBusy` property. Returns: Whether the application is currently marked as busy through [gio.application.Application.markBusy] or [gio.application.Application.bindBusyProperty].
bool isRegistered() @propertyGet `isRegistered` property. Returns: Whether [gio.application.Application.register] has been called.
bool isRemote() @propertyGet `isRemote` property. Returns: Whether this application instance is remote.
string resourceBasePath() @propertyGet `resourceBasePath` property. Returns: The base resource path for the application.
void resourceBasePath(string propval) @propertySet `resourceBasePath` property. Params: propval = The base resource path for the application.
string version_() @propertyGet `version_` property. Returns: The human-readable version number of the application.
void version_(string propval) @propertySet `version_` property. Params: propval = The human-readable version number of the application.
gio.application.Application getDefault()Returns the default #GApplication instance for this process.
bool idIsValid(string applicationId)Checks if application_id is a valid application identifier.
void activate()Activates the application.
void addMainOption(string longName, char shortName, glib.types.OptionFlags flags, glib.types.OptionArg arg, string description, string argDescription = null)Add an option to be handled by application.
void addMainOptionEntries(glib.types.OptionEntry[] entries)Adds main option entries to be handled by application.
void addOptionGroup(glib.option_group.OptionGroup group)Adds a #GOptionGroup to the commandline handling of application.
void bindBusyProperty(gobject.object.ObjectWrap object, string property)Marks application as busy (see [gio.application.Application.markBusy]) while property on object is true.
string getApplicationId()Gets the unique identifier for application. Returns: the identifier for application, owned by application
gio.dbus_connection.DBusConnection getDbusConnection()Gets the #GDBusConnection being used by the application, or null.
string getDbusObjectPath()Gets the D-Bus object path being used by the application, or null.
gio.types.ApplicationFlags getFlags()Gets the flags for application.
uint getInactivityTimeout()Gets the current inactivity timeout for the application.
bool getIsBusy()Gets the application's current busy state, as set through [gio.application.Application.markBusy] or [gio.application.Application.bindBusyProperty]. Returns: true if application is currently marked ...
bool getIsRegistered()Checks if application is registered.
bool getIsRemote()Checks if application is remote.
string getResourceBasePath()Gets the resource base path of application.
string getVersion()Gets the version of application. Returns: the version of application
void hold()Increases the use count of application.
void markBusy()Increases the busy count of application.
void open(gio.file.File[] files, string hint)Opens the given files.
void quit()Immediately quits the application.
bool register(gio.cancellable.Cancellable cancellable = null)Attempts registration of the application.
void release()Decrease the use count of application.
int run(string[] argv = null)Runs the application.
void sendNotification(string id, gio.notification.Notification notification)Sends a notification on behalf of application to the desktop shell. There is no guarantee that the notification is displayed immediately, or even at all.
void setActionGroup(gio.action_group.ActionGroup actionGroup = null)This used to be how actions were associated with a #GApplication. Now there is #GActionMap for that.
void setApplicationId(string applicationId = null)Sets the unique identifier for application.
void setDefault()Sets or unsets the default application for the process, as returned by [gio.application.Application.getDefault].
void setFlags(gio.types.ApplicationFlags flags)Sets the flags for application.
void setInactivityTimeout(uint inactivityTimeout)Sets the current inactivity timeout for the application.
void setOptionContextDescription(string description = null)Adds a description to the application option context.
void setOptionContextParameterString(string parameterString = null)Sets the parameter string to be used by the commandline handling of application.
void setOptionContextSummary(string summary = null)Adds a summary to the application option context.
void setResourceBasePath(string resourcePath = null)Sets (or unsets) the base resource path of application.
void setVersion(string version_)Sets the version number of application. This will be used to implement a `--version` command line argument
void unbindBusyProperty(gobject.object.ObjectWrap object, string property)Destroys a binding between property and the busy state of application that was previously created with [gio.application.Application.bindBusyProperty].
void unmarkBusy()Decreases the busy count of application.
void withdrawNotification(string id)Withdraws a notification that was sent with [gio.application.Application.sendNotification].
gulong connectActivate(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == void) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] : gio.application.Application))) && Parameters!T.length < 2)Connect to `Activate` signal.
gulong connectCommandLine(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == int) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] : gio.application_command_line.ApplicationCommandLine))) && (Parameters!T.length < 2 || (ParameterStorageClassTuple!T[1] == ParameterStorageClass.none && is(Parameters!T[1] : gio.application.Application))) && Parameters!T.length < 3)Connect to `CommandLine` signal.
gulong connectHandleLocalOptions(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == int) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] == glib.variant_dict.VariantDict))) && (Parameters!T.length < 2 || (ParameterStorageClassTuple!T[1] == ParameterStorageClass.none && is(Parameters!T[1] : gio.application.Application))) && Parameters!T.length < 3)Connect to `HandleLocalOptions` signal.
gulong connectNameLost(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == bool) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] : gio.application.Application))) && Parameters!T.length < 2)Connect to `NameLost` signal.
gulong connectOpen(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == void) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] : gio.file.File[]))) && (Parameters!T.length < 2 || (ParameterStorageClassTuple!T[1] == ParameterStorageClass.none && is(Parameters!T[1] == string))) && (Parameters!T.length < 3 || (ParameterStorageClassTuple!T[2] == ParameterStorageClass.none && is(Parameters!T[2] : gio.application.Application))) && Parameters!T.length < 4)Connect to `Open` signal.
gulong connectShutdown(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == void) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] : gio.application.Application))) && Parameters!T.length < 2)Connect to `Shutdown` signal.
gulong connectStartup(T)(T callback, Flag!"After" after = No.After) if (isCallable!T && is(ReturnType!T == void) && (Parameters!T.length < 1 || (ParameterStorageClassTuple!T[0] == ParameterStorageClass.none && is(Parameters!T[0] : gio.application.Application))) && Parameters!T.length < 2)Connect to `Startup` signal.
Constructors
this(void * ptr, Flag!"Take" take)
this(string applicationId, gio.types.ApplicationFlags flags)Creates a new #GApplication instance.
Methods
T actionGroup(gio.action_group.ActionGroup propval)Set `actionGroup` property. Params: propval = The group of actions that the application exports. Returns: Builder instance for fluent chaining
T applicationId(string propval)Set `applicationId` property. Params: propval = The unique identifier for the application. Returns: Builder instance for fluent chaining
T flags(gio.types.ApplicationFlags propval)Set `flags` property. Params: propval = Flags specifying the behaviour of the application. Returns: Builder instance for fluent chaining
T inactivityTimeout(uint propval)Set `inactivityTimeout` property. Params: propval = Time (in milliseconds) to stay alive after becoming idle. Returns: Builder instance for fluent chaining
T resourceBasePath(string propval)Set `resourceBasePath` property. Params: propval = The base resource path for the application. Returns: Builder instance for fluent chaining
T version_(string propval)Set `version_` property. Params: propval = The human-readable version number of the application. Returns: Builder instance for fluent chaining

Fluent builder for [gio.application.Application]