Allow installing bindings bound to actions

This is just convenience code around GtkShortcut, just like bindings for
signal emission and callback invocation.
This commit is contained in:
Emmanuele Bassi 2020-02-05 17:08:37 +00:00 committed by Matthias Clasen
parent 84a52e3bbd
commit d75fd59ddf
2 changed files with 57 additions and 0 deletions

View File

@ -4418,6 +4418,55 @@ gtk_widget_class_add_binding_signal (GtkWidgetClass *widget_class,
g_object_unref (shortcut);
}
/**
* gtk_widget_class_add_binding_action: (skip)
* @widget_class: the class to add the binding to
* @keyval: key value of binding to install
* @mods: key modifier of binding to install
* @action_name: the action to activate
* @format_string: GVariant format string for arguments or %NULL for
* no arguments
* @...: arguments, as given by format string.
*
* Creates a new shortcut for @widget_class that activates the given
* @action_name with arguments read according to @format_string.
* The arguments and format string must be provided in the same way as
* with g_variant_new().
*
* This function is a convenience wrapper around
* gtk_widget_class_add_shortcut() and must be called during class
* initialization.
*/
void
gtk_widget_class_add_binding_action (GtkWidgetClass *widget_class,
guint keyval,
GdkModifierType mods,
const gchar *action_name,
const gchar *format_string,
...)
{
GtkShortcut *shortcut;
g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class));
/* XXX: validate variant format for action */
shortcut = gtk_shortcut_new ();
gtk_shortcut_set_trigger (shortcut, gtk_keyval_trigger_new (keyval, mods));
gtk_shortcut_set_action (shortcut, action_name);
if (format_string)
{
va_list args;
va_start (args, format_string);
gtk_shortcut_set_arguments (shortcut,
g_variant_new_va (format_string, NULL, &args));
va_end (args);
}
gtk_widget_class_add_shortcut (widget_class, shortcut);
g_object_unref (shortcut);
}
/**
* gtk_widget_class_add_shortcut:
* @widget_class: the class to add the shortcut to

View File

@ -390,6 +390,14 @@ void gtk_widget_class_add_binding_signal
const gchar *format_string,
...);
GDK_AVAILABLE_IN_ALL
void gtk_widget_class_add_binding_action
(GtkWidgetClass *widget_class,
GdkModifierType mods,
guint keyval,
const gchar *action_name,
const gchar *format_string,
...);
GDK_AVAILABLE_IN_ALL
void gtk_widget_class_add_shortcut (GtkWidgetClass *widget_class,
GtkShortcut *shortcut);