[glib] Switch to using variants for timestamps, split out signals



commit 85210bcf9b7f597aa2ad2a7087709c6091638805
Author: Colin Walters <walters verbum org>
Date:   Tue Jun 8 16:25:33 2010 -0400

    Switch to using variants for timestamps, split out signals
    
    Like how we're handling activation, use GVariant for timestamps.  To
    avoid polluting the GtkApplication API with GVariants, we rename the
    GApplication signals to "quit-with-data" and "action-with-data".
    GtkApplication will then wrap those as just "quit" and "action".
    
    https://bugzilla.gnome.org/show_bug.cgi?id=621002

 gio/gapplication.c      |   94 ++++++++++++++++++++++++----------------------
 gio/gapplication.h      |   27 +++++--------
 gio/gdbusapplication.c  |   47 +++++++++++++++--------
 gio/gio-marshal.list    |    2 +
 gio/gio.symbols         |    2 +-
 gio/tests/application.c |   63 +++++++++++++++++++++++++------
 gio/tests/testapp.c     |    4 +-
 gio/tests/testapps.c    |   17 ++++++--
 8 files changed, 159 insertions(+), 97 deletions(-)
---
diff --git a/gio/gapplication.c b/gio/gapplication.c
index 5981e9b..9f85db3 100644
--- a/gio/gapplication.c
+++ b/gio/gapplication.c
@@ -106,7 +106,7 @@
  *     <void/>
  *     <methodname>InvokeAction</methodname>
  *     <methodparam><modifier>in</modifier><type>s</type><parameter>action</parameter></methodparam>
- *     <methodparam><modifier>in</modifier><type>u</type><parameter>timestamp</parameter></methodparam>
+ *     <methodparam><modifier>in</modifier><type>a{sv}</type><parameter>data</parameter></methodparam>
  *   </methodsynopsis>
  *   <methodsynopsis>
  *     <type>a{s(sb)}</type>
@@ -116,7 +116,7 @@
  *   <methodsynopsis>
  *     <void/>
  *     <methodname>Quit</methodname>
- *     <methodparam><modifier>in</modifier><type>u</type><parameter>timestamp</parameter></methodparam>
+ *     <methodparam><modifier>in</modifier><type>a{sv}</type><parameter>data</parameter></methodparam>
  *   </methodsynopsis>
  *   <methodsynopsis>
  *     <modifier>Signal</modifier>
@@ -129,14 +129,13 @@
  * The <methodname>Activate</methodname> function is called on the existing
  * application instance when a second instance fails to take the bus name.
  * @arguments contains the commandline arguments given to the second instance
- * and @data contains platform-specific additional data, see
- * g_application_format_activation_data().
+ * and @data contains platform-specific additional data.
  * </para>
  * <para>
- * The <methodname>InvokeAction</methodname> function can be called to invoke
- * one of the actions exported by the application. The @timestamp parameter
- * should be taken from the user event that triggered the method call (e.g.
- * a button press event).
+ * The <methodname>InvokeAction</methodname> function can be called to
+ * invoke one of the actions exported by the application.  On X11
+ * platforms, the platform_data argument should have a "timestamp"
+ * parameter of type "u" with the server time of the initiating event.
  * </para>
  * <para>
  * The <methodname>ListActions</methodname> function returns a dictionary
@@ -145,9 +144,11 @@
  * for the action and a boolean that represents if the action is enabled or not.
  * </para>
  * <para>
- * The <methodname>Quit</methodname> function can be called to terminate
- * the application. The @timestamp parameter should be taken from the user
- * event that triggered the method call (e.g. a button press event).
+ * The <methodname>Quit</methodname> function can be called to
+ * terminate the application. The @data parameter contains
+ * platform-specific data.  On X11 platforms, the platform_data
+ * argument should have a "timestamp" parameter of type "u" with the
+ * server time of the initiating event.
  * </para>
  * <para>
  * The <methodname>ActionsChanged</methodname> signal is emitted when the
