Application

open class Application(pointer: <Error class: unknown class><<Error class: unknown class>>) : ActionGroup, ActionMap

GApplication is the core class for application support.

A GApplication 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 method@Gio.Application.hold and method@Gio.Application.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 GApplication 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 GApplication should do very little more than instantiating the application instance, possibly connecting signal handlers, then calling method@Gio.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 method@Gio.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 func@Gio.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 #GApplication attempts to acquire the bus name of your application (which happens in method@Gio.Application.register). Unfortunately, this means that you cannot use property@Gio.Application:is-remote to decide if you want to register object paths.

GApplication also implements the iface@Gio.ActionGroup and iface@Gio.ActionMap interfaces and lets you easily export actions by adding them with method@Gio.ActionMap.add_action. When invoking an action by calling method@Gio.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 class@Gio.DBusActionGroup wrapper to conveniently access them remotely. GIO provides a class@Gio.DBusMenuModel wrapper for remote access to exported class@Gio.MenuModels.

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 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 signal@Gio.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 struct@GLib.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 GApplication subclass. When dealing with class@Gio.ApplicationCommandLine objects, the platform data is directly available via method@Gio.ApplicationCommandLine.get_cwd, method@Gio.ApplicationCommandLine.get_environ and method@Gio.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 G_APPLICATION_SEND_ENVIRONMENT flag is set. GApplication subclasses can add their own platform data by overriding the vfunc@Gio.Application.add_platform_data virtual function. For instance, GtkApplication 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 function, 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.

Skipped during bindings generation

  • parameter entries: Array parameter of type GLib.OptionEntry is not supported

  • parameter files: Array parameter of type File is not supported

  • method action-group: Property has no getter

  • method version: Property TypeInfo of getter and setter do not match

  • signal open: Unsupported parameter files : Array parameter of type File is not supported

Since

2.28

Constructors

Link copied to clipboard
constructor(applicationId: String? = null, flags: ApplicationFlags)

Creates a new #GApplication instance.

constructor(pointer: <Error class: unknown class><<Error class: unknown class>>)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard

The unique identifier for the application.

Link copied to clipboard

Flags specifying the behaviour of the application.

Link copied to clipboard
open override val gioActionGroupPointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
open override val gioActionMapPointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
val gioApplicationPointer: <Error class: unknown class><<Error class: unknown class>>
Link copied to clipboard
open var inactivityTimeout: <Error class: unknown class>

Time (in milliseconds) to stay alive after becoming idle.

Link copied to clipboard
open val isBusy: Boolean

Whether the application is currently marked as busy through g_application_mark_busy() or g_application_bind_busy_property().

Link copied to clipboard

Whether method@Gio.Application.register has been called.

Link copied to clipboard
open val isRemote: Boolean

Whether this application instance is remote.

Link copied to clipboard

The base resource path for the application.

Functions

Link copied to clipboard
open fun actionAdded(actionName: String)

Emits the signal@Gio.ActionGroup::action-added signal on @action_group.

Link copied to clipboard
open fun actionEnabledChanged(actionName: String, enabled: Boolean)

Emits the signal@Gio.ActionGroup::action-enabled-changed signal on @action_group.

Link copied to clipboard
open fun actionRemoved(actionName: String)

Emits the signal@Gio.ActionGroup::action-removed signal on @action_group.

Link copied to clipboard
open fun actionStateChanged(actionName: String, state: <Error class: unknown class>)

Emits the signal@Gio.ActionGroup::action-state-changed signal on @action_group.

Link copied to clipboard
open fun activate()

Activates the application.

Link copied to clipboard
open fun activateAction_(actionName: String, parameter: <Error class: unknown class>? = null)

Activate the named action within @action_group.

Link copied to clipboard
open fun addAction(action: Action)

Adds an action to the @action_map.

Link copied to clipboard
open fun addMainOption(longName: String, shortName: Char, flags: <Error class: unknown class>, arg: <Error class: unknown class>, description: String, argDescription: String? = null)

Add an option to be handled by @application.

Link copied to clipboard
open fun addOptionGroup(group: <Error class: unknown class>)

Adds a #GOptionGroup to the commandline handling of @application.

Link copied to clipboard
open fun bindBusyProperty(object: <Error class: unknown class>, property: String)

Marks @application as busy (see g_application_mark_busy()) while

Link copied to clipboard
open fun changeActionState(actionName: String, value: <Error class: unknown class>)

Request for the state of the named action within @action_group to be changed to @value.

Link copied to clipboard
open fun connectActionAdded(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (actionName: String) -> Unit): <Error class: unknown class>

Signals that a new action was just added to the group.

Link copied to clipboard
open fun connectActionEnabledChanged(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (actionName: String, enabled: Boolean) -> Unit): <Error class: unknown class>

Signals that the enabled status of the named action has changed.

Link copied to clipboard
open fun connectActionRemoved(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (actionName: String) -> Unit): <Error class: unknown class>

Signals that an action is just about to be removed from the group.

Link copied to clipboard
open fun connectActionStateChanged(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (actionName: String, <Error class: unknown class>) -> Unit): <Error class: unknown class>

Signals that the state of the named action has changed.

Link copied to clipboard
fun connectActivate(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> Unit): <Error class: unknown class>

The ::activate signal is emitted on the primary instance when an activation occurs. See g_application_activate().

