bindings: Make gtk_bindings_add_callback() allow for variant args
authorBenjamin Otte <otte@redhat.com>
Wed, 16 Oct 2019 01:07:43 +0000 (03:07 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 16 Oct 2019 19:45:33 +0000 (21:45 +0200)
docs/reference/gtk/gtk4-sections.txt
gtk/gtkbindings.c
gtk/gtkbindings.h

index faf10c55255e8d3ef9d99e1d4df6d8117e2d7443..19e6d040b5bfb0fe0751afb58c8153bf4a5239c7 100644 (file)
@@ -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
index f14a7ac45e2c611ebb123bbd7118234a50ac252f..fd4d62b0b03dbbfaa0115e0e6e0994bc1a63cf00 100644 (file)
@@ -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));
 
 }
 
index 9d68ce301ecd85fec4a71d5c9c05ae10411b9494..20df806ae34b0c375e654ac4102d585755d3795b 100644 (file)
 
 #include <gdk/gdk.h>
 #include <gtk/gtkenums.h>
-#include <gtk/gtkwidget.h>
+#include <gtk/gtktypes.h>
 
 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);