Package ch.bailu.gtk.gtk
Class Application
java.lang.Object
ch.bailu.gtk.type.Type
ch.bailu.gtk.type.Pointer
ch.bailu.gtk.gobject.Object
ch.bailu.gtk.gio.Application
ch.bailu.gtk.gtk.Application
- All Implemented Interfaces:
PointerInterface
- Direct Known Subclasses:
Application
`GtkApplication` is a high-level API for writing applications.
It supports many aspects of writing a GTK application in a convenient
fashion, without enforcing a one-size-fits-all model.
Currently, `GtkApplication` handles GTK initialization, application
uniqueness, session management, provides some basic scriptability and
desktop shell integration by exporting actions and menus and manages a
list of toplevel windows whose life-cycle is automatically tied to the
life-cycle of your application.
While `GtkApplication` works fine with plain [class@Gtk.Window]s, it is
recommended to use it together with [class@Gtk.ApplicationWindow].
## Automatic resources
`GtkApplication` will automatically load menus from the `GtkBuilder`
resource located at "gtk/menus.ui", relative to the application's
resource base path (see [method@Gio.Application.set_resource_base_path]).
The menu with the ID "menubar" is taken as the application's
menubar. Additional menus (most interesting submenus) can be named
and accessed via [method@Gtk.Application.get_menu_by_id] which allows for
dynamic population of a part of the menu structure.
It is also possible to provide the menubar manually using
[method@Gtk.Application.set_menubar].
`GtkApplication` will also automatically setup an icon search path for
the default icon theme by appending "icons" to the resource base
path. This allows your application to easily store its icons as
resources. See [method@Gtk.IconTheme.add_resource_path] for more
information.
If there is a resource located at `gtk/help-overlay.ui` which
defines a [class@Gtk.ShortcutsWindow] with ID `help_overlay` then
`GtkApplication` associates an instance of this shortcuts window with
each [class@Gtk.ApplicationWindow] and sets up the keyboard accelerator
<kbd>Control</kbd>+<kbd>?</kbd> to open it. To create a menu item that
displays the shortcuts window, associate the item with the action
`win.show-help-overlay`.
## A simple application
[A simple example](https://gitlab.gnome.org/GNOME/gtk/tree/main/examples/bp/bloatpad.c)
is available in the GTK source code repository
`GtkApplication` optionally registers with a session manager of the
users session (if you set the [property@Gtk.Application:register-session]
property) and offers various functionality related to the session
life-cycle.
An application can block various ways to end the session with
the [method@Gtk.Application.inhibit] function. Typical use cases for
this kind of inhibiting are long-running, uninterruptible operations,
such as burning a CD or performing a disk backup. The session
manager may not honor the inhibitor, but it can be expected to
inform the user about the negative consequences of ending the
session while inhibitors are present.
## See Also
[HowDoI: Using GtkApplication](https://wiki.gnome.org/HowDoI/GtkApplication),
[Getting Started with GTK: Basics](getting_started.html#basics)
It supports many aspects of writing a GTK application in a convenient
fashion, without enforcing a one-size-fits-all model.
Currently, `GtkApplication` handles GTK initialization, application
uniqueness, session management, provides some basic scriptability and
desktop shell integration by exporting actions and menus and manages a
list of toplevel windows whose life-cycle is automatically tied to the
life-cycle of your application.
While `GtkApplication` works fine with plain [class@Gtk.Window]s, it is
recommended to use it together with [class@Gtk.ApplicationWindow].
## Automatic resources
`GtkApplication` will automatically load menus from the `GtkBuilder`
resource located at "gtk/menus.ui", relative to the application's
resource base path (see [method@Gio.Application.set_resource_base_path]).
The menu with the ID "menubar" is taken as the application's
menubar. Additional menus (most interesting submenus) can be named
and accessed via [method@Gtk.Application.get_menu_by_id] which allows for
dynamic population of a part of the menu structure.
It is also possible to provide the menubar manually using
[method@Gtk.Application.set_menubar].
`GtkApplication` will also automatically setup an icon search path for
the default icon theme by appending "icons" to the resource base
path. This allows your application to easily store its icons as
resources. See [method@Gtk.IconTheme.add_resource_path] for more
information.
If there is a resource located at `gtk/help-overlay.ui` which
defines a [class@Gtk.ShortcutsWindow] with ID `help_overlay` then
`GtkApplication` associates an instance of this shortcuts window with
each [class@Gtk.ApplicationWindow] and sets up the keyboard accelerator
<kbd>Control</kbd>+<kbd>?</kbd> to open it. To create a menu item that
displays the shortcuts window, associate the item with the action
`win.show-help-overlay`.
## A simple application
[A simple example](https://gitlab.gnome.org/GNOME/gtk/tree/main/examples/bp/bloatpad.c)
is available in the GTK source code repository
`GtkApplication` optionally registers with a session manager of the
users session (if you set the [property@Gtk.Application:register-session]
property) and offers various functionality related to the session
life-cycle.
An application can block various ways to end the session with
the [method@Gtk.Application.inhibit] function. Typical use cases for
this kind of inhibiting are long-running, uninterruptible operations,
such as burning a CD or performing a disk backup. The session
manager may not honor the inhibitor, but it can be expected to
inform the user about the negative consequences of ending the
session while inhibitors are present.
## See Also
[HowDoI: Using GtkApplication](https://wiki.gnome.org/HowDoI/GtkApplication),
[Getting Started with GTK: Basics](getting_started.html#basics)
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
static interface
static interface
Nested classes/interfaces inherited from class ch.bailu.gtk.gio.Application
Application.OnActivate, Application.OnCommandLine, Application.OnHandleLocalOptions, Application.OnNameLost, Application.OnOpen, Application.OnShutdown, Application.OnStartup
Nested classes/interfaces inherited from class ch.bailu.gtk.gobject.Object
Object.OnBindingTransformFunc, Object.OnDestroyNotify, Object.OnDuplicateFunc, Object.OnNotify, Object.OnToggleNotify, Object.OnWeakNotify
-
Field Summary
Fields inherited from class ch.bailu.gtk.gio.Application
SIGNAL_ON_ACTIVATE, SIGNAL_ON_COMMAND_LINE, SIGNAL_ON_HANDLE_LOCAL_OPTIONS, SIGNAL_ON_NAME_LOST, SIGNAL_ON_OPEN, SIGNAL_ON_SHUTDOWN, SIGNAL_ON_STARTUP
Fields inherited from class ch.bailu.gtk.gobject.Object
SIGNAL_ON_NOTIFY
-
Constructor Summary
ConstructorDescriptionApplication
(PointerContainer pointer) Application
(Str application_id, int flags) Creates a new `GtkApplication` instance.Application
(String application_id, int flags) Creates a new `GtkApplication` instance. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Adds a window to `application`.Implements interfaceActionGroup
.Implements interfaceActionMap
.getAccelsForAction
(Str detailed_action_name) Gets the accelerators that are currently associated with
the given action.getAccelsForAction
(String detailed_action_name) Gets the accelerators that are currently associated with
the given action.getActionsForAccel
(Str accel) Returns the list of actions (possibly empty) that `accel` maps to.getActionsForAccel
(String accel) Returns the list of actions (possibly empty) that `accel` maps to.Gets the “active” window for the application.static ClassHandler
static int
Returns the menu model that has been set with
[method@Gtk.Application.set_menubar].getMenuById
(Str id) Gets a menu from automatically loaded resources.getMenuById
(String id) Gets a menu from automatically loaded resources.static long
static TypeSystem.TypeSize
static long
static TypeSystem.TypeSize
getWindowById
(int id) Returns the [class@Gtk.ApplicationWindow] with the given ID.Gets a list of the [class@Gtk.Window] instances associated with `application`.int
Inform the session manager that certain types of actions should be
inhibited.int
Inform the session manager that certain types of actions should be
inhibited.Lists the detailed action names which have associated accelerators.onQueryEnd
(Application.OnQueryEnd signal) Connect to signal "query-end".Connect to signal "window-added".Connect to signal "window-removed".void
removeWindow
(Window window) Remove a window from `application`.void
setAccelsForAction
(Str detailed_action_name, Strs accels) Sets zero or more keyboard accelerators that will trigger the
given action.void
setAccelsForAction
(String detailed_action_name, Strs accels) Sets zero or more keyboard accelerators that will trigger the
given action.void
setMenubar
(MenuModel menubar) Sets or unsets the menubar for windows of `application`.void
uninhibit
(int cookie) Removes an inhibitor that has been previously established.Methods inherited from class ch.bailu.gtk.gio.Application
activate, addOptionGroup, bindBusyProperty, bindBusyProperty, getApplicationId, getDbusConnection, getDbusObjectPath, getDefault, getFlags, getInactivityTimeout, getIsBusy, getIsRegistered, getIsRemote, getResourceBasePath, hold, idIsValid, markBusy, onActivate, onCommandLine, onHandleLocalOptions, onNameLost, onOpen, onShutdown, onStartup, quit, register, release, run, sendNotification, sendNotification, setApplicationId, setApplicationId, setDefault, setFlags, setInactivityTimeout, setOptionContextDescription, setOptionContextDescription, setOptionContextParameterString, setOptionContextParameterString, setOptionContextSummary, setOptionContextSummary, setResourceBasePath, setResourceBasePath, unbindBusyProperty, unbindBusyProperty, unmarkBusy, withdrawNotification, withdrawNotification
Methods inherited from class ch.bailu.gtk.gobject.Object
addToggleRef, bindProperty, bindProperty, bindPropertyFull, bindPropertyFull, bindPropertyWithClosures, bindPropertyWithClosures, compatControl, connect, connect, disconnect, disconnect, dupData, dupData, dupQdata, forceFloating, freezeNotify, get, get, getData, getData, getProperty, getProperty, getQdata, interfaceFindProperty, interfaceInstallProperty, isFloating, notify, notify, notifyByPspec, onNotify, ref, refSink, removeToggleRef, replaceData, replaceData, replaceQdata, runDispose, set, set, setData, setData, setDataFull, setDataFull, setProperty, setProperty, setQdata, setQdataFull, stealData, stealData, stealQdata, takeRef, thawNotify, unref, watchClosure, weakRef, weakUnref
Methods inherited from class ch.bailu.gtk.type.Pointer
asCPointer, cast, connectSignal, disconnectSignals, disconnectSignals, equals, hashCode, throwIfNull, throwNullPointerException, toString, unregisterCallbacks, unregisterCallbacks
Methods inherited from class ch.bailu.gtk.type.Type
asCPointer, asCPointer, asCPointerNotNull, asJnaPointer, asJnaPointer, asPointer, asPointer, cast, cast, throwIfNull
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ch.bailu.gtk.type.PointerInterface
asCPointerNotNull, asJnaPointer, asPointer, isNotNull, isNull
-
Field Details
-
SIGNAL_ON_QUERY_END
- See Also:
-
SIGNAL_ON_WINDOW_ADDED
- See Also:
-
SIGNAL_ON_WINDOW_REMOVED
- See Also:
-
-
Constructor Details
-
Application
-
Application
Creates a new `GtkApplication` instance.
When using `GtkApplication`, it is not necessary to call [func@Gtk.init]
manually. It is called as soon as the application gets registered as
the primary instance.
Concretely, [func@Gtk.init] is called in the default handler for the
`GApplication::startup` signal. Therefore, `GtkApplication` subclasses should
always chain up in their `GApplication::startup` handler before using any GTK
API.
Note that commandline arguments are not passed to [func@Gtk.init].
If `application_id` is not %NULL, then it must be valid. See
`g_application_id_is_valid()`.
If no application ID is given then some features (most notably application
uniqueness) will be disabled.- Parameters:
application_id
- The application IDflags
- the application flags
-
Application
Creates a new `GtkApplication` instance.
When using `GtkApplication`, it is not necessary to call [func@Gtk.init]
manually. It is called as soon as the application gets registered as
the primary instance.
Concretely, [func@Gtk.init] is called in the default handler for the
`GApplication::startup` signal. Therefore, `GtkApplication` subclasses should
always chain up in their `GApplication::startup` handler before using any GTK
API.
Note that commandline arguments are not passed to [func@Gtk.init].
If `application_id` is not %NULL, then it must be valid. See
`g_application_id_is_valid()`.
If no application ID is given then some features (most notably application
uniqueness) will be disabled.- Parameters:
application_id
- The application IDflags
- the application flags
-
-
Method Details
-
getClassHandler
-
addWindow
Adds a window to `application`.
This call can only happen after the `application` has started;
typically, you should add new application windows in response
to the emission of the `GApplication::activate` signal.
This call is equivalent to setting the [property@Gtk.Window:application]
property of `window` to `application`.
Normally, the connection between the application and the window
will remain until the window is destroyed, but you can explicitly
remove it with [method@Gtk.Application.remove_window].
GTK will keep the `application` running as long as it has
any windows.- Parameters:
window
- a `GtkWindow`
-
getAccelsForAction
Gets the accelerators that are currently associated with
the given action.- Parameters:
detailed_action_name
- a detailed action name, specifying an action and target to obtain accelerators for- Returns:
- accelerators for `detailed_action_name`
-
getAccelsForAction
Gets the accelerators that are currently associated with
the given action.- Parameters:
detailed_action_name
- a detailed action name, specifying an action and target to obtain accelerators for- Returns:
- accelerators for `detailed_action_name`
-
getActionsForAccel
Returns the list of actions (possibly empty) that `accel` maps to.
Each item in the list is a detailed action name in the usual form.
This might be useful to discover if an accel already exists in
order to prevent installation of a conflicting accelerator (from
an accelerator editor or a plugin system, for example). Note that
having more than one action per accelerator may not be a bad thing
and might make sense in cases where the actions never appear in the
same context.
In case there are no actions for a given accelerator, an empty array
is returned. `NULL` is never returned.
It is a programmer error to pass an invalid accelerator string.
If you are unsure, check it with [func@Gtk.accelerator_parse] first.- Parameters:
accel
- an accelerator that can be parsed by [func@Gtk.accelerator_parse]- Returns:
- a %NULL-terminated array of actions for `accel`
-
getActionsForAccel
Returns the list of actions (possibly empty) that `accel` maps to.
Each item in the list is a detailed action name in the usual form.
This might be useful to discover if an accel already exists in
order to prevent installation of a conflicting accelerator (from
an accelerator editor or a plugin system, for example). Note that
having more than one action per accelerator may not be a bad thing
and might make sense in cases where the actions never appear in the
same context.
In case there are no actions for a given accelerator, an empty array
is returned. `NULL` is never returned.
It is a programmer error to pass an invalid accelerator string.
If you are unsure, check it with [func@Gtk.accelerator_parse] first.- Parameters:
accel
- an accelerator that can be parsed by [func@Gtk.accelerator_parse]- Returns:
- a %NULL-terminated array of actions for `accel`
-
getActiveWindow
Gets the “active” window for the application.
The active window is the one that was most recently focused (within
the application). This window may not have the focus at the moment
if another application has it — this is just the most
recently-focused window within this application.- Returns:
- the active window
-
getMenuById
Gets a menu from automatically loaded resources.
See [the section on Automatic resources](class.Application.html#automatic-resources)
for more information.- Parameters:
id
- the id of the menu to look up- Returns:
- Gets the menu with the given id from the automatically loaded resources
-
getMenuById
Gets a menu from automatically loaded resources.
See [the section on Automatic resources](class.Application.html#automatic-resources)
for more information.- Parameters:
id
- the id of the menu to look up- Returns:
- Gets the menu with the given id from the automatically loaded resources
-
getMenubar
Returns the menu model that has been set with
[method@Gtk.Application.set_menubar].- Returns:
- the menubar for windows of `application`
-
getWindowById
Returns the [class@Gtk.ApplicationWindow] with the given ID.
The ID of a `GtkApplicationWindow` can be retrieved with
[method@Gtk.ApplicationWindow.get_id].- Parameters:
id
- an identifier number- Returns:
- the window for the given `id`
-
getWindows
Gets a list of the [class@Gtk.Window] instances associated with `application`.
The list is sorted by most recently focused window, such that the first
element is the currently focused window. (Useful for choosing a parent
for a transient window.)
The list that is returned should not be modified in any way. It will
only remain valid until the next focus change or window creation or
deletion.- Returns:
- a `GList` of `GtkWindow` instances
-
inhibit
Inform the session manager that certain types of actions should be
inhibited.
This is not guaranteed to work on all platforms and for all types of
actions.
Applications should invoke this method when they begin an operation
that should not be interrupted, such as creating a CD or DVD. The
types of actions that may be blocked are specified by the `flags`
parameter. When the application completes the operation it should
call [method@Gtk.Application.uninhibit] to remove the inhibitor. Note
that an application can have multiple inhibitors, and all of them must
be individually removed. Inhibitors are also cleared when the
application exits.
Applications should not expect that they will always be able to block
the action. In most cases, users will be given the option to force
the action to take place.
The `reason` message should be short and to the point.
If `window` is given, the session manager may point the user to
this window to find out more about why the action is inhibited.- Parameters:
window
- a `GtkWindow`flags
- what types of actions should be inhibitedreason
- a short, human-readable string that explains why these operations are inhibited- Returns:
- A non-zero cookie that is used to uniquely identify this request. It should be used as an argument to [method@Gtk.Application.uninhibit] in order to remove the request. If the platform does not support inhibiting or the request failed for some reason, 0 is returned.
-
inhibit
Inform the session manager that certain types of actions should be
inhibited.
This is not guaranteed to work on all platforms and for all types of
actions.
Applications should invoke this method when they begin an operation
that should not be interrupted, such as creating a CD or DVD. The
types of actions that may be blocked are specified by the `flags`
parameter. When the application completes the operation it should
call [method@Gtk.Application.uninhibit] to remove the inhibitor. Note
that an application can have multiple inhibitors, and all of them must
be individually removed. Inhibitors are also cleared when the
application exits.
Applications should not expect that they will always be able to block
the action. In most cases, users will be given the option to force
the action to take place.
The `reason` message should be short and to the point.
If `window` is given, the session manager may point the user to
this window to find out more about why the action is inhibited.- Parameters:
window
- a `GtkWindow`flags
- what types of actions should be inhibitedreason
- a short, human-readable string that explains why these operations are inhibited- Returns:
- A non-zero cookie that is used to uniquely identify this request. It should be used as an argument to [method@Gtk.Application.uninhibit] in order to remove the request. If the platform does not support inhibiting or the request failed for some reason, 0 is returned.
-
listActionDescriptions
Lists the detailed action names which have associated accelerators.
See [method@Gtk.Application.set_accels_for_action].- Returns:
- the detailed action names
-
removeWindow
Remove a window from `application`.
If `window` belongs to `application` then this call is equivalent to
setting the [property@Gtk.Window:application] property of `window` to
`NULL`.
The application may stop running as a result of a call to this
function, if `window` was the last window of the `application`.- Parameters:
window
- a `GtkWindow`
-
setAccelsForAction
Sets zero or more keyboard accelerators that will trigger the
given action.
The first item in `accels` will be the primary accelerator, which may be
displayed in the UI.
To remove all accelerators for an action, use an empty, zero-terminated
array for `accels`.
For the `detailed_action_name`, see `g_action_parse_detailed_name()` and
`g_action_print_detailed_name()`.- Parameters:
detailed_action_name
- a detailed action name, specifying an action and target to associate accelerators withaccels
- a list of accelerators in the format understood by [func@Gtk.accelerator_parse]
-
setAccelsForAction
Sets zero or more keyboard accelerators that will trigger the
given action.
The first item in `accels` will be the primary accelerator, which may be
displayed in the UI.
To remove all accelerators for an action, use an empty, zero-terminated
array for `accels`.
For the `detailed_action_name`, see `g_action_parse_detailed_name()` and
`g_action_print_detailed_name()`.- Parameters:
detailed_action_name
- a detailed action name, specifying an action and target to associate accelerators withaccels
- a list of accelerators in the format understood by [func@Gtk.accelerator_parse]
-
setMenubar
Sets or unsets the menubar for windows of `application`.
This is a menubar in the traditional sense.
This can only be done in the primary instance of the application,
after it has been registered. `GApplication::startup` is a good place
to call this.
Depending on the desktop environment, this may appear at the top of
each window, or at the top of the screen. In some environments, if
both the application menu and the menubar are set, the application
menu will be presented as if it were the first item of the menubar.
Other environments treat the two as completely separate — for example,
the application menu may be rendered by the desktop shell while the
menubar (if set) remains in each individual window.
Use the base `GActionMap` interface to add actions, to respond to the
user selecting these menu items.- Parameters:
menubar
- a `GMenuModel`
-
uninhibit
public void uninhibit(int cookie) Removes an inhibitor that has been previously established.
See [method@Gtk.Application.inhibit].
Inhibitors are also cleared when the application exits.- Parameters:
cookie
- a cookie that was returned by [method@Gtk.Application.inhibit]
-
onQueryEnd
Connect to signal "query-end".
SeeApplication.OnQueryEnd.onQueryEnd()
for signal description.
FieldSIGNAL_ON_QUERY_END
contains original signal name and can be used as resource reference.- Parameters:
signal
- callback function (lambda).- Returns:
SignalHandler
. Can be used to disconnect signal and to release callback function.
-
onWindowAdded
Connect to signal "window-added".
SeeApplication.OnWindowAdded.onWindowAdded(ch.bailu.gtk.gtk.Window)
for signal description.
FieldSIGNAL_ON_WINDOW_ADDED
contains original signal name and can be used as resource reference.- Parameters:
signal
- callback function (lambda).- Returns:
SignalHandler
. Can be used to disconnect signal and to release callback function.
-
onWindowRemoved
Connect to signal "window-removed".
SeeApplication.OnWindowRemoved.onWindowRemoved(ch.bailu.gtk.gtk.Window)
for signal description.
FieldSIGNAL_ON_WINDOW_REMOVED
contains original signal name and can be used as resource reference.- Parameters:
signal
- callback function (lambda).- Returns:
SignalHandler
. Can be used to disconnect signal and to release callback function.
-
asActionGroup
Implements interfaceActionGroup
. Call this to get access to interface functions.- Overrides:
asActionGroup
in classApplication
- Returns:
ActionGroup
-
asActionMap
Implements interfaceActionMap
. Call this to get access to interface functions.- Overrides:
asActionMap
in classApplication
- Returns:
ActionMap
-
getTypeID
public static long getTypeID() -
getParentTypeID
public static long getParentTypeID() -
getTypeSize
-
getParentTypeSize
-
getInstanceSize
public static int getInstanceSize()
-