forked from AuroraMiddleware/gtk
shortcut: Change the API for creating shortcuts
When creating shortcuts, there almost always are a trigger and an action available for use. So make gtk_shortcut_new() take those as arguments. Also add gtk_shortcut_new_with_arguments() so people can easily pass those in, too.
This commit is contained in:
parent
cd0332aad5
commit
92e20deca1
@ -76,9 +76,8 @@ do_shortcut_triggers (GtkWidget *do_widget)
|
||||
gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (controller), GTK_SHORTCUT_SCOPE_GLOBAL);
|
||||
gtk_widget_add_controller (row, controller);
|
||||
|
||||
shortcut = gtk_shortcut_new ();
|
||||
gtk_shortcut_set_trigger (shortcut, shortcuts[i].create_trigger_func());
|
||||
gtk_shortcut_set_action (shortcut, gtk_callback_action_new (shortcut_activated, row, NULL));
|
||||
shortcut = gtk_shortcut_new (shortcuts[i].create_trigger_func(),
|
||||
gtk_callback_action_new (shortcut_activated, row, NULL));
|
||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller), shortcut);
|
||||
}
|
||||
}
|
||||
|
@ -6067,6 +6067,7 @@ gtk_shortcut_action_get_type
|
||||
<TITLE>GtkShortcut</TITLE>
|
||||
GtkShortcut
|
||||
gtk_shortcut_new
|
||||
gtk_shortcut_new_with_arguments
|
||||
gtk_shortcut_get_trigger
|
||||
gtk_shortcut_set_trigger
|
||||
gtk_shortcut_get_action
|
||||
|
@ -1822,9 +1822,8 @@ gtk_label_setup_mnemonic (GtkLabel *label)
|
||||
priv->mnemonic_controller = gtk_shortcut_controller_new ();
|
||||
gtk_event_controller_set_propagation_phase (priv->mnemonic_controller, GTK_PHASE_CAPTURE);
|
||||
gtk_shortcut_controller_set_scope (GTK_SHORTCUT_CONTROLLER (priv->mnemonic_controller), GTK_SHORTCUT_SCOPE_MANAGED);
|
||||
shortcut = gtk_shortcut_new ();
|
||||
gtk_shortcut_set_trigger (shortcut, gtk_mnemonic_trigger_new (priv->mnemonic_keyval));
|
||||
gtk_shortcut_set_action (shortcut, gtk_mnemonic_action_new ());
|
||||
shortcut = gtk_shortcut_new (gtk_mnemonic_trigger_new (priv->mnemonic_keyval),
|
||||
gtk_mnemonic_action_new ());
|
||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (priv->mnemonic_controller), shortcut);
|
||||
gtk_widget_add_controller (GTK_WIDGET (label), priv->mnemonic_controller);
|
||||
g_object_unref (shortcut);
|
||||
|
@ -200,15 +200,81 @@ gtk_shortcut_init (GtkShortcut *self)
|
||||
|
||||
/**
|
||||
* gtk_shortcut_new:
|
||||
* @trigger: (transfer full) (allow-none): The trigger that will trigger the shortcut
|
||||
* @action: (transfer full) (allow-none): The action that will be activated upon
|
||||
* triggering
|
||||
*
|
||||
* Creates a new empty #GtkShortcut that never triggers and activates nothing.
|
||||
* Creates a new #GtkShortcut that is triggered by @trigger and then activates
|
||||
* @action.
|
||||
*
|
||||
* Returns: a new #GtkShortcut
|
||||
**/
|
||||
GtkShortcut *
|
||||
gtk_shortcut_new (void)
|
||||
gtk_shortcut_new (GtkShortcutTrigger *trigger,
|
||||
GtkShortcutAction *action)
|
||||
{
|
||||
return g_object_new (GTK_TYPE_SHORTCUT, NULL);
|
||||
GtkShortcut *shortcut;
|
||||
|
||||
shortcut = g_object_new (GTK_TYPE_SHORTCUT,
|
||||
"action", action,
|
||||
"trigger", trigger,
|
||||
NULL);
|
||||
|
||||
if (trigger)
|
||||
gtk_shortcut_trigger_unref (trigger);
|
||||
if (action)
|
||||
gtk_shortcut_action_unref (action);
|
||||
|
||||
return shortcut;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_shortcut_new_with_arguments: (skip)
|
||||
* @trigger: (transfer full) (allow-none): The trigger that will trigger the shortcut
|
||||
* @action: (transfer full) (allow-none): The action that will be activated upon
|
||||
* triggering
|
||||
* @format_string: (allow-none): GVariant format string for arguments or %NULL for
|
||||
* no arguments
|
||||
* @...: arguments, as given by format string.
|
||||
*
|
||||
* Creates a new #GtkShortcut that is triggered by @trigger and then activates
|
||||
* @action with arguments given by @format_string.
|
||||
*
|
||||
* Returns: a new #GtkShortcut
|
||||
**/
|
||||
GtkShortcut *
|
||||
gtk_shortcut_new_with_arguments (GtkShortcutTrigger *trigger,
|
||||
GtkShortcutAction *action,
|
||||
const gchar *format_string,
|
||||
...)
|
||||
{
|
||||
GtkShortcut *shortcut;
|
||||
GVariant *args;
|
||||
|
||||
if (format_string)
|
||||
{
|
||||
va_list valist;
|
||||
va_start (valist, format_string);
|
||||
args = g_variant_new_va (format_string, NULL, &valist);
|
||||
va_end (valist);
|
||||
}
|
||||
else
|
||||
{
|
||||
args = NULL;
|
||||
}
|
||||
|
||||
shortcut = g_object_new (GTK_TYPE_SHORTCUT,
|
||||
"action", action,
|
||||
"arguments", args,
|
||||
"trigger", trigger,
|
||||
NULL);
|
||||
|
||||
if (trigger)
|
||||
gtk_shortcut_trigger_unref (trigger);
|
||||
if (action)
|
||||
gtk_shortcut_action_unref (action);
|
||||
|
||||
return shortcut;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,7 +30,13 @@ GDK_AVAILABLE_IN_ALL
|
||||
G_DECLARE_FINAL_TYPE (GtkShortcut, gtk_shortcut, GTK, SHORTCUT, GObject)
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkShortcut * gtk_shortcut_new (void);
|
||||
GtkShortcut * gtk_shortcut_new (GtkShortcutTrigger *trigger,
|
||||
GtkShortcutAction *action);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkShortcut * gtk_shortcut_new_with_arguments (GtkShortcutTrigger *trigger,
|
||||
GtkShortcutAction *action,
|
||||
const gchar *format_string,
|
||||
...);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GtkShortcutTrigger *
|
||||
|
@ -4367,9 +4367,8 @@ gtk_widget_class_add_binding (GtkWidgetClass *widget_class,
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class));
|
||||
|
||||
shortcut = gtk_shortcut_new ();
|
||||
gtk_shortcut_set_trigger (shortcut, gtk_keyval_trigger_new (keyval, mods));
|
||||
gtk_shortcut_set_action (shortcut, gtk_callback_action_new (func, NULL, NULL));
|
||||
shortcut = gtk_shortcut_new (gtk_keyval_trigger_new (keyval, mods),
|
||||
gtk_callback_action_new (func, NULL, NULL));
|
||||
if (format_string)
|
||||
{
|
||||
va_list args;
|
||||
@ -4417,9 +4416,8 @@ gtk_widget_class_add_binding_signal (GtkWidgetClass *widget_class,
|
||||
g_return_if_fail (g_signal_lookup (signal, G_TYPE_FROM_CLASS (widget_class)));
|
||||
/* XXX: validate variant format for signal */
|
||||
|
||||
shortcut = gtk_shortcut_new ();
|
||||
gtk_shortcut_set_trigger (shortcut, gtk_keyval_trigger_new (keyval, mods));
|
||||
gtk_shortcut_set_action (shortcut, gtk_signal_action_new (signal));
|
||||
shortcut = gtk_shortcut_new (gtk_keyval_trigger_new (keyval, mods),
|
||||
gtk_signal_action_new (signal));
|
||||
if (format_string)
|
||||
{
|
||||
va_list args;
|
||||
@ -4466,9 +4464,8 @@ gtk_widget_class_add_binding_action (GtkWidgetClass *widget_class,
|
||||
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, gtk_action_action_new (action_name));
|
||||
shortcut = gtk_shortcut_new (gtk_keyval_trigger_new (keyval, mods),
|
||||
gtk_action_action_new (action_name));
|
||||
if (format_string)
|
||||
{
|
||||
va_list args;
|
||||
|
@ -563,12 +563,11 @@ add_tab_bindings (GtkWidgetClass *widget_class,
|
||||
{
|
||||
GtkShortcut *shortcut;
|
||||
|
||||
shortcut = gtk_shortcut_new ();
|
||||
gtk_shortcut_set_trigger (shortcut,
|
||||
gtk_alternative_trigger_new (gtk_keyval_trigger_new (GDK_KEY_Tab, modifiers),
|
||||
gtk_keyval_trigger_new (GDK_KEY_KP_Tab, modifiers)));
|
||||
gtk_shortcut_set_action (shortcut, gtk_signal_action_new ("move-focus"));
|
||||
gtk_shortcut_set_arguments (shortcut, g_variant_new_tuple ((GVariant*[1]) { g_variant_new_int32 (direction) }, 1));
|
||||
shortcut = gtk_shortcut_new_with_arguments (
|
||||
gtk_alternative_trigger_new (gtk_keyval_trigger_new (GDK_KEY_Tab, modifiers),
|
||||
gtk_keyval_trigger_new (GDK_KEY_KP_Tab, modifiers)),
|
||||
gtk_signal_action_new ("move-focus"),
|
||||
"(i)", direction);
|
||||
|
||||
gtk_widget_class_add_shortcut (widget_class, shortcut);
|
||||
|
||||
@ -1766,9 +1765,8 @@ gtk_window_init (GtkWindow *window)
|
||||
controller = gtk_shortcut_controller_new ();
|
||||
gtk_event_controller_set_propagation_phase (controller, GTK_PHASE_CAPTURE);
|
||||
|
||||
shortcut = gtk_shortcut_new ();
|
||||
gtk_shortcut_set_trigger (shortcut, gtk_keyval_trigger_new (MENU_BAR_ACCEL, 0));
|
||||
gtk_shortcut_set_action (shortcut, gtk_callback_action_new (gtk_window_activate_menubar, NULL, NULL));
|
||||
shortcut = gtk_shortcut_new (gtk_keyval_trigger_new (MENU_BAR_ACCEL, 0),
|
||||
gtk_callback_action_new (gtk_window_activate_menubar, NULL, NULL));
|
||||
gtk_shortcut_controller_add_shortcut (GTK_SHORTCUT_CONTROLLER (controller), shortcut);
|
||||
gtk_event_controller_set_name (controller, "gtk-window-menubar-accel");
|
||||
gtk_widget_add_controller (widget, controller);
|
||||
|
Loading…
Reference in New Issue
Block a user