@@ -173,8 +174,8 @@ enum
 
 enum
 {
-  QUIT,
-  ACTION,
+  QUIT_WITH_DATA,
+  ACTION_WITH_DATA,
   PREPARE_ACTIVATION,
 
   LAST_SIGNAL
@@ -213,9 +214,9 @@ static gboolean _g_application_platform_acquire_single_instance (GApplication  *
                                                                  GError       **error);
 static void     _g_application_platform_remote_invoke_action    (GApplication  *app,
                                                                  const gchar   *action,
-                                                                 guint          timestamp);
+                                                                 GVariant      *platform_data);
 static void     _g_application_platform_remote_quit             (GApplication  *app,
-                                                                 guint          timestamp);
+                                                                 GVariant      *platform_data);
 static void     _g_application_platform_activate                (GApplication  *app,
                                                                  GVariant      *data) G_GNUC_NORETURN;
 static void     _g_application_platform_on_actions_changed      (GApplication  *app);
@@ -269,8 +270,8 @@ application_for_appid (const char *appid)
 }
 
 static gboolean
-g_application_default_quit (GApplication *application,
-                            guint         timestamp)
+g_application_default_quit_with_data (GApplication *application,
+				      GVariant     *platform_data)
 {
   g_return_val_if_fail (application->priv->mainloop != NULL, FALSE);
   g_main_loop_quit (application->priv->mainloop);
@@ -534,8 +535,7 @@ g_application_remove_action (GApplication *application,
  * g_application_invoke_action:
  * @application: a #GApplication
  * @name: the name of the action to invoke
- * @timestamp: the timestamp that is going to be passed to
- *   the #GApplication::action signal
+ * @platform_data: (allow-none): platform-specific event data
  *
  * Invokes the action @name of the passed #GApplication.
  *
@@ -555,19 +555,21 @@ g_application_remove_action (GApplication *application,
 void
 g_application_invoke_action (GApplication *application,
                              const gchar  *name,
-                             guint         timestamp)
+                             GVariant     *platform_data)
 {
   GApplicationPrivate *priv;
   GApplicationAction *action;
 
   g_return_if_fail (G_IS_APPLICATION (application));
   g_return_if_fail (name != NULL);
+  g_return_if_fail (platform_data == NULL
+                    || g_variant_is_of_type (platform_data, "a{sv}"));
 
   priv = application->priv;
 
   if (priv->is_remote)
     {
-      _g_application_platform_remote_invoke_action (application, name, timestamp);
+      _g_application_platform_remote_invoke_action (application, name, platform_data);
       return;
     }
 
@@ -576,10 +578,10 @@ g_application_invoke_action (GApplication *application,
   if (!action->enabled)
     return;
 
-  g_signal_emit (application, application_signals[ACTION],
+  g_signal_emit (application, application_signals[ACTION_WITH_DATA],
                  g_quark_from_string (name),
                  name,
-                 timestamp);
+                 platform_data);
 }
 
 /**
@@ -751,9 +753,9 @@ g_application_run (GApplication *application)
 }
 
 /**
- * g_application_quit:
+ * g_application_quit_with_data:
  * @application: a #GApplication
- * @timestamp: Platform-specific event timestamp, may be 0 for default
+ * @platform_data: (allow-none): platform-specific data
  *
  * Request that the application quits.
  *
@@ -770,20 +772,22 @@ g_application_run (GApplication *application)
  * Since: 2.26
  */
 gboolean
-g_application_quit (GApplication *application,
-                    guint         timestamp)
+g_application_quit_with_data (GApplication *application,
+			      GVariant     *platform_data)
 {
   gboolean retval = FALSE;
 
   g_return_val_if_fail (G_IS_APPLICATION (application), FALSE);
+  g_return_val_if_fail (platform_data == NULL
+			|| g_variant_is_of_type (platform_data, "a{sv}"), FALSE);
 
   if (application->priv->is_remote)
     {
-       _g_application_platform_remote_quit (application, timestamp);
+       _g_application_platform_remote_quit (application, platform_data);
        retval = TRUE;
     }
   else
-    g_signal_emit (application, application_signals[QUIT], 0, timestamp, &retval);
+    g_signal_emit (application, application_signals[QUIT_WITH_DATA], 0, platform_data, &retval);
 
   return retval;
 }
@@ -976,12 +980,12 @@ g_application_class_init (GApplicationClass *klass)
   gobject_class->finalize = g_application_finalize;
 
   klass->run = g_application_default_run;
-  klass->quit = g_application_default_quit;
+  klass->quit_with_data = g_application_default_quit_with_data;
 
   /**
-   * GApplication::quit:
+   * GApplication::quit-with-data:
    * @application: the object on which the signal is emitted
-   * @timestamp: Platform-specific event timestamp, may be 0 for default
+   * @platform_data: Platform-specific data, or %NULL
    *
    * This signal is emitted when the Quit action is invoked on the
    * application.
@@ -992,21 +996,21 @@ g_application_class_init (GApplicationClass *klass)
    * Returns: %TRUE if the signal has been handled, %FALSE to continue
    *   signal emission
    */
-  application_signals[QUIT] =
-    g_signal_new (g_intern_static_string ("quit"),
+  application_signals[QUIT_WITH_DATA] =
+    g_signal_new (g_intern_static_string ("quit-with-data"),
                   G_OBJECT_CLASS_TYPE (klass),
                   G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (GApplicationClass, quit),
+                  G_STRUCT_OFFSET (GApplicationClass, quit_with_data),
                   g_signal_accumulator_true_handled, NULL,
-                  _gio_marshal_BOOLEAN__UINT,
+                  _gio_marshal_BOOLEAN__BOXED,
                   G_TYPE_BOOLEAN, 1,
-                  G_TYPE_UINT);
+                  G_TYPE_VARIANT);
 
   /**
-   * GApplication::action:
+   * GApplication::action-with-data:
    * @application: the object on which the signal is emitted
    * @name: The name of the activated action
-   * @timestamp: Platform-specific event timestamp, may be 0 for default
+   * @platform_data: Platform-specific data, or %NULL
    *
    * This signal is emitted when an action is activated. The action name
    * is passed as the first argument, but also as signal detail, so it
@@ -1014,22 +1018,22 @@ g_application_class_init (GApplicationClass *klass)
    *
    * The signal is never emitted for disabled actions.
    */
-  application_signals[ACTION] =
-    g_signal_new (g_intern_static_string ("action"),
+  application_signals[ACTION_WITH_DATA] =
+    g_signal_new (g_intern_static_string ("action-with-data"),
                   G_OBJECT_CLASS_TYPE (klass),
                   G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_DETAILED,
-                  G_STRUCT_OFFSET (GApplicationClass, action),
+                  G_STRUCT_OFFSET (GApplicationClass, action_with_data),
                   NULL, NULL,
-                  _gio_marshal_VOID__STRING_UINT,
+                  _gio_marshal_VOID__STRING_BOXED,
                   G_TYPE_NONE, 2,
                   G_TYPE_STRING,
-                  G_TYPE_UINT);
+                  G_TYPE_VARIANT);
 
    /**
    * GApplication::prepare-activation:
    * @application: the object on which the signal is emitted
    * @arguments: A #GVariant with the signature "aay"
-   * @platform_data: A #GVariant with the signature "a{sv}"
+   * @platform_data: A #GVariant with the signature "a{sv}", or %NULL
    *
    * This signal is emitted when a non-primary process for a given
    * application is invoked while your application is running; for
diff --git a/gio/gapplication.h b/gio/gapplication.h
index 7a77199..898c43a 100644
--- a/gio/gapplication.h
+++ b/gio/gapplication.h
@@ -66,7 +66,6 @@ struct _GApplication
  * @quit: class handler for the #GApplication::quit signal
  * @prepare_activation: class handler for the #GApplication::prepare-activation signal
  * @run: virtual function, called by g_application_run()
- * @format_activation_data: virtual function, called by g_application_format_activation_data()
  *
  * The <structname>GApplicationClass</structname> structure contains
  * private data only
@@ -80,19 +79,17 @@ struct _GApplicationClass
 
   /*< public >*/
   /* signals */
-  void        (* action) (GApplication *application,
-                          const gchar  *action_name,
-                          guint         timestamp);
-  gboolean    (* quit)   (GApplication *application,
-                          guint         timestamp);
+  void        (* action_with_data) (GApplication *application,
+				    const gchar  *action_name,
+				    GVariant     *platform_data);
+  gboolean    (* quit_with_data)   (GApplication *application,
+				    GVariant     *platform_data);
   void        (* prepare_activation)   (GApplication  *application,
                                         GVariant      *arguments,
                                         GVariant      *platform_data);
 
   /* vfuncs */
   void        (* run)    (GApplication *application);
-  void        (*format_activation_data) (GApplication    *application,
-                                         GVariantBuilder *builder);
 
   /*< private >*/
   /* Padding for future expansion */
@@ -130,22 +127,18 @@ void                    g_application_set_action_enabled        (GApplication
                                                                  gboolean           enabled);
 gboolean                g_application_get_action_enabled        (GApplication      *application,
                                                                  const gchar       *name);
-G_CONST_RETURN gchar *  g_application_get_action_description    (GApplication *application,
-                                                                 const gchar  *name);
+G_CONST_RETURN gchar *  g_application_get_action_description    (GApplication      *application,
+                                                                 const gchar       *name);
 void                    g_application_invoke_action             (GApplication      *application,
                                                                  const gchar       *name,
-                                                                 guint              timestamp);
+                                                                 GVariant          *platform_data);
 
 void                    g_application_run                       (GApplication      *application);
-gboolean                g_application_quit                      (GApplication      *app,
-                                                                 guint              timestamp);
+gboolean                g_application_quit_with_data            (GApplication      *app,
+                                                                 GVariant          *platform_data);
 
 gboolean                g_application_is_remote                 (GApplication      *application);
 
-void                    g_application_format_activation_data    (GApplication      *app,
-                                                                 GVariantBuilder   *builder);
-
-
 G_END_DECLS
 
 #endif /* __G_APPLICATION_H__ */
diff --git a/gio/gdbusapplication.c b/gio/gdbusapplication.c
index e687199..e0f1fec 100644
--- a/gio/gdbusapplication.c
+++ b/gio/gdbusapplication.c
@@ -39,12 +39,15 @@ application_dbus_method_call (GDBusConnection       *connection,
 
   if (strcmp (method_name, "Quit") == 0)
     {
-      guint32 timestamp;
-      g_variant_get (parameters, "(u)", &timestamp);
+      GVariant *platform_data;
+
+      g_variant_get (parameters, "(@a{sv})", &platform_data);
 
       g_dbus_method_invocation_return_value (invocation, NULL);
 
-      g_application_quit (app, timestamp);
+      g_application_quit_with_data (app, platform_data);
+
+      g_variant_unref (platform_data);
     }
   else if (strcmp (method_name, "ListActions") == 0)
     {
@@ -68,10 +71,10 @@ application_dbus_method_call (GDBusConnection       *connection,
   else if (strcmp (method_name, "InvokeAction") == 0)
     {
       const char *action_name;
-      guint32 timestamp;
+      GVariant *platform_data;
       GApplicationAction *action;
 
-      g_variant_get (parameters, "(&su)", &action_name, &timestamp);
+      g_variant_get (parameters, "(&s a{sv})", &action_name, &platform_data);
 
       action = g_hash_table_lookup (app->priv->actions, action_name);
 
@@ -80,12 +83,15 @@ application_dbus_method_call (GDBusConnection       *connection,
           char *errmsg  = g_strdup_printf ("Invalid action: %s", action_name);
           g_dbus_method_invocation_return_dbus_error (invocation, G_APPLICATION_IFACE ".InvalidAction", errmsg);
           g_free (errmsg);
+	  g_variant_unref (platform_data);
           return;
         }
 
-      g_signal_emit (app, application_signals[ACTION], g_quark_from_string (action_name), action_name, (guint)timestamp);
+      g_signal_emit (app, application_signals[ACTION_WITH_DATA],
+		     g_quark_from_string (action_name), action_name, platform_data);
 
       g_dbus_method_invocation_return_value (invocation, NULL);
+      g_variant_unref (platform_data);
     }
   else if (strcmp (method_name, "Activate") == 0)
     {
@@ -107,8 +113,8 @@ static const GDBusArgInfo application_quit_in_args[] =
 {
   {
     -1,
-    "timestamp",
-    "u",
+    "platform_data",
+    "a{sv}",
     NULL
   }
 };
@@ -143,8 +149,8 @@ static const GDBusArgInfo application_invoke_action_in_args[] =
   },
   {
     -1,
-    "timestamp",
-    "u",
+    "platform_data",
+    "a{sv}",
     NULL
   }
 };
@@ -253,6 +259,15 @@ static GDBusInterfaceVTable application_dbus_vtable =
   NULL
 };
 
+static GVariant *
+create_empty_vardict ()
+{
+  GVariantBuilder builder;
+
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  return g_variant_builder_end (&builder);
+}
+
 static gchar *
 application_path_from_appid (const gchar *appid)
 {
@@ -368,7 +383,7 @@ _g_application_platform_on_actions_changed (GApplication *app)
 static void
 _g_application_platform_remote_invoke_action (GApplication  *app,
                                               const gchar   *action,
-                                              guint          timestamp)
+                                              GVariant      *platform_data)
 {
   GVariant *result;
 
@@ -379,9 +394,9 @@ _g_application_platform_remote_invoke_action (GApplication  *app,
                                         app->priv->dbus_path,
                                         G_APPLICATION_IFACE,
                                         "InvokeAction",
-                                        g_variant_new ("(su)",
+                                        g_variant_new ("(s a{sv})",
                                                        action,
-                                                       timestamp),
+                                                       platform_data || create_empty_vardict ()),
                                         NULL, 0, -1, NULL, NULL);
   if (result)
     g_variant_unref (result);
@@ -389,7 +404,7 @@ _g_application_platform_remote_invoke_action (GApplication  *app,
 
 static void
 _g_application_platform_remote_quit (GApplication *app,
-                                     guint         timestamp)
+                                     GVariant     *platform_data)
 {
   GVariant *result;
 
@@ -400,8 +415,8 @@ _g_application_platform_remote_quit (GApplication *app,
                                         app->priv->dbus_path,
                                         G_APPLICATION_IFACE,
                                         "Quit",
-                                        g_variant_new ("(u)",
-                                                       timestamp),
+                                        g_variant_new ("(@a{sv})",
+                                                       platform_data || create_empty_vardict ()),
                                         NULL, 0, -1, NULL, NULL);
   if (result)
     g_variant_unref (result);
diff --git a/gio/gio-marshal.list b/gio/gio-marshal.list
index 14d7504..f4abf4d 100644
--- a/gio/gio-marshal.list
+++ b/gio/gio-marshal.list
@@ -6,6 +6,8 @@ BOOLEAN:OBJECT,OBJECT
 VOID:STRING,BOXED,BOXED
 BOOL:POINTER,INT
 BOOL:UINT
+BOOL:BOXED
+BOOL:VOID
 VOID:STRING,STRING,BOXED
 VOID:BOOL,BOXED
 VOID:BOXED,BOXED
diff --git a/gio/gio.symbols b/gio/gio.symbols
index 689f96e..690dd81 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -42,7 +42,7 @@ g_application_register_with_data
 g_application_invoke_action
 g_application_list_actions
 g_application_run
-g_application_quit
+g_application_quit_with_data
 g_application_is_remote
 #endif
 #endif
diff --git a/gio/tests/application.c b/gio/tests/application.c
index d8a1a63..d2e60dc 100644
--- a/gio/tests/application.c
+++ b/gio/tests/application.c
@@ -21,20 +21,60 @@ static gboolean action_invoked = FALSE;
 static void
 on_app_action (GApplication *application,
                const gchar  *action_name,
-               guint         action_timestamp)
+               GVariant     *platform_data)
 {
+  gboolean found_timestamp;
+  GVariantIter *iter;
+  const char *key;
+  guint action_timestamp;
+  GVariant *value;
+  
   if (g_test_verbose ())
-    g_print ("Action '%s' invoked (timestamp: %u, expected: %u)\n",
-             action_name,
-             action_timestamp,
-             timestamp);
+    {
+      char *str = g_variant_print (platform_data, FALSE);
+      g_print ("Action '%s' invoked (data: %s, expected: %u)\n",
+	       action_name,
+	       str,
+	       timestamp);
+      g_free (str);
+    }
 
   g_assert_cmpstr (action_name, ==, "About");
-  g_assert_cmpint (action_timestamp, ==, timestamp);
+
+  g_variant_get (platform_data, "a{sv}", &iter);
+  found_timestamp = FALSE;
+  while (g_variant_iter_next (iter, "{&sv}",
+			      &key, &value))
+    {
+      if (g_strcmp0 ("timestamp", key) == 0)
+	{
+	  found_timestamp = TRUE;
+	  g_variant_get (value, "u", &action_timestamp);
+	  break;
+	}
+    }
+
+  g_variant_iter_free (iter);
+
+  g_assert_cmpuint (timestamp, ==, action_timestamp);
 
   action_invoked = TRUE;
 }
 
+static GVariant *
+create_timestamp_data ()
+{
+  GVariantBuilder builder;
+
+  timestamp = 42 + timestamp;
+
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  g_variant_builder_add (&builder, "{sv}",
+			 "timestamp", g_variant_new ("u", timestamp));
+  
+  return g_variant_builder_end (&builder);
+}
+
 static gboolean
 check_invoke_action (gpointer data)
 {
@@ -42,12 +82,11 @@ check_invoke_action (gpointer data)
 
   if (state == INVOKE_ACTION)
     {
-      timestamp = (guint) time (NULL);
-
       if (g_test_verbose ())
         g_print ("Invoking About...\n");
 
-      g_application_invoke_action (application, "About", timestamp);
+      g_application_invoke_action (application, "About", create_timestamp_data ());
+      
       state = CHECK_ACTION;
       return TRUE;
     }
@@ -78,7 +117,7 @@ check_invoke_action (gpointer data)
       if (g_test_verbose ())
         g_print ("Invoking disabled About action...\n");
 
-      g_application_invoke_action (application, "About", (guint) time (NULL));
+      g_application_invoke_action (application, "About", create_timestamp_data ());
       state = CHECK_DISABLED_ACTION;
       return TRUE;
     }
@@ -98,7 +137,7 @@ check_invoke_action (gpointer data)
       if (g_test_verbose ())
         g_print ("Test complete\n");
 
-      g_application_quit (application, (guint) time (NULL));
+      g_application_quit_with_data (application, create_timestamp_data ());
       return FALSE;
     }
 
@@ -113,7 +152,7 @@ test_basic (void)
   app = g_application_new_and_register ("org.gtk.TestApplication", 0, NULL);
   g_application_add_action (app, "About", "Print an about message");
 
-  g_signal_connect (app, "action::About", G_CALLBACK (on_app_action), NULL);
+  g_signal_connect (app, "action-with-data::About", G_CALLBACK (on_app_action), NULL);
 
   state = INVOKE_ACTION;
   g_timeout_add (100, check_invoke_action, app);
diff --git a/gio/tests/testapp.c b/gio/tests/testapp.c
index 85f93b7..34e88d6 100644
--- a/gio/tests/testapp.c
+++ b/gio/tests/testapp.c
@@ -12,7 +12,7 @@ static gboolean action3_added = FALSE;
 static void
 on_app_action (GApplication *application,
                const gchar  *action_name,
-               guint         action_timestamp)
+               GVariant     *platform_data)
 {
   if (strcmp (action_name, "action1") == 0)
     exit (1);
@@ -72,7 +72,7 @@ main (int argc, char *argv[])
     {
       g_application_add_action (app, "action1", "Action1");
       g_application_add_action (app, "action2", "Action2");
-      g_signal_connect (app, "action",
+      g_signal_connect (app, "action-with-data",
                         G_CALLBACK (on_app_action), NULL);
       g_signal_connect (app, "prepare-activation",
                         G_CALLBACK (on_app_activated), NULL);
diff --git a/gio/tests/testapps.c b/gio/tests/testapps.c
index 00a5f9f..854d7fa 100644
--- a/gio/tests/testapps.c
+++ b/gio/tests/testapps.c
@@ -290,6 +290,15 @@ on_name_disappeared_quit (GDBusConnection *connection,
   g_main_loop_quit (loop);
 }
 
+static GVariant *
+create_empty_vardict ()
+{
+  GVariantBuilder builder;
+
+  g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+  return g_variant_builder_end (&builder);
+}
+
 static gboolean
 call_quit (gpointer data)
 {
@@ -303,8 +312,8 @@ call_quit (gpointer data)
                                      "/org/gtk/test/app",
                                      "org.gtk.Application",
                                      "Quit",
-                                     g_variant_new ("(u)", 0),
-                                     NULL,
+                                     g_variant_new ("(@a{sv})", create_empty_vardict ()),
+				     NULL,
                                      G_DBUS_CALL_FLAGS_NONE,
                                      -1,
                                      NULL,
@@ -447,9 +456,9 @@ invoke_action (gpointer user_data)
                                      "/org/gtk/test/app",
                                      "org.gtk.Application",
                                      "InvokeAction",
-                                     g_variant_new ("(su)",
+                                     g_variant_new ("(s a{sv})",
                                                     action,
-                                                    0),
+                                                    create_empty_vardict ()),
                                      NULL,
                                      G_DBUS_CALL_FLAGS_NONE,
                                      -1,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]