Application
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 g_application_hold() and g_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 g_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 g_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](https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names-bus). Examples include:
com.example.MyApp
,org.example.internal_apps.Calculator
,org._7_zip.Archiver
. For details on valid application identifiers, see g_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 g_application_register()). Unfortunately, this means that you cannot use g_application_get_is_remote() to decide if you want to register object paths.
GApplication also implements the #GActionGroup and #GActionMap interfaces and lets you easily export actions by adding them with g_action_map_add_action(). When invoking an action by calling g_action_group_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 #GDBusActionGroup wrapper to conveniently access them remotely. GIO provides a #GDBusMenuModel 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 #GApplication::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 #GVariant dictionary mapping strings to variants. To use platform data, override the @before_emit or @after_emit virtual functions in your #GApplication subclass. When dealing with #GApplicationCommandLine objects, the platform data is directly available via g_application_command_line_get_cwd(), g_application_command_line_get_environ() and g_application_command_line_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 @add_platform_data virtual function. For instance, #GtkApplication adds startup notification data in this way.
To parse commandline arguments you may handle the #GApplication::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.
Skipped during bindings generation
parameter
entries
: Array parameter of type GLib.OptionEntry is not supportedparameter
files
: Array parameter of type File is not supportedmethod
action-group
: Property has no gettersignal
open
: Unsupported parameterfiles
: Array parameter of type File is not supported
Since
2.28
Constructors
Properties
Functions
Emits the #GActionGroup::action-added signal on @action_group.
Emits the #GActionGroup::action-enabled-changed signal on @action_group.
Emits the #GActionGroup::action-removed signal on @action_group.
Emits the #GActionGroup::action-state-changed signal on @action_group.
Activate the named action within @action_group.
Add an option to be handled by @application.
Adds a #GOptionGroup to the commandline handling of @application.
Marks @application as busy (see g_application_mark_busy()) while
Request for the state of the named action within @action_group to be changed to @value.
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.
Signals that the enabled status of the named action has changed.
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.
Signals that the state of the named action has changed.
The ::activate signal is emitted on the primary instance when an activation occurs. See g_application_activate().
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.
The ::handle-local-options signal is emitted on the local instance after the parsing of the commandline options has occurred.
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.
The ::shutdown signal is emitted only on the registered primary instance immediately after the main loop terminates.
The ::startup signal is emitted on the primary instance immediately after registration. See g_application_register().
Checks if the named action within @action_group is currently enabled.
Queries the type of the parameter that must be given when activating the named action within @action_group.
Queries the current state of the named action within @action_group.
Requests a hint about the valid range of values for the state of the named action within @action_group.
Queries the type of the state of the named action within
Gets the unique identifier for @application.
Gets the #GDBusConnection being used by the application, or null.
Gets the D-Bus object path being used by the application, or null.
Gets the flags for @application.
Gets the current inactivity timeout for the application.
Checks if @application is registered.
Checks if @application is remote.
Gets the resource base path of @application.
Lists the actions contained within @action_group.
Looks up the action with the name @action_name in @action_map.
Attempts registration of the application.
Removes the named action from the action map.
Run the Application without arguments.
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.
This used to be how actions were associated with a #GApplication. Now there is #GActionMap for that.
Sets the unique identifier for @application.
Sets or unsets the default application for the process, as returned by g_application_get_default().
Sets the flags for @application.
Sets the current inactivity timeout for the application.
Adds a description to the @application option context.
Sets the parameter string to be used by the commandline handling of @application.
Adds a summary to the @application option context.
Sets (or unsets) the base resource path of @application.
Destroys a binding between @property and the busy state of
Decreases the busy count of @application.
Withdraws a notification that was sent with g_application_send_notification().