From: Benjamin Otte Date: Wed, 16 Oct 2019 01:07:43 +0000 (+0200) Subject: bindings: Make gtk_bindings_add_callback() allow for variant args X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~708^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d0e14f79a62addcd7ef6f81c85397cae864d0ef2;p=gtk4.git bindings: Make gtk_bindings_add_callback() allow for variant args --- diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt index faf10c5525..19e6d040b5 100644 --- a/docs/reference/gtk/gtk4-sections.txt +++ b/docs/reference/gtk/gtk4-sections.txt @@ -5249,6 +5249,7 @@ gtk_bindings_activate_event gtk_binding_set_activate gtk_binding_entry_add_action gtk_binding_entry_add_action_variant +GtkBindingCallback gtk_binding_entry_add_callback gtk_binding_entry_add_signal gtk_binding_entry_add_signal_from_string diff --git a/gtk/gtkbindings.c b/gtk/gtkbindings.c index f14a7ac45e..fd4d62b0b0 100644 --- a/gtk/gtkbindings.c +++ b/gtk/gtkbindings.c @@ -180,10 +180,11 @@ struct _GtkBindingSignalAction struct _GtkBindingSignalCallback { - GtkBindingSignal parent; - GtkCallback callback; - gpointer user_data; - GDestroyNotify user_destroy; + GtkBindingSignal parent; + GtkBindingCallback callback; + GVariant *args; + gpointer user_data; + GDestroyNotify user_destroy; }; /* --- variables --- */ @@ -230,9 +231,10 @@ binding_signal_new_action (const gchar *action_name, } static GtkBindingSignal * -binding_signal_new_callback (GtkCallback callback, - gpointer user_data, - GDestroyNotify user_destroy) +binding_signal_new_callback (GtkBindingCallback callback, + GVariant *args, + gpointer user_data, + GDestroyNotify user_destroy) { GtkBindingSignalCallback *signal; @@ -240,6 +242,9 @@ binding_signal_new_callback (GtkCallback callback, signal->parent.next = NULL; signal->parent.action_type = GTK_BINDING_CALLBACK; signal->callback = callback; + signal->args = args; + if (args) + g_variant_ref_sink (args); signal->user_data = user_data; signal->user_destroy = user_destroy; @@ -755,7 +760,7 @@ binding_signal_activate_callback (GtkBindingSignalCallback *sig, return FALSE; } - sig->callback (GTK_WIDGET (object), sig->user_data); + sig->callback (GTK_WIDGET (object), sig->args, sig->user_data); return TRUE; } @@ -1294,12 +1299,13 @@ gtk_binding_entry_add_action (GtkBindingSet *binding_set, } void -gtk_binding_entry_add_callback (GtkBindingSet *binding_set, - guint keyval, - GdkModifierType modifiers, - GtkCallback callback, - gpointer user_data, - GDestroyNotify user_destroy) +gtk_binding_entry_add_callback (GtkBindingSet *binding_set, + guint keyval, + GdkModifierType modifiers, + GtkBindingCallback callback, + GVariant *args, + gpointer user_data, + GDestroyNotify user_destroy) { g_return_if_fail (binding_set != NULL); g_return_if_fail (callback != NULL); @@ -1307,7 +1313,7 @@ gtk_binding_entry_add_callback (GtkBindingSet *binding_set, gtk_binding_entry_add_binding_signal (binding_set, keyval, modifiers, - binding_signal_new_callback (callback, user_data, user_destroy)); + binding_signal_new_callback (callback, args, user_data, user_destroy)); } diff --git a/gtk/gtkbindings.h b/gtk/gtkbindings.h index 9d68ce301e..20df806ae3 100644 --- a/gtk/gtkbindings.h +++ b/gtk/gtkbindings.h @@ -35,12 +35,25 @@ #include #include -#include +#include G_BEGIN_DECLS typedef struct _GtkBindingSet GtkBindingSet; +/** + * GtkBindingCallback: + * @widget: The object to invoke the callback on + * @args: (allow-none): The arguments or %NULL if none + * @user_data: The user data passed when registering the callback + * + * Prototype of the callback function registered with + * gtk_binding_entry_add_callback. + */ +typedef void (* GtkBindingCallback) (GtkWidget *widget, + GVariant *args, + gpointer user_data); + GDK_AVAILABLE_IN_ALL GtkBindingSet *gtk_binding_set_new (const gchar *set_name); GDK_AVAILABLE_IN_ALL @@ -96,7 +109,8 @@ GDK_AVAILABLE_IN_ALL void gtk_binding_entry_add_callback(GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers, - GtkCallback callback, + GtkBindingCallback callback, + GVariant *args, gpointer user_data, GDestroyNotify user_destroy);