Gnome::Gtk4::Dialog
Description
Dialogs are a convenient way to prompt the user for a small amount of input.
Typical uses are to display a message, ask a question, or anything else that does not require extensive effort on the user’s part.
The main area of a Gnome::Gtk4::Dialog is called the "content area", and is yours to populate with widgets such a Gnome::Gtk4::Label or Gnome::Gtk4::Entry, to present your information, questions, or tasks to the user.
In addition, dialogs allow you to add "action widgets". Most commonly, action widgets are buttons. Depending on the platform, action widgets may be presented in the header bar at the top of the window, or at the bottom of the window. To add action widgets, create your Gnome::Gtk4::Dialog using .new-with-buttons()
, or use .add-button()
, .add-buttons()
, or .add-action-widget()
.
GtkDialogs uses some heuristics to decide whether to add a close button to the window decorations. If any of the action buttons use the response ID GTK_RESPONSE_CLOSE
or GTK_RESPONSE_CANCEL
, the close button is omitted.
Clicking a button that was added as an action widget will emit the response signal with a response ID that you specified. GTK will never assign a meaning to positive response IDs; these are entirely user-defined. But for convenience, you can use the response IDs in the enumeration ResponseType from Gnome::Gtk4::T-dialog
enumeration (these all have values less than zero). If a dialog receives a delete event, the response signal will be emitted with the GTK_RESPONSE_DELETE_EVENT
response ID.
Dialogs are created with a call to .newdialog()
or .new-with-buttons()
. The latter is recommended; it allows you to set the dialog title, some convenient flags, and add buttons.
A “modal” dialog (that is, one which freezes the rest of the application from user input), can be created by calling .set-modal() in class Gnome::Gtk4::Window
on the dialog. When using .new-with-buttons()
, you can also pass the GTK_DIALOG_MODAL
flag to make a dialog modal.
For the simple dialog in the following example, a Gnome::Gtk4::MessageDialog would save some effort. But you’d need to create the dialog contents manually if you had more than a simple message in the dialog.
An example for simple Gnome::Gtk4::Dialog usage:
GtkDialog as GtkBuildable
The Gnome::Gtk4::Dialog implementation of the Gnome::Gtk4::R-Buildable interface exposes the $content-area
as an internal child with the name “content_area”.
Gnome::Gtk4::Dialog supports a custom `<action-widgets>` element, which can contain multiple `<action-widget>` elements. The “response” attribute specifies a numeric response, and the content of the element is the id of widget (which should be a child of the dialogs $action-area
). To mark a response as default, set the “default” attribute of the `<action-widget>` element to true.
Gnome::Gtk4::Dialog supports adding action widgets by specifying “action” as the “type” attribute of a `<child>` element. The widget will be added either to the action area or the headerbar of the dialog, depending on the “use-header-bar” property. The response id has to be associated with the action widget using the `<action-widgets>` element.
An example of a Gnome::Gtk4::Dialog UI definition fragment:
Accessibility
Gnome::Gtk4::Dialog uses the GTK_ACCESSIBLE_ROLE_DIALOG
role.
Class initialization
Note: The native version of this class is deprecated in gtk4-lib() since version 4.10
new
:native-object
Create an object using a native object from elsewhere. See also Gnome::N::TopLevelSupportClass.
multi method new ( N-Object :$native-object! )
new-dialog
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Creates a new dialog box.
Widgets should not be packed into the Gnome::Gtk4::Window directly, but into the $content-area
and $action-area
, as described above.
method new-dialog ( --> Gnome::Gtk4::Dialog \)
new-with-buttons This function is not yet available
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Creates a new Gnome::Gtk4::Dialog with the given title and transient parent.
The $flags
argument can be used to make the dialog modal, have it destroyed along with its transient parent, or make it use a headerbar.
Button text/response ID pairs should be listed in pairs, with a undefined pointer ending the list. Button text can be arbitrary text. A response ID can be any positive number, or one of the values in the enumeration ResponseType from Gnome::Gtk4::T-dialog
enumeration. If the user clicks one of these buttons, Gnome::Gtk4::Dialog will emit the response signal with the corresponding response ID.
If a Gnome::Gtk4::Dialog receives a delete event, it will emit response with a response ID of GTK_RESPONSE_DELETE_EVENT
.
However, destroying a dialog does not emit the response signal; so be careful relying on response when using the GTK_DIALOG_DESTROY_WITH_PARENT
flag.
Here’s a simple example:
method new-with-buttons ( Str $title, N-Object() $parent, UInt $flags, Str $first-button-text, … --> Gnome::Gtk4::Dialog \)
$title; Title of the dialog.
$parent; Transient parent of the dialog.
$flags; from
bit field GtkDialogFlags defined in Gnome::Gtk4::T-dialog
.$first-button-text; text to go in first button.
…; …. Note that each argument must be specified as a type followed by its value!
Methods
add-action-widget
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Adds an activatable widget to the action area of a Gnome::Gtk4::Dialog.
GTK connects a signal handler that will emit the response signal on the dialog when the widget is activated. The widget is appended to the end of the dialog’s action area.
If you want to add a non-activatable widget, simply pack it into the $action-area
field of the Gnome::Gtk4::Dialog struct.
method add-action-widget ( N-Object() $child, Int() $response-id )
$child; an activatable widget.
$response-id; response ID for
$child
.
add-button
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Adds a button with the given text.
GTK arranges things so that clicking the button will emit the response signal with the given $response-id
. The button is appended to the end of the dialog’s action area. The button widget is returned, but usually you don’t need it.
method add-button ( Str $button-text, Int() $response-id --> N-Object )
$button-text; text of button.
$response-id; response ID for the button.
Return value; the Gnome::Gtk4::Button widget that was added.
add-buttons This function is not yet available
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Adds multiple buttons.
This is the same as calling .add-button()
repeatedly. The variable argument list should be undefined-terminated as with .new-with-buttons()
. Each button must have both text and response ID.
method add-buttons ( Str $first-button-text, … )
$first-button-text; button text.
…; …. Note that each argument must be specified as a type followed by its value!
get-content-area
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Returns the content area of $dialog
.
method get-content-area (--> N-Object )
Return value; the content area Gnome::Gtk4::Box..
get-header-bar
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Returns the header bar of $dialog
.
Note that the headerbar is only used by the dialog if the use-header-bar property is True
.
method get-header-bar (--> N-Object )
Return value; the header bar.
get-response-for-widget
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Gets the response id of a widget in the action area of a dialog.
method get-response-for-widget ( N-Object() $widget --> Int )
$widget; a widget in the action area of
$dialog
.
Return value; the response id of $widget
, or GTK_RESPONSE_NONE
if $widget
doesn’t have a response id set..
get-widget-for-response
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Gets the widget button that uses the given response ID in the action area of a dialog.
method get-widget-for-response ( Int() $response-id --> N-Object )
$response-id; the response ID used by the
$dialog
widget.
Return value; the $widget
button that uses the given $response-id
.
response
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Emits the response signal with the given response ID.
Used to indicate that the user has responded to the dialog in some way.
method response ( Int() $response-id )
$response-id; response ID.
set-default-response
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
Sets the default widget for the dialog based on the response ID.
Pressing “Enter” normally activates the default widget.
method set-default-response ( Int() $response-id )
$response-id; a response ID.
set-response-sensitive
Note: The native version of this routine is deprecated in gtk4-lib() since version 4.10
A convenient way to sensitize/desensitize dialog buttons.
Calls gtk_widget_set_sensitive (widget, $setting
)` for each widget in the dialog’s action area with the given $response-id
.
method set-response-sensitive ( Int() $response-id, Bool() $setting )
$response-id; a response ID.
$setting;
True
for sensitive.
Signals
close
Emitted when the user uses a keybinding to close the dialog.
This is a [keybinding signal](class.SignalAction.html).
The default binding for this signal is the Escape key.
method handler ( Int :$_handle_id, N-GObject :$_native-object, Gnome::Gtk4::Dialog :$_widget, *C<user>-options )
$_handle_id; The registered event handler id.
$_native-object; The native object provided by the Raku object which registered this event. This a native Gnome::Gtk4::Dialog object.
$_widget; The object which registered the signal. User code may have left the object going out of scope.
user
-options; A list of named arguments provided at the.register-signal()
method from Gnome::GObject::Object.
response
Emitted when an action widget is clicked.
The signal is also emitted when the dialog receives a delete event, and when .response()
is called. On a delete event, the response ID is GTK_RESPONSE_DELETE_EVENT
. Otherwise, it depends on which action widget was clicked.
method handler ( gint $response-id, Int :$_handle_id, N-GObject :$_native-object, Gnome::Gtk4::Dialog :$_widget, *C<user>-options )
$response-id; the response ID.
$_handle_id; The registered event handler id.
$_native-object; The native object provided by the Raku object which registered this event. This a native Gnome::Gtk4::Dialog object.
$_widget; The object which registered the signal. User code may have left the object going out of scope.
user
-options; A list of named arguments provided at the.register-signal()
method from Gnome::GObject::Object.