Link copied to clipboard
fun connectCommandLine(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (commandLine: ApplicationCommandLine) -> Int): <Error class: unknown class>

The ::command-line signal is emitted on the primary instance when a commandline is not handled locally. See g_application_run() and the #GApplicationCommandLine documentation for more information.

Link copied to clipboard
fun connectHandleLocalOptions(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: (<Error class: unknown class>) -> Int): <Error class: unknown class>

The ::handle-local-options signal is emitted on the local instance after the parsing of the commandline options has occurred.

Link copied to clipboard
fun connectNameLost(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> Boolean): <Error class: unknown class>

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 %G_APPLICATION_ALLOW_REPLACEMENT flag.

Link copied to clipboard
fun connectShutdown(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> Unit): <Error class: unknown class>

The ::shutdown signal is emitted only on the registered primary instance immediately after the main loop terminates.

Link copied to clipboard
fun connectStartup(connectFlags: <Error class: unknown class> = ConnectFlags(0u), handler: () -> Unit): <Error class: unknown class>

The ::startup signal is emitted on the primary instance immediately after registration. See g_application_register().

Link copied to clipboard
open fun getActionEnabled(actionName: String): Boolean

Checks if the named action within @action_group is currently enabled.

Link copied to clipboard
open fun getActionParameterType(actionName: String): <Error class: unknown class>?

Queries the type of the parameter that must be given when activating the named action within @action_group.

Link copied to clipboard
open fun getActionState(actionName: String): <Error class: unknown class>?

Queries the current state of the named action within @action_group.

Link copied to clipboard
open fun getActionStateHint(actionName: String): <Error class: unknown class>?

Requests a hint about the valid range of values for the state of the named action within @action_group.

Link copied to clipboard
open fun getActionStateType(actionName: String): <Error class: unknown class>?

Queries the type of the state of the named action within

Link copied to clipboard

Gets the unique identifier for @application.

Link copied to clipboard

Gets the #GDBusConnection being used by the application, or null.

Link copied to clipboard

Gets the D-Bus object path being used by the application, or null.

Link copied to clipboard

Gets the flags for @application.

Link copied to clipboard
open fun getInactivityTimeout(): <Error class: unknown class>

Gets the current inactivity timeout for the application.

Link copied to clipboard
open fun getIsBusy(): Boolean

Gets the application's current busy state, as set through g_application_mark_busy() or g_application_bind_busy_property().

Link copied to clipboard

Checks if @application is registered.

Link copied to clipboard
open fun getIsRemote(): Boolean

Checks if @application is remote.

Link copied to clipboard

Gets the resource base path of @application.

Link copied to clipboard
open fun getVersion(): String?

Gets the version of @application.

Link copied to clipboard
open fun hasAction(actionName: String): Boolean

Checks if the named action exists within @action_group.

Link copied to clipboard
open fun hold()

Increases the use count of @application.

Link copied to clipboard
open fun listActions(): List<String>

Lists the actions contained within @action_group.

Link copied to clipboard
open fun lookupAction(actionName: String): Action?

Looks up the action with the name @action_name in @action_map.

Link copied to clipboard
open fun markBusy()

Increases the busy count of @application.

Link copied to clipboard
open fun quit()

Immediately quits the application.

Link copied to clipboard
open fun register(cancellable: Cancellable? = null): <Error class: unknown class><Boolean>

Attempts registration of the application.

Link copied to clipboard
open fun release()

Decrease the use count of @application.

Link copied to clipboard
open fun removeAction(actionName: String)

Removes the named action from the action map.

Link copied to clipboard
open fun run(argc: Int, argv: List<String>? = null): Int

Runs the application.

Link copied to clipboard

Run the Application without arguments.

Link copied to clipboard
open fun sendNotification(id: String? = null, 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.

Link copied to clipboard
open fun setActionGroup(actionGroup: ActionGroup? = null)

This used to be how actions were associated with a #GApplication. Now there is #GActionMap for that.

Link copied to clipboard
open fun setApplicationId(applicationId: String? = null)

Sets the unique identifier for @application.

Link copied to clipboard
open fun setDefault()

Sets or unsets the default application for the process, as returned by g_application_get_default().

Link copied to clipboard
open fun setFlags(flags: ApplicationFlags)

Sets the flags for @application.

Link copied to clipboard
open fun setInactivityTimeout(inactivityTimeout: <Error class: unknown class>)

Sets the current inactivity timeout for the application.

Link copied to clipboard
open fun setOptionContextDescription(description: String? = null)

Adds a description to the @application option context.

Link copied to clipboard
open fun setOptionContextParameterString(parameterString: String? = null)

Sets the parameter string to be used by the commandline handling of @application.

Link copied to clipboard
open fun setOptionContextSummary(summary: String? = null)

Adds a summary to the @application option context.

Link copied to clipboard
open fun setResourceBasePath(resourcePath: String? = null)

Sets (or unsets) the base resource path of @application.

Link copied to clipboard
open fun setVersion(version: String)

Sets the version number of @application. This will be used to implement a --version command line argument

Link copied to clipboard
open fun unbindBusyProperty(object: <Error class: unknown class>, property: String)

Destroys a binding between @property and the busy state of

Link copied to clipboard
open fun unmarkBusy()

Decreases the busy count of @application.

Link copied to clipboard

Withdraws a notification that was sent with g_application_send_notification().