[glib/wip/chergert/marshall-matters: 84/84] gio: remove use of generic marshaller from GIO objects



commit 22ba4411cc14b0ab93d70491ad4f2f7b94ad77eb
Author: Christian Hergert <chergert redhat com>
Date:   Thu May 30 19:29:18 2019 -0700

    gio: remove use of generic marshaller from GIO objects
    
    Using the generic marshaller has drawbacks beyond performance. One such
    drawback is that it breaks the stack unwinding from the Linux kernel due
    to having unsufficient data to walk past ffi_call_unixt64. That means that
    performance profiling by application developers looks grouped among
    seemingly unrelated code paths.
    
    While we can't fix the kernel unwinding here, we can provide proper
    c_marshallers and va_marshallers for objects within Gio so that
    performance profiling of applications is more reliable.
    
    Related to GNOME/Initiatives#10

 gio/gactiongroup.c             |   11 +-
 gio/gappinfo.c                 |    7 +-
 gio/gapplication.c             |   24 +-
 gio/gdbusauthobserver.c        |   11 +-
 gio/gdbusconnection.c          |    6 +-
 gio/gdbusinterfaceskeleton.c   |    6 +-
 gio/gdbusobjectmanager.c       |   11 +-
 gio/gdbusobjectmanagerclient.c |   11 +-
 gio/gdbusproxy.c               |   11 +-
 gio/gdbusserver.c              |    6 +-
 gio/gdtlsconnection.c          |    6 +-
 gio/gfilemonitor.c             |    6 +-
 gio/glistmodel.c               |    6 +-
 gio/gmarshal-internal.c        | 2632 ++++++++++++++++++++++++++++++++++++++++
 gio/gmarshal-internal.h        |  503 ++++++++
 gio/gmarshal-internal.list     |   28 +
 gio/gmenumodel.c               |    7 +-
 gio/gmountoperation.c          |   22 +-
 gio/gsettings.c                |   12 +-
 gio/gsocketclient.c            |    6 +-
 gio/gsocketlistener.c          |    7 +-
 gio/gsocketservice.c           |    7 +-
 gio/gthreadedsocketservice.c   |    7 +-
 gio/gtlsconnection.c           |    6 +-
 gio/meson.build                |   14 +-
 25 files changed, 3339 insertions(+), 34 deletions(-)
---
diff --git a/gio/gactiongroup.c b/gio/gactiongroup.c
index cb10d8667..2345ce3b9 100644
--- a/gio/gactiongroup.c
+++ b/gio/gactiongroup.c
@@ -21,6 +21,7 @@
 #include "gactiongroup.h"
 #include "gaction.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gactiongroup
@@ -303,10 +304,13 @@ g_action_group_default_init (GActionGroupInterface *iface)
                   G_STRUCT_OFFSET (GActionGroupInterface,
                                    action_enabled_changed),
                   NULL, NULL,
-                  NULL,
+                  _g_cclosure_marshal_VOID__STRING_BOOLEAN,
                   G_TYPE_NONE, 2,
                   G_TYPE_STRING,
                   G_TYPE_BOOLEAN);
+  g_signal_set_va_marshaller (g_action_group_signals[SIGNAL_ACTION_ENABLED_CHANGED],
+                              G_TYPE_FROM_INTERFACE (iface),
+                              _g_cclosure_marshal_VOID__STRING_BOOLEANv);
 
   /**
    * GActionGroup::action-state-changed:
@@ -327,10 +331,13 @@ g_action_group_default_init (GActionGroupInterface *iface)
                   G_STRUCT_OFFSET (GActionGroupInterface,
                                    action_state_changed),
                   NULL, NULL,
-                  NULL,
+                  _g_cclosure_marshal_VOID__STRING_VARIANT,
                   G_TYPE_NONE, 2,
                   G_TYPE_STRING,
                   G_TYPE_VARIANT);
+  g_signal_set_va_marshaller (g_action_group_signals[SIGNAL_ACTION_STATE_CHANGED],
+                              G_TYPE_FROM_INTERFACE (iface),
+                              _g_cclosure_marshal_VOID__STRING_VARIANTv);
 }
 
 /**
diff --git a/gio/gappinfo.c b/gio/gappinfo.c
index b2135e644..6f2b72c4e 100644
--- a/gio/gappinfo.c
+++ b/gio/gappinfo.c
@@ -27,6 +27,7 @@
 #include "gcancellable.h"
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 #include <gioerror.h>
 #include <gfile.h>
 
@@ -1177,9 +1178,13 @@ g_app_launch_context_class_init (GAppLaunchContextClass *klass)
                                     G_OBJECT_CLASS_TYPE (object_class),
                                     G_SIGNAL_RUN_LAST,
                                     G_STRUCT_OFFSET (GAppLaunchContextClass, launched),
-                                    NULL, NULL, NULL,
+                                    NULL, NULL,
+                                    _g_cclosure_marshal_VOID__OBJECT_VARIANT,
                                     G_TYPE_NONE, 2,
                                     G_TYPE_APP_INFO, G_TYPE_VARIANT);
+  g_signal_set_va_marshaller (signals[LAUNCHED],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__OBJECT_VARIANTv);
 }
 
 static void
diff --git a/gio/gapplication.c b/gio/gapplication.c
index 3fbae406c..8ad4d0ff0 100644
--- a/gio/gapplication.c
+++ b/gio/gapplication.c
@@ -38,6 +38,7 @@
 #include "gfile.h"
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 #include <string.h>
 
@@ -1572,8 +1573,12 @@ g_application_class_init (GApplicationClass *class)
   g_application_signals[SIGNAL_OPEN] =
     g_signal_new (I_("open"), G_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GApplicationClass, open),
-                  NULL, NULL, NULL,
+                  NULL, NULL,
+                  _g_cclosure_marshal_VOID__POINTER_INT_STRING,
                   G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_INT, G_TYPE_STRING);
+  g_signal_set_va_marshaller (g_application_signals[SIGNAL_OPEN],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_VOID__POINTER_INT_STRINGv);
 
   /**
    * GApplication::command-line:
@@ -1592,8 +1597,11 @@ g_application_class_init (GApplicationClass *class)
     g_signal_new (I_("command-line"), G_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GApplicationClass, command_line),
                   g_signal_accumulator_first_wins, NULL,
-                  NULL,
+                  _g_cclosure_marshal_INT__OBJECT,
                   G_TYPE_INT, 1, G_TYPE_APPLICATION_COMMAND_LINE);
+  g_signal_set_va_marshaller (g_application_signals[SIGNAL_COMMAND_LINE],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_INT__OBJECTv);
 
   /**
    * GApplication::handle-local-options:
@@ -1652,8 +1660,12 @@ g_application_class_init (GApplicationClass *class)
   g_application_signals[SIGNAL_HANDLE_LOCAL_OPTIONS] =
     g_signal_new (I_("handle-local-options"), G_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GApplicationClass, handle_local_options),
-                  g_application_handle_local_options_accumulator, NULL, NULL,
+                  g_application_handle_local_options_accumulator, NULL,
+                  _g_cclosure_marshal_INT__BOXED,
                   G_TYPE_INT, 1, G_TYPE_VARIANT_DICT);
+  g_signal_set_va_marshaller (g_application_signals[SIGNAL_HANDLE_LOCAL_OPTIONS],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_INT__BOXEDv);
 
   /**
    * GApplication::name-lost:
@@ -1672,8 +1684,12 @@ g_application_class_init (GApplicationClass *class)
   g_application_signals[SIGNAL_NAME_LOST] =
     g_signal_new (I_("name-lost"), G_TYPE_APPLICATION, G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GApplicationClass, name_lost),
-                  g_signal_accumulator_true_handled, NULL, NULL,
+                  g_signal_accumulator_true_handled, NULL,
+                  _g_cclosure_marshal_BOOLEAN__VOID,
                   G_TYPE_BOOLEAN, 0);
+  g_signal_set_va_marshaller (g_application_signals[SIGNAL_NAME_LOST],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_BOOLEAN__VOIDv);
 }
 
 /* Application ID validity {{{1 */
diff --git a/gio/gdbusauthobserver.c b/gio/gdbusauthobserver.c
index 4590ffcae..be36c9dac 100644
--- a/gio/gdbusauthobserver.c
+++ b/gio/gdbusauthobserver.c
@@ -27,6 +27,7 @@
 #include "gdbusprivate.h"
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gdbusauthobserver
@@ -198,11 +199,14 @@ g_dbus_auth_observer_class_init (GDBusAuthObserverClass *klass)
                   G_STRUCT_OFFSET (GDBusAuthObserverClass, authorize_authenticated_peer),
                   _g_signal_accumulator_false_handled,
                   NULL, /* accu_data */
-                  NULL,
+                  _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECT,
                   G_TYPE_BOOLEAN,
                   2,
                   G_TYPE_IO_STREAM,
                   G_TYPE_CREDENTIALS);
+  g_signal_set_va_marshaller (signals[AUTHORIZE_AUTHENTICATED_PEER_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECTv);
 
   /**
    * GDBusAuthObserver::allow-mechanism:
@@ -222,10 +226,13 @@ g_dbus_auth_observer_class_init (GDBusAuthObserverClass *klass)
                   G_STRUCT_OFFSET (GDBusAuthObserverClass, allow_mechanism),
                   _g_signal_accumulator_false_handled,
                   NULL, /* accu_data */
-                  NULL,
+                  _g_cclosure_marshal_BOOLEAN__STRING,
                   G_TYPE_BOOLEAN,
                   1,
                   G_TYPE_STRING);
+  g_signal_set_va_marshaller (signals[ALLOW_MECHANISM_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_BOOLEAN__STRINGv);
 }
 
 static void
diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
index 677fa76f9..82050204e 100644
--- a/gio/gdbusconnection.c
+++ b/gio/gdbusconnection.c
@@ -111,6 +111,7 @@
 #include "giostream.h"
 #include "gasyncresult.h"
 #include "gtask.h"
+#include "gmarshal-internal.h"
 
 #ifdef G_OS_UNIX
 #include "gunixconnection.h"
@@ -1049,11 +1050,14 @@ g_dbus_connection_class_init (GDBusConnectionClass *klass)
                                          G_STRUCT_OFFSET (GDBusConnectionClass, closed),
                                          NULL,
                                          NULL,
-                                         NULL,
+                                         _g_cclosure_marshal_VOID__BOOLEAN_BOXED,
                                          G_TYPE_NONE,
                                          2,
                                          G_TYPE_BOOLEAN,
                                          G_TYPE_ERROR);
+  g_signal_set_va_marshaller (signals[CLOSED_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__BOOLEAN_BOXEDv);
 }
 
 static void
diff --git a/gio/gdbusinterfaceskeleton.c b/gio/gdbusinterfaceskeleton.c
index 96bd520aa..4a06516c1 100644
--- a/gio/gdbusinterfaceskeleton.c
+++ b/gio/gdbusinterfaceskeleton.c
@@ -27,6 +27,7 @@
 #include "gdbusprivate.h"
 #include "gdbusmethodinvocation.h"
 #include "gdbusconnection.h"
+#include "gmarshal-internal.h"
 #include "gtask.h"
 #include "gioerror.h"
 
@@ -248,10 +249,13 @@ g_dbus_interface_skeleton_class_init (GDBusInterfaceSkeletonClass *klass)
                   G_STRUCT_OFFSET (GDBusInterfaceSkeletonClass, g_authorize_method),
                   _g_signal_accumulator_false_handled,
                   NULL,
-                  NULL,
+                  _g_cclosure_marshal_BOOLEAN__OBJECT,
                   G_TYPE_BOOLEAN,
                   1,
                   G_TYPE_DBUS_METHOD_INVOCATION);
+  g_signal_set_va_marshaller (signals[G_AUTHORIZE_METHOD_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_BOOLEAN__OBJECTv);
 }
 
 static void
diff --git a/gio/gdbusobjectmanager.c b/gio/gdbusobjectmanager.c
index 42b9d3374..87634cd83 100644
--- a/gio/gdbusobjectmanager.c
+++ b/gio/gdbusobjectmanager.c
@@ -26,6 +26,7 @@
 #include "gdbusutils.h"
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gdbusobjectmanager
@@ -126,11 +127,14 @@ g_dbus_object_manager_default_init (GDBusObjectManagerIface *iface)
                   G_STRUCT_OFFSET (GDBusObjectManagerIface, interface_added),
                   NULL,
                   NULL,
-                  NULL,
+                  _g_cclosure_marshal_VOID__OBJECT_OBJECT,
                   G_TYPE_NONE,
                   2,
                   G_TYPE_DBUS_OBJECT,
                   G_TYPE_DBUS_INTERFACE);
+  g_signal_set_va_marshaller (signals[INTERFACE_ADDED],
+                              G_TYPE_FROM_INTERFACE (iface),
+                              _g_cclosure_marshal_VOID__OBJECT_OBJECTv);
 
   /**
    * GDBusObjectManager::interface-removed:
@@ -152,11 +156,14 @@ g_dbus_object_manager_default_init (GDBusObjectManagerIface *iface)
                   G_STRUCT_OFFSET (GDBusObjectManagerIface, interface_removed),
                   NULL,
                   NULL,
-                  NULL,
+                  _g_cclosure_marshal_VOID__OBJECT_OBJECT,
                   G_TYPE_NONE,
                   2,
                   G_TYPE_DBUS_OBJECT,
                   G_TYPE_DBUS_INTERFACE);
+  g_signal_set_va_marshaller (signals[INTERFACE_REMOVED],
+                              G_TYPE_FROM_INTERFACE (iface),
+                              _g_cclosure_marshal_VOID__OBJECT_OBJECTv);
 
 }
 
diff --git a/gio/gdbusobjectmanagerclient.c b/gio/gdbusobjectmanagerclient.c
index 6a59c28b4..38e6f539f 100644
--- a/gio/gdbusobjectmanagerclient.c
+++ b/gio/gdbusobjectmanagerclient.c
@@ -36,6 +36,7 @@
 #include "gdbusinterface.h"
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gdbusobjectmanagerclient
@@ -517,7 +518,7 @@ g_dbus_object_manager_client_class_init (GDBusObjectManagerClientClass *klass)
                   G_STRUCT_OFFSET (GDBusObjectManagerClientClass, interface_proxy_signal),
                   NULL,
                   NULL,
-                  NULL,
+                  _g_cclosure_marshal_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT,
                   G_TYPE_NONE,
                   5,
                   G_TYPE_DBUS_OBJECT_PROXY,
@@ -525,6 +526,9 @@ g_dbus_object_manager_client_class_init (GDBusObjectManagerClientClass *klass)
                   G_TYPE_STRING,
                   G_TYPE_STRING,
                   G_TYPE_VARIANT);
+  g_signal_set_va_marshaller (signals[INTERFACE_PROXY_SIGNAL_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__OBJECT_OBJECT_STRING_STRING_VARIANTv);
 
   /**
    * GDBusObjectManagerClient::interface-proxy-properties-changed:
@@ -556,13 +560,16 @@ g_dbus_object_manager_client_class_init (GDBusObjectManagerClientClass *klass)
                   G_STRUCT_OFFSET (GDBusObjectManagerClientClass, interface_proxy_properties_changed),
                   NULL,
                   NULL,
-                  NULL,
+                  _g_cclosure_marshal_VOID__OBJECT_OBJECT_VARIANT_BOXED,
                   G_TYPE_NONE,
                   4,
                   G_TYPE_DBUS_OBJECT_PROXY,
                   G_TYPE_DBUS_PROXY,
                   G_TYPE_VARIANT,
                   G_TYPE_STRV);
+  g_signal_set_va_marshaller (signals[INTERFACE_PROXY_PROPERTIES_CHANGED_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__OBJECT_OBJECT_VARIANT_BOXEDv);
 }
 
 static void
diff --git a/gio/gdbusproxy.c b/gio/gdbusproxy.c
index 0ab117854..646df2676 100644
--- a/gio/gdbusproxy.c
+++ b/gio/gdbusproxy.c
@@ -42,6 +42,7 @@
 #endif
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gdbusproxy
@@ -595,11 +596,14 @@ g_dbus_proxy_class_init (GDBusProxyClass *klass)
                                                      G_STRUCT_OFFSET (GDBusProxyClass, g_properties_changed),
                                                      NULL,
                                                      NULL,
-                                                     NULL,
+                                                     _g_cclosure_marshal_VOID__VARIANT_BOXED,
                                                      G_TYPE_NONE,
                                                      2,
                                                      G_TYPE_VARIANT,
                                                      G_TYPE_STRV | G_SIGNAL_TYPE_STATIC_SCOPE);
+  g_signal_set_va_marshaller (signals[PROPERTIES_CHANGED_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__VARIANT_BOXEDv);
 
   /**
    * GDBusProxy::g-signal:
@@ -618,12 +622,15 @@ g_dbus_proxy_class_init (GDBusProxyClass *klass)
                                          G_STRUCT_OFFSET (GDBusProxyClass, g_signal),
                                          NULL,
                                          NULL,
-                                         NULL,
+                                         _g_cclosure_marshal_VOID__STRING_STRING_VARIANT,
                                          G_TYPE_NONE,
                                          3,
                                          G_TYPE_STRING,
                                          G_TYPE_STRING,
                                          G_TYPE_VARIANT);
+  g_signal_set_va_marshaller (signals[SIGNAL_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__STRING_STRING_VARIANTv);
 
 }
 
diff --git a/gio/gdbusserver.c b/gio/gdbusserver.c
index 26f75d4b3..26f8dadd0 100644
--- a/gio/gdbusserver.c
+++ b/gio/gdbusserver.c
@@ -42,6 +42,7 @@
 #include "ginetsocketaddress.h"
 #include "ginputstream.h"
 #include "giostream.h"
+#include "gmarshal-internal.h"
 
 #ifdef G_OS_UNIX
 #include <unistd.h>
@@ -452,10 +453,13 @@ g_dbus_server_class_init (GDBusServerClass *klass)
                                                   G_STRUCT_OFFSET (GDBusServerClass, new_connection),
                                                   g_signal_accumulator_true_handled,
                                                   NULL, /* accu_data */
-                                                  NULL,
+                                                  _g_cclosure_marshal_BOOLEAN__OBJECT,
                                                   G_TYPE_BOOLEAN,
                                                   1,
                                                   G_TYPE_DBUS_CONNECTION);
+  g_signal_set_va_marshaller (_signals[NEW_CONNECTION_SIGNAL],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_BOOLEAN__OBJECTv);
 }
 
 static void
diff --git a/gio/gdtlsconnection.c b/gio/gdtlsconnection.c
index ad8fe3548..1a74e3cc4 100644
--- a/gio/gdtlsconnection.c
+++ b/gio/gdtlsconnection.c
@@ -30,6 +30,7 @@
 #include "gtlsdatabase.h"
 #include "gtlsinteraction.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gdtlsconnection
@@ -317,10 +318,13 @@ g_dtls_connection_default_init (GDtlsConnectionInterface *iface)
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GDtlsConnectionInterface, accept_certificate),
                   g_signal_accumulator_true_handled, NULL,
-                  NULL,
+                  _g_cclosure_marshal_BOOLEAN__OBJECT_FLAGS,
                   G_TYPE_BOOLEAN, 2,
                   G_TYPE_TLS_CERTIFICATE,
                   G_TYPE_TLS_CERTIFICATE_FLAGS);
+  g_signal_set_va_marshaller (signals[ACCEPT_CERTIFICATE],
+                              G_TYPE_FROM_INTERFACE (iface),
+                              _g_cclosure_marshal_BOOLEAN__OBJECT_FLAGSv);
 }
 
 /**
diff --git a/gio/gfilemonitor.c b/gio/gfilemonitor.c
index 36d35a88e..9b9c0ea2d 100644
--- a/gio/gfilemonitor.c
+++ b/gio/gfilemonitor.c
@@ -23,6 +23,7 @@
 
 #include "gfilemonitor.h"
 #include "gioenumtypes.h"
+#include "gmarshal-internal.h"
 #include "gfile.h"
 #include "gvfs.h"
 #include "glibintl.h"
@@ -181,9 +182,12 @@ g_file_monitor_class_init (GFileMonitorClass *klass)
                                                 G_SIGNAL_RUN_LAST,
                                                 G_STRUCT_OFFSET (GFileMonitorClass, changed),
                                                 NULL, NULL,
-                                                NULL,
+                                                _g_cclosure_marshal_VOID__OBJECT_OBJECT_ENUM,
                                                 G_TYPE_NONE, 3,
                                                 G_TYPE_FILE, G_TYPE_FILE, G_TYPE_FILE_MONITOR_EVENT);
+  g_signal_set_va_marshaller (g_file_monitor_changed_signal,
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_VOID__OBJECT_OBJECT_ENUMv);
 
   g_object_class_install_property (object_class, PROP_RATE_LIMIT,
                                    g_param_spec_int ("rate-limit",
diff --git a/gio/glistmodel.c b/gio/glistmodel.c
index 2b943a87c..17b1d64d5 100644
--- a/gio/glistmodel.c
+++ b/gio/glistmodel.c
@@ -24,6 +24,7 @@
 
 #include "glistmodel.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 G_DEFINE_INTERFACE (GListModel, g_list_model, G_TYPE_OBJECT)
 
@@ -141,9 +142,12 @@ g_list_model_default_init (GListModelInterface *iface)
                                               G_SIGNAL_RUN_LAST,
                                               0,
                                               NULL, NULL,
-                                              g_cclosure_marshal_generic,
+                                              _g_cclosure_marshal_VOID__UINT_UINT_UINT,
                                               G_TYPE_NONE,
                                               3, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+  g_signal_set_va_marshaller (g_list_model_changed_signal,
+                              G_TYPE_FROM_INTERFACE (iface),
+                              _g_cclosure_marshal_VOID__UINT_UINT_UINTv);
 }
 
 /**
diff --git a/gio/gmarshal-internal.c b/gio/gmarshal-internal.c
new file mode 100644
index 000000000..f9571c42e
--- /dev/null
+++ b/gio/gmarshal-internal.c
@@ -0,0 +1,2632 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <glib-object.h>
+#include "gmarshal-internal.h"
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_schar (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#define g_marshal_value_peek_variant(v)  g_value_get_variant (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_variant(v)  (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+/* BOOLEAN:OBJECT */
+void
+_g_cclosure_marshal_BOOLEAN__OBJECT (GClosure     *closure,
+                                     GValue       *return_value,
+                                     guint         n_param_values,
+                                     const GValue *param_values,
+                                     gpointer      invocation_hint G_GNUC_UNUSED,
+                                     gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__OBJECT callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__OBJECTv (GClosure *closure,
+                                      GValue   *return_value,
+                                      gpointer  instance,
+                                      va_list   args,
+                                      gpointer  marshal_data,
+                                      int       n_params,
+                                      GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__OBJECT callback;
+  gboolean v_return;
+  gpointer arg0;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,FLAGS */
+void
+_g_cclosure_marshal_BOOLEAN__OBJECT_FLAGS (GClosure     *closure,
+                                           GValue       *return_value,
+                                           guint         n_param_values,
+                                           const GValue *param_values,
+                                           gpointer      invocation_hint G_GNUC_UNUSED,
+                                           gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_FLAGS) (gpointer data1,
+                                                          gpointer arg1,
+                                                          guint arg2,
+                                                          gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__OBJECT_FLAGS callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_flags (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__OBJECT_FLAGSv (GClosure *closure,
+                                            GValue   *return_value,
+                                            gpointer  instance,
+                                            va_list   args,
+                                            gpointer  marshal_data,
+                                            int       n_params,
+                                            GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_FLAGS) (gpointer data1,
+                                                          gpointer arg1,
+                                                          guint arg2,
+                                                          gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__OBJECT_FLAGS callback;
+  gboolean v_return;
+  gpointer arg0;
+  guint arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       arg1,
+                       data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:OBJECT,OBJECT */
+void
+_g_cclosure_marshal_BOOLEAN__OBJECT_OBJECT (GClosure     *closure,
+                                            GValue       *return_value,
+                                            guint         n_param_values,
+                                            const GValue *param_values,
+                                            gpointer      invocation_hint G_GNUC_UNUSED,
+                                            gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_OBJECT) (gpointer data1,
+                                                           gpointer arg1,
+                                                           gpointer arg2,
+                                                           gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__OBJECT_OBJECT callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       g_marshal_value_peek_object (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__OBJECT_OBJECTv (GClosure *closure,
+                                             GValue   *return_value,
+                                             gpointer  instance,
+                                             va_list   args,
+                                             gpointer  marshal_data,
+                                             int       n_params,
+                                             GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_OBJECT) (gpointer data1,
+                                                           gpointer arg1,
+                                                           gpointer arg2,
+                                                           gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__OBJECT_OBJECT callback;
+  gboolean v_return;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       arg1,
+                       data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:POINTER,INT */
+void
+_g_cclosure_marshal_BOOLEAN__POINTER_INT (GClosure     *closure,
+                                          GValue       *return_value,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                          gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_INT) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gint arg2,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__POINTER_INT callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__POINTER_INT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_pointer (param_values + 1),
+                       g_marshal_value_peek_int (param_values + 2),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__POINTER_INTv (GClosure *closure,
+                                           GValue   *return_value,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER_INT) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gint arg2,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__POINTER_INT callback;
+  gboolean v_return;
+  gpointer arg0;
+  gint arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  arg1 = (gint) va_arg (args_copy, gint);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__POINTER_INT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       arg1,
+                       data2);
+
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:STRING */
+void
+_g_cclosure_marshal_BOOLEAN__STRING (GClosure     *closure,
+                                     GValue       *return_value,
+                                     guint         n_param_values,
+                                     const GValue *param_values,
+                                     gpointer      invocation_hint G_GNUC_UNUSED,
+                                     gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__STRING callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_string (param_values + 1),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__STRINGv (GClosure *closure,
+                                      GValue   *return_value,
+                                      gpointer  instance,
+                                      va_list   args,
+                                      gpointer  marshal_data,
+                                      int       n_params,
+                                      GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__STRING) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__STRING callback;
+  gboolean v_return;
+  gpointer arg0;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__STRING) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:UINT */
+void
+_g_cclosure_marshal_BOOLEAN__UINT (GClosure     *closure,
+                                   GValue       *return_value,
+                                   guint         n_param_values,
+                                   const GValue *param_values,
+                                   gpointer      invocation_hint G_GNUC_UNUSED,
+                                   gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__UINT) (gpointer data1,
+                                                  guint arg1,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__UINT callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_uint (param_values + 1),
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__UINTv (GClosure *closure,
+                                    GValue   *return_value,
+                                    gpointer  instance,
+                                    va_list   args,
+                                    gpointer  marshal_data,
+                                    int       n_params,
+                                    GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__UINT) (gpointer data1,
+                                                  guint arg1,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__UINT callback;
+  gboolean v_return;
+  guint arg0;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__UINT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       data2);
+
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* BOOLEAN:VOID */
+void
+_g_cclosure_marshal_BOOLEAN__VOID (GClosure     *closure,
+                                   GValue       *return_value,
+                                   guint         n_param_values,
+                                   const GValue *param_values,
+                                   gpointer      invocation_hint G_GNUC_UNUSED,
+                                   gpointer      marshal_data)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__VOID) (gpointer data1,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__VOID callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 1);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__VOID) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       data2);
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_BOOLEAN__VOIDv (GClosure *closure,
+                                    GValue   *return_value,
+                                    gpointer  instance,
+                                    va_list   args,
+                                    gpointer  marshal_data,
+                                    int       n_params,
+                                    GType    *param_types)
+{
+  typedef gboolean (*GMarshalFunc_BOOLEAN__VOID) (gpointer data1,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_BOOLEAN__VOID callback;
+  gboolean v_return;
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_BOOLEAN__VOID) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       data2);
+
+
+  g_value_set_boolean (return_value, v_return);
+}
+
+/* INT:BOXED */
+void
+_g_cclosure_marshal_INT__BOXED (GClosure     *closure,
+                                GValue       *return_value,
+                                guint         n_param_values,
+                                const GValue *param_values,
+                                gpointer      invocation_hint G_GNUC_UNUSED,
+                                gpointer      marshal_data)
+{
+  typedef gint (*GMarshalFunc_INT__BOXED) (gpointer data1,
+                                           gpointer arg1,
+                                           gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_INT__BOXED callback;
+  gint v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_INT__BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_boxed (param_values + 1),
+                       data2);
+
+  g_value_set_int (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_INT__BOXEDv (GClosure *closure,
+                                 GValue   *return_value,
+                                 gpointer  instance,
+                                 va_list   args,
+                                 gpointer  marshal_data,
+                                 int       n_params,
+                                 GType    *param_types)
+{
+  typedef gint (*GMarshalFunc_INT__BOXED) (gpointer data1,
+                                           gpointer arg1,
+                                           gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_INT__BOXED callback;
+  gint v_return;
+  gpointer arg0;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_boxed_copy (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg0);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_INT__BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_boxed_free (param_types[0] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg0);
+
+  g_value_set_int (return_value, v_return);
+}
+
+/* INT:OBJECT */
+void
+_g_cclosure_marshal_INT__OBJECT (GClosure     *closure,
+                                 GValue       *return_value,
+                                 guint         n_param_values,
+                                 const GValue *param_values,
+                                 gpointer      invocation_hint G_GNUC_UNUSED,
+                                 gpointer      marshal_data)
+{
+  typedef gint (*GMarshalFunc_INT__OBJECT) (gpointer data1,
+                                            gpointer arg1,
+                                            gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_INT__OBJECT callback;
+  gint v_return;
+
+  g_return_if_fail (return_value != NULL);
+  g_return_if_fail (n_param_values == 2);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_INT__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       g_marshal_value_peek_object (param_values + 1),
+                       data2);
+
+  g_value_set_int (return_value, v_return);
+}
+
+void
+_g_cclosure_marshal_INT__OBJECTv (GClosure *closure,
+                                  GValue   *return_value,
+                                  gpointer  instance,
+                                  va_list   args,
+                                  gpointer  marshal_data,
+                                  int       n_params,
+                                  GType    *param_types)
+{
+  typedef gint (*GMarshalFunc_INT__OBJECT) (gpointer data1,
+                                            gpointer arg1,
+                                            gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_INT__OBJECT callback;
+  gint v_return;
+  gpointer arg0;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  va_end (args_copy);
+
+  g_return_if_fail (return_value != NULL);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_INT__OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  v_return = callback (data1,
+                       arg0,
+                       data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+
+  g_value_set_int (return_value, v_return);
+}
+
+/* VOID:BOOLEAN,BOXED */
+void
+_g_cclosure_marshal_VOID__BOOLEAN_BOXED (GClosure     *closure,
+                                         GValue       *return_value G_GNUC_UNUSED,
+                                         guint         n_param_values,
+                                         const GValue *param_values,
+                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                         gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__BOOLEAN_BOXED) (gpointer data1,
+                                                    gboolean arg1,
+                                                    gpointer arg2,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__BOOLEAN_BOXED callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__BOOLEAN_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_boolean (param_values + 1),
+            g_marshal_value_peek_boxed (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__BOOLEAN_BOXEDv (GClosure *closure,
+                                          GValue   *return_value G_GNUC_UNUSED,
+                                          gpointer  instance,
+                                          va_list   args,
+                                          gpointer  marshal_data,
+                                          int       n_params,
+                                          GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__BOOLEAN_BOXED) (gpointer data1,
+                                                    gboolean arg1,
+                                                    gpointer arg2,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__BOOLEAN_BOXED callback;
+  gboolean arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gboolean) va_arg (args_copy, gboolean);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_boxed_copy (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__BOOLEAN_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_boxed_free (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+}
+
+/* VOID:ENUM,OBJECT */
+void
+_g_cclosure_marshal_VOID__ENUM_OBJECT (GClosure     *closure,
+                                       GValue       *return_value G_GNUC_UNUSED,
+                                       guint         n_param_values,
+                                       const GValue *param_values,
+                                       gpointer      invocation_hint G_GNUC_UNUSED,
+                                       gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__ENUM_OBJECT) (gpointer data1,
+                                                  gint arg1,
+                                                  gpointer arg2,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__ENUM_OBJECT callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__ENUM_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_enum (param_values + 1),
+            g_marshal_value_peek_object (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__ENUM_OBJECTv (GClosure *closure,
+                                        GValue   *return_value G_GNUC_UNUSED,
+                                        gpointer  instance,
+                                        va_list   args,
+                                        gpointer  marshal_data,
+                                        int       n_params,
+                                        GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__ENUM_OBJECT) (gpointer data1,
+                                                  gint arg1,
+                                                  gpointer arg2,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__ENUM_OBJECT callback;
+  gint arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gint) va_arg (args_copy, gint);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__ENUM_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+}
+
+/* VOID:ENUM,OBJECT,OBJECT */
+void
+_g_cclosure_marshal_VOID__ENUM_OBJECT_OBJECT (GClosure     *closure,
+                                              GValue       *return_value G_GNUC_UNUSED,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint G_GNUC_UNUSED,
+                                              gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__ENUM_OBJECT_OBJECT) (gpointer data1,
+                                                         gint arg1,
+                                                         gpointer arg2,
+                                                         gpointer arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__ENUM_OBJECT_OBJECT callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__ENUM_OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_enum (param_values + 1),
+            g_marshal_value_peek_object (param_values + 2),
+            g_marshal_value_peek_object (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__ENUM_OBJECT_OBJECTv (GClosure *closure,
+                                               GValue   *return_value G_GNUC_UNUSED,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__ENUM_OBJECT_OBJECT) (gpointer data1,
+                                                         gint arg1,
+                                                         gpointer arg2,
+                                                         gpointer arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__ENUM_OBJECT_OBJECT callback;
+  gint arg0;
+  gpointer arg1;
+  gpointer arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gint) va_arg (args_copy, gint);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg2 != NULL)
+    arg2 = g_object_ref (arg2);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__ENUM_OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+  if (arg2 != NULL)
+    g_object_unref (arg2);
+}
+
+/* VOID:INT,INT,INT */
+void
+_g_cclosure_marshal_VOID__INT_INT_INT (GClosure     *closure,
+                                       GValue       *return_value G_GNUC_UNUSED,
+                                       guint         n_param_values,
+                                       const GValue *param_values,
+                                       gpointer      invocation_hint G_GNUC_UNUSED,
+                                       gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__INT_INT_INT) (gpointer data1,
+                                                  gint arg1,
+                                                  gint arg2,
+                                                  gint arg3,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__INT_INT_INT callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__INT_INT_INT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_int (param_values + 1),
+            g_marshal_value_peek_int (param_values + 2),
+            g_marshal_value_peek_int (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__INT_INT_INTv (GClosure *closure,
+                                        GValue   *return_value G_GNUC_UNUSED,
+                                        gpointer  instance,
+                                        va_list   args,
+                                        gpointer  marshal_data,
+                                        int       n_params,
+                                        GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__INT_INT_INT) (gpointer data1,
+                                                  gint arg1,
+                                                  gint arg2,
+                                                  gint arg3,
+                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__INT_INT_INT callback;
+  gint arg0;
+  gint arg1;
+  gint arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gint) va_arg (args_copy, gint);
+  arg1 = (gint) va_arg (args_copy, gint);
+  arg2 = (gint) va_arg (args_copy, gint);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__INT_INT_INT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+
+}
+
+/* VOID:OBJECT,OBJECT */
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT (GClosure     *closure,
+                                         GValue       *return_value G_GNUC_UNUSED,
+                                         guint         n_param_values,
+                                         const GValue *param_values,
+                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                         gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer arg2,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_object (param_values + 1),
+            g_marshal_value_peek_object (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECTv (GClosure *closure,
+                                          GValue   *return_value G_GNUC_UNUSED,
+                                          gpointer  instance,
+                                          va_list   args,
+                                          gpointer  marshal_data,
+                                          int       n_params,
+                                          GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer arg2,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+}
+
+/* VOID:OBJECT,OBJECT,ENUM */
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT_ENUM (GClosure     *closure,
+                                              GValue       *return_value G_GNUC_UNUSED,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint G_GNUC_UNUSED,
+                                              gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_ENUM) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gpointer arg2,
+                                                         gint arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT_ENUM callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT_ENUM) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_object (param_values + 1),
+            g_marshal_value_peek_object (param_values + 2),
+            g_marshal_value_peek_enum (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT_ENUMv (GClosure *closure,
+                                               GValue   *return_value G_GNUC_UNUSED,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_ENUM) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gpointer arg2,
+                                                         gint arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT_ENUM callback;
+  gpointer arg0;
+  gpointer arg1;
+  gint arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  arg2 = (gint) va_arg (args_copy, gint);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT_ENUM) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+}
+
+/* VOID:OBJECT,OBJECT,STRING,STRING,VARIANT */
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT (GClosure     *closure,
+                                                               GValue       *return_value G_GNUC_UNUSED,
+                                                               guint         n_param_values,
+                                                               const GValue *param_values,
+                                                               gpointer      invocation_hint G_GNUC_UNUSED,
+                                                               gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT) (gpointer data1,
+                                                                          gpointer arg1,
+                                                                          gpointer arg2,
+                                                                          gpointer arg3,
+                                                                          gpointer arg4,
+                                                                          gpointer arg5,
+                                                                          gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT callback;
+
+  g_return_if_fail (n_param_values == 6);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT) (marshal_data ? marshal_data : 
cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_object (param_values + 1),
+            g_marshal_value_peek_object (param_values + 2),
+            g_marshal_value_peek_string (param_values + 3),
+            g_marshal_value_peek_string (param_values + 4),
+            g_marshal_value_peek_variant (param_values + 5),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT_STRING_STRING_VARIANTv (GClosure *closure,
+                                                                GValue   *return_value G_GNUC_UNUSED,
+                                                                gpointer  instance,
+                                                                va_list   args,
+                                                                gpointer  marshal_data,
+                                                                int       n_params,
+                                                                GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT) (gpointer data1,
+                                                                          gpointer arg1,
+                                                                          gpointer arg2,
+                                                                          gpointer arg3,
+                                                                          gpointer arg4,
+                                                                          gpointer arg5,
+                                                                          gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT callback;
+  gpointer arg0;
+  gpointer arg1;
+  gpointer arg2;
+  gpointer arg3;
+  gpointer arg4;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    arg2 = g_strdup (arg2);
+  arg3 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[3] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg3 != NULL)
+    arg3 = g_strdup (arg3);
+  arg4 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[4] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg4 != NULL)
+    arg4 = g_variant_ref_sink (arg4);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT) (marshal_data ? marshal_data : 
cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            arg3,
+            arg4,
+            data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    g_free (arg2);
+  if ((param_types[3] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg3 != NULL)
+    g_free (arg3);
+  if ((param_types[4] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg4 != NULL)
+    g_variant_unref (arg4);
+}
+
+/* VOID:OBJECT,OBJECT,VARIANT,BOXED */
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT_VARIANT_BOXED (GClosure     *closure,
+                                                       GValue       *return_value G_GNUC_UNUSED,
+                                                       guint         n_param_values,
+                                                       const GValue *param_values,
+                                                       gpointer      invocation_hint G_GNUC_UNUSED,
+                                                       gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_VARIANT_BOXED) (gpointer data1,
+                                                                  gpointer arg1,
+                                                                  gpointer arg2,
+                                                                  gpointer arg3,
+                                                                  gpointer arg4,
+                                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT_VARIANT_BOXED callback;
+
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT_VARIANT_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_object (param_values + 1),
+            g_marshal_value_peek_object (param_values + 2),
+            g_marshal_value_peek_variant (param_values + 3),
+            g_marshal_value_peek_boxed (param_values + 4),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__OBJECT_OBJECT_VARIANT_BOXEDv (GClosure *closure,
+                                                        GValue   *return_value G_GNUC_UNUSED,
+                                                        gpointer  instance,
+                                                        va_list   args,
+                                                        gpointer  marshal_data,
+                                                        int       n_params,
+                                                        GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_VARIANT_BOXED) (gpointer data1,
+                                                                  gpointer arg1,
+                                                                  gpointer arg2,
+                                                                  gpointer arg3,
+                                                                  gpointer arg4,
+                                                                  gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_OBJECT_VARIANT_BOXED callback;
+  gpointer arg0;
+  gpointer arg1;
+  gpointer arg2;
+  gpointer arg3;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg1 != NULL)
+    arg1 = g_object_ref (arg1);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    arg2 = g_variant_ref_sink (arg2);
+  arg3 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[3] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg3 != NULL)
+    arg3 = g_boxed_copy (param_types[3] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg3);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_OBJECT_VARIANT_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            arg3,
+            data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+  if (arg1 != NULL)
+    g_object_unref (arg1);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    g_variant_unref (arg2);
+  if ((param_types[3] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg3 != NULL)
+    g_boxed_free (param_types[3] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg3);
+}
+
+/* VOID:OBJECT,VARIANT */
+void
+_g_cclosure_marshal_VOID__OBJECT_VARIANT (GClosure     *closure,
+                                          GValue       *return_value G_GNUC_UNUSED,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                          gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_VARIANT) (gpointer data1,
+                                                     gpointer arg1,
+                                                     gpointer arg2,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_VARIANT callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_object (param_values + 1),
+            g_marshal_value_peek_variant (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__OBJECT_VARIANTv (GClosure *closure,
+                                           GValue   *return_value G_GNUC_UNUSED,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__OBJECT_VARIANT) (gpointer data1,
+                                                     gpointer arg1,
+                                                     gpointer arg2,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__OBJECT_VARIANT callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if (arg0 != NULL)
+    arg0 = g_object_ref (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_variant_ref_sink (arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__OBJECT_VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if (arg0 != NULL)
+    g_object_unref (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_variant_unref (arg1);
+}
+
+/* VOID:POINTER,INT,STRING */
+void
+_g_cclosure_marshal_VOID__POINTER_INT_STRING (GClosure     *closure,
+                                              GValue       *return_value G_GNUC_UNUSED,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint G_GNUC_UNUSED,
+                                              gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__POINTER_INT_STRING) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gint arg2,
+                                                         gpointer arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__POINTER_INT_STRING callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__POINTER_INT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_pointer (param_values + 1),
+            g_marshal_value_peek_int (param_values + 2),
+            g_marshal_value_peek_string (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__POINTER_INT_STRINGv (GClosure *closure,
+                                               GValue   *return_value G_GNUC_UNUSED,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__POINTER_INT_STRING) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gint arg2,
+                                                         gpointer arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__POINTER_INT_STRING callback;
+  gpointer arg0;
+  gint arg1;
+  gpointer arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  arg1 = (gint) va_arg (args_copy, gint);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    arg2 = g_strdup (arg2);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__POINTER_INT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    g_free (arg2);
+}
+
+/* VOID:STRING,BOOLEAN */
+void
+_g_cclosure_marshal_VOID__STRING_BOOLEAN (GClosure     *closure,
+                                          GValue       *return_value G_GNUC_UNUSED,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                          gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_BOOLEAN) (gpointer data1,
+                                                     gpointer arg1,
+                                                     gboolean arg2,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_BOOLEAN callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_boolean (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_BOOLEANv (GClosure *closure,
+                                           GValue   *return_value G_GNUC_UNUSED,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_BOOLEAN) (gpointer data1,
+                                                     gpointer arg1,
+                                                     gboolean arg2,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_BOOLEAN callback;
+  gpointer arg0;
+  gboolean arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gboolean) va_arg (args_copy, gboolean);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_BOOLEAN) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+}
+
+/* VOID:STRING,BOXED */
+void
+_g_cclosure_marshal_VOID__STRING_BOXED (GClosure     *closure,
+                                        GValue       *return_value G_GNUC_UNUSED,
+                                        guint         n_param_values,
+                                        const GValue *param_values,
+                                        gpointer      invocation_hint G_GNUC_UNUSED,
+                                        gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_BOXED) (gpointer data1,
+                                                   gpointer arg1,
+                                                   gpointer arg2,
+                                                   gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_BOXED callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_boxed (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_BOXEDv (GClosure *closure,
+                                         GValue   *return_value G_GNUC_UNUSED,
+                                         gpointer  instance,
+                                         va_list   args,
+                                         gpointer  marshal_data,
+                                         int       n_params,
+                                         GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_BOXED) (gpointer data1,
+                                                   gpointer arg1,
+                                                   gpointer arg2,
+                                                   gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_BOXED callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_boxed_copy (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_boxed_free (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+}
+
+/* VOID:STRING,BOXED,BOXED */
+void
+_g_cclosure_marshal_VOID__STRING_BOXED_BOXED (GClosure     *closure,
+                                              GValue       *return_value G_GNUC_UNUSED,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint G_GNUC_UNUSED,
+                                              gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_BOXED_BOXED) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gpointer arg2,
+                                                         gpointer arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_BOXED_BOXED callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_BOXED_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_boxed (param_values + 2),
+            g_marshal_value_peek_boxed (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_BOXED_BOXEDv (GClosure *closure,
+                                               GValue   *return_value G_GNUC_UNUSED,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_BOXED_BOXED) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gpointer arg2,
+                                                         gpointer arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_BOXED_BOXED callback;
+  gpointer arg0;
+  gpointer arg1;
+  gpointer arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_boxed_copy (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    arg2 = g_boxed_copy (param_types[2] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg2);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_BOXED_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_boxed_free (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    g_boxed_free (param_types[2] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg2);
+}
+
+/* VOID:STRING,INT64,INT64 */
+void
+_g_cclosure_marshal_VOID__STRING_INT64_INT64 (GClosure     *closure,
+                                              GValue       *return_value G_GNUC_UNUSED,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint G_GNUC_UNUSED,
+                                              gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_INT64_INT64) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gint64 arg2,
+                                                         gint64 arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_INT64_INT64 callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_INT64_INT64) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_int64 (param_values + 2),
+            g_marshal_value_peek_int64 (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_INT64_INT64v (GClosure *closure,
+                                               GValue   *return_value G_GNUC_UNUSED,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_INT64_INT64) (gpointer data1,
+                                                         gpointer arg1,
+                                                         gint64 arg2,
+                                                         gint64 arg3,
+                                                         gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_INT64_INT64 callback;
+  gpointer arg0;
+  gint64 arg1;
+  gint64 arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gint64) va_arg (args_copy, gint64);
+  arg2 = (gint64) va_arg (args_copy, gint64);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_INT64_INT64) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+}
+
+/* VOID:STRING,STRING,STRING,FLAGS */
+void
+_g_cclosure_marshal_VOID__STRING_STRING_STRING_FLAGS (GClosure     *closure,
+                                                      GValue       *return_value G_GNUC_UNUSED,
+                                                      guint         n_param_values,
+                                                      const GValue *param_values,
+                                                      gpointer      invocation_hint G_GNUC_UNUSED,
+                                                      gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING_FLAGS) (gpointer data1,
+                                                                 gpointer arg1,
+                                                                 gpointer arg2,
+                                                                 gpointer arg3,
+                                                                 guint arg4,
+                                                                 gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_STRING_STRING_FLAGS callback;
+
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_STRING_STRING_FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_string (param_values + 2),
+            g_marshal_value_peek_string (param_values + 3),
+            g_marshal_value_peek_flags (param_values + 4),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_STRING_STRING_FLAGSv (GClosure *closure,
+                                                       GValue   *return_value G_GNUC_UNUSED,
+                                                       gpointer  instance,
+                                                       va_list   args,
+                                                       gpointer  marshal_data,
+                                                       int       n_params,
+                                                       GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING_FLAGS) (gpointer data1,
+                                                                 gpointer arg1,
+                                                                 gpointer arg2,
+                                                                 gpointer arg3,
+                                                                 guint arg4,
+                                                                 gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_STRING_STRING_FLAGS callback;
+  gpointer arg0;
+  gpointer arg1;
+  gpointer arg2;
+  guint arg3;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_strdup (arg1);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    arg2 = g_strdup (arg2);
+  arg3 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_STRING_STRING_FLAGS) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            arg3,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_free (arg1);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    g_free (arg2);
+}
+
+/* VOID:STRING,STRING,VARIANT */
+void
+_g_cclosure_marshal_VOID__STRING_STRING_VARIANT (GClosure     *closure,
+                                                 GValue       *return_value G_GNUC_UNUSED,
+                                                 guint         n_param_values,
+                                                 const GValue *param_values,
+                                                 gpointer      invocation_hint G_GNUC_UNUSED,
+                                                 gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_STRING_VARIANT) (gpointer data1,
+                                                            gpointer arg1,
+                                                            gpointer arg2,
+                                                            gpointer arg3,
+                                                            gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_STRING_VARIANT callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_STRING_VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_string (param_values + 2),
+            g_marshal_value_peek_variant (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_STRING_VARIANTv (GClosure *closure,
+                                                  GValue   *return_value G_GNUC_UNUSED,
+                                                  gpointer  instance,
+                                                  va_list   args,
+                                                  gpointer  marshal_data,
+                                                  int       n_params,
+                                                  GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_STRING_VARIANT) (gpointer data1,
+                                                            gpointer arg1,
+                                                            gpointer arg2,
+                                                            gpointer arg3,
+                                                            gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_STRING_VARIANT callback;
+  gpointer arg0;
+  gpointer arg1;
+  gpointer arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_strdup (arg1);
+  arg2 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    arg2 = g_variant_ref_sink (arg2);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_STRING_VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_free (arg1);
+  if ((param_types[2] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg2 != NULL)
+    g_variant_unref (arg2);
+}
+
+/* VOID:STRING,VARIANT */
+void
+_g_cclosure_marshal_VOID__STRING_VARIANT (GClosure     *closure,
+                                          GValue       *return_value G_GNUC_UNUSED,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                          gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_VARIANT) (gpointer data1,
+                                                     gpointer arg1,
+                                                     gpointer arg2,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_VARIANT callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_string (param_values + 1),
+            g_marshal_value_peek_variant (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__STRING_VARIANTv (GClosure *closure,
+                                           GValue   *return_value G_GNUC_UNUSED,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__STRING_VARIANT) (gpointer data1,
+                                                     gpointer arg1,
+                                                     gpointer arg2,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__STRING_VARIANT callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_strdup (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_variant_ref_sink (arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__STRING_VARIANT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_free (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_variant_unref (arg1);
+}
+
+/* VOID:UINT,UINT,UINT */
+void
+_g_cclosure_marshal_VOID__UINT_UINT_UINT (GClosure     *closure,
+                                          GValue       *return_value G_GNUC_UNUSED,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint G_GNUC_UNUSED,
+                                          gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT) (gpointer data1,
+                                                     guint arg1,
+                                                     guint arg2,
+                                                     guint arg3,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__UINT_UINT_UINT callback;
+
+  g_return_if_fail (n_param_values == 4);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UINT_UINT_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_uint (param_values + 1),
+            g_marshal_value_peek_uint (param_values + 2),
+            g_marshal_value_peek_uint (param_values + 3),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__UINT_UINT_UINTv (GClosure *closure,
+                                           GValue   *return_value G_GNUC_UNUSED,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT) (gpointer data1,
+                                                     guint arg1,
+                                                     guint arg2,
+                                                     guint arg3,
+                                                     gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__UINT_UINT_UINT callback;
+  guint arg0;
+  guint arg1;
+  guint arg2;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (guint) va_arg (args_copy, guint);
+  arg1 = (guint) va_arg (args_copy, guint);
+  arg2 = (guint) va_arg (args_copy, guint);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__UINT_UINT_UINT) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            arg2,
+            data2);
+
+}
+
+/* VOID:VARIANT,BOXED */
+void
+_g_cclosure_marshal_VOID__VARIANT_BOXED (GClosure     *closure,
+                                         GValue       *return_value G_GNUC_UNUSED,
+                                         guint         n_param_values,
+                                         const GValue *param_values,
+                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                         gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__VARIANT_BOXED) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer arg2,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__VARIANT_BOXED callback;
+
+  g_return_if_fail (n_param_values == 3);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__VARIANT_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_variant (param_values + 1),
+            g_marshal_value_peek_boxed (param_values + 2),
+            data2);
+}
+
+void
+_g_cclosure_marshal_VOID__VARIANT_BOXEDv (GClosure *closure,
+                                          GValue   *return_value G_GNUC_UNUSED,
+                                          gpointer  instance,
+                                          va_list   args,
+                                          gpointer  marshal_data,
+                                          int       n_params,
+                                          GType    *param_types)
+{
+  typedef void (*GMarshalFunc_VOID__VARIANT_BOXED) (gpointer data1,
+                                                    gpointer arg1,
+                                                    gpointer arg2,
+                                                    gpointer data2);
+  GCClosure *cc = (GCClosure *) closure;
+  gpointer data1, data2;
+  GMarshalFunc_VOID__VARIANT_BOXED callback;
+  gpointer arg0;
+  gpointer arg1;
+  va_list args_copy;
+
+  G_VA_COPY (args_copy, args);
+  arg0 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    arg0 = g_variant_ref_sink (arg0);
+  arg1 = (gpointer) va_arg (args_copy, gpointer);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    arg1 = g_boxed_copy (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+  va_end (args_copy);
+
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = instance;
+    }
+  else
+    {
+      data1 = instance;
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__VARIANT_BOXED) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            arg0,
+            arg1,
+            data2);
+  if ((param_types[0] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg0 != NULL)
+    g_variant_unref (arg0);
+  if ((param_types[1] & G_SIGNAL_TYPE_STATIC_SCOPE) == 0 && arg1 != NULL)
+    g_boxed_free (param_types[1] & ~G_SIGNAL_TYPE_STATIC_SCOPE, arg1);
+}
+
diff --git a/gio/gmarshal-internal.h b/gio/gmarshal-internal.h
new file mode 100644
index 000000000..ec5c3e877
--- /dev/null
+++ b/gio/gmarshal-internal.h
@@ -0,0 +1,503 @@
+/* GObject - GLib Type, Object, Parameter and Signal Library
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef ___G_CCLOSURE_MARSHAL_MARSHAL_H__
+#define ___G_CCLOSURE_MARSHAL_MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* BOOLEAN:OBJECT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__OBJECT (GClosure     *closure,
+                                          GValue       *return_value,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint,
+                                          gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__OBJECTv (GClosure *closure,
+                                           GValue   *return_value,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types);
+
+/* BOOLEAN:OBJECT,FLAGS */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__OBJECT_FLAGS (GClosure     *closure,
+                                                GValue       *return_value,
+                                                guint         n_param_values,
+                                                const GValue *param_values,
+                                                gpointer      invocation_hint,
+                                                gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__OBJECT_FLAGSv (GClosure *closure,
+                                                 GValue   *return_value,
+                                                 gpointer  instance,
+                                                 va_list   args,
+                                                 gpointer  marshal_data,
+                                                 int       n_params,
+                                                 GType    *param_types);
+
+/* BOOLEAN:OBJECT,OBJECT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECT (GClosure     *closure,
+                                                 GValue       *return_value,
+                                                 guint         n_param_values,
+                                                 const GValue *param_values,
+                                                 gpointer      invocation_hint,
+                                                 gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECTv (GClosure *closure,
+                                                  GValue   *return_value,
+                                                  gpointer  instance,
+                                                  va_list   args,
+                                                  gpointer  marshal_data,
+                                                  int       n_params,
+                                                  GType    *param_types);
+
+/* BOOLEAN:POINTER,INT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__POINTER_INT (GClosure     *closure,
+                                               GValue       *return_value,
+                                               guint         n_param_values,
+                                               const GValue *param_values,
+                                               gpointer      invocation_hint,
+                                               gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__POINTER_INTv (GClosure *closure,
+                                                GValue   *return_value,
+                                                gpointer  instance,
+                                                va_list   args,
+                                                gpointer  marshal_data,
+                                                int       n_params,
+                                                GType    *param_types);
+
+/* BOOLEAN:STRING */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__STRING (GClosure     *closure,
+                                          GValue       *return_value,
+                                          guint         n_param_values,
+                                          const GValue *param_values,
+                                          gpointer      invocation_hint,
+                                          gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__STRINGv (GClosure *closure,
+                                           GValue   *return_value,
+                                           gpointer  instance,
+                                           va_list   args,
+                                           gpointer  marshal_data,
+                                           int       n_params,
+                                           GType    *param_types);
+
+/* BOOLEAN:UINT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__UINT (GClosure     *closure,
+                                        GValue       *return_value,
+                                        guint         n_param_values,
+                                        const GValue *param_values,
+                                        gpointer      invocation_hint,
+                                        gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__UINTv (GClosure *closure,
+                                         GValue   *return_value,
+                                         gpointer  instance,
+                                         va_list   args,
+                                         gpointer  marshal_data,
+                                         int       n_params,
+                                         GType    *param_types);
+
+/* BOOLEAN:VOID */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__VOID (GClosure     *closure,
+                                        GValue       *return_value,
+                                        guint         n_param_values,
+                                        const GValue *param_values,
+                                        gpointer      invocation_hint,
+                                        gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_BOOLEAN__VOIDv (GClosure *closure,
+                                         GValue   *return_value,
+                                         gpointer  instance,
+                                         va_list   args,
+                                         gpointer  marshal_data,
+                                         int       n_params,
+                                         GType    *param_types);
+
+/* INT:BOXED */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_INT__BOXED (GClosure     *closure,
+                                     GValue       *return_value,
+                                     guint         n_param_values,
+                                     const GValue *param_values,
+                                     gpointer      invocation_hint,
+                                     gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_INT__BOXEDv (GClosure *closure,
+                                      GValue   *return_value,
+                                      gpointer  instance,
+                                      va_list   args,
+                                      gpointer  marshal_data,
+                                      int       n_params,
+                                      GType    *param_types);
+
+/* INT:OBJECT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_INT__OBJECT (GClosure     *closure,
+                                      GValue       *return_value,
+                                      guint         n_param_values,
+                                      const GValue *param_values,
+                                      gpointer      invocation_hint,
+                                      gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_INT__OBJECTv (GClosure *closure,
+                                       GValue   *return_value,
+                                       gpointer  instance,
+                                       va_list   args,
+                                       gpointer  marshal_data,
+                                       int       n_params,
+                                       GType    *param_types);
+
+/* VOID:BOOLEAN,BOXED */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__BOOLEAN_BOXED (GClosure     *closure,
+                                              GValue       *return_value,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__BOOLEAN_BOXEDv (GClosure *closure,
+                                               GValue   *return_value,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types);
+
+/* VOID:ENUM,OBJECT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__ENUM_OBJECT (GClosure     *closure,
+                                            GValue       *return_value,
+                                            guint         n_param_values,
+                                            const GValue *param_values,
+                                            gpointer      invocation_hint,
+                                            gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__ENUM_OBJECTv (GClosure *closure,
+                                             GValue   *return_value,
+                                             gpointer  instance,
+                                             va_list   args,
+                                             gpointer  marshal_data,
+                                             int       n_params,
+                                             GType    *param_types);
+
+/* VOID:ENUM,OBJECT,OBJECT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__ENUM_OBJECT_OBJECT (GClosure     *closure,
+                                                   GValue       *return_value,
+                                                   guint         n_param_values,
+                                                   const GValue *param_values,
+                                                   gpointer      invocation_hint,
+                                                   gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__ENUM_OBJECT_OBJECTv (GClosure *closure,
+                                                    GValue   *return_value,
+                                                    gpointer  instance,
+                                                    va_list   args,
+                                                    gpointer  marshal_data,
+                                                    int       n_params,
+                                                    GType    *param_types);
+
+/* VOID:INT,INT,INT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__INT_INT_INT (GClosure     *closure,
+                                            GValue       *return_value,
+                                            guint         n_param_values,
+                                            const GValue *param_values,
+                                            gpointer      invocation_hint,
+                                            gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__INT_INT_INTv (GClosure *closure,
+                                             GValue   *return_value,
+                                             gpointer  instance,
+                                             va_list   args,
+                                             gpointer  marshal_data,
+                                             int       n_params,
+                                             GType    *param_types);
+
+/* VOID:OBJECT,OBJECT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT (GClosure     *closure,
+                                              GValue       *return_value,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECTv (GClosure *closure,
+                                               GValue   *return_value,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types);
+
+/* VOID:OBJECT,OBJECT,ENUM */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT_ENUM (GClosure     *closure,
+                                                   GValue       *return_value,
+                                                   guint         n_param_values,
+                                                   const GValue *param_values,
+                                                   gpointer      invocation_hint,
+                                                   gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT_ENUMv (GClosure *closure,
+                                                    GValue   *return_value,
+                                                    gpointer  instance,
+                                                    va_list   args,
+                                                    gpointer  marshal_data,
+                                                    int       n_params,
+                                                    GType    *param_types);
+
+/* VOID:OBJECT,OBJECT,STRING,STRING,VARIANT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT_STRING_STRING_VARIANT (GClosure     *closure,
+                                                                    GValue       *return_value,
+                                                                    guint         n_param_values,
+                                                                    const GValue *param_values,
+                                                                    gpointer      invocation_hint,
+                                                                    gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT_STRING_STRING_VARIANTv (GClosure *closure,
+                                                                     GValue   *return_value,
+                                                                     gpointer  instance,
+                                                                     va_list   args,
+                                                                     gpointer  marshal_data,
+                                                                     int       n_params,
+                                                                     GType    *param_types);
+
+/* VOID:OBJECT,OBJECT,VARIANT,BOXED */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT_VARIANT_BOXED (GClosure     *closure,
+                                                            GValue       *return_value,
+                                                            guint         n_param_values,
+                                                            const GValue *param_values,
+                                                            gpointer      invocation_hint,
+                                                            gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_OBJECT_VARIANT_BOXEDv (GClosure *closure,
+                                                             GValue   *return_value,
+                                                             gpointer  instance,
+                                                             va_list   args,
+                                                             gpointer  marshal_data,
+                                                             int       n_params,
+                                                             GType    *param_types);
+
+/* VOID:OBJECT,VARIANT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_VARIANT (GClosure     *closure,
+                                               GValue       *return_value,
+                                               guint         n_param_values,
+                                               const GValue *param_values,
+                                               gpointer      invocation_hint,
+                                               gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__OBJECT_VARIANTv (GClosure *closure,
+                                                GValue   *return_value,
+                                                gpointer  instance,
+                                                va_list   args,
+                                                gpointer  marshal_data,
+                                                int       n_params,
+                                                GType    *param_types);
+
+/* VOID:POINTER,INT,STRING */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__POINTER_INT_STRING (GClosure     *closure,
+                                                   GValue       *return_value,
+                                                   guint         n_param_values,
+                                                   const GValue *param_values,
+                                                   gpointer      invocation_hint,
+                                                   gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__POINTER_INT_STRINGv (GClosure *closure,
+                                                    GValue   *return_value,
+                                                    gpointer  instance,
+                                                    va_list   args,
+                                                    gpointer  marshal_data,
+                                                    int       n_params,
+                                                    GType    *param_types);
+
+/* VOID:STRING,BOOLEAN */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_BOOLEAN (GClosure     *closure,
+                                               GValue       *return_value,
+                                               guint         n_param_values,
+                                               const GValue *param_values,
+                                               gpointer      invocation_hint,
+                                               gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_BOOLEANv (GClosure *closure,
+                                                GValue   *return_value,
+                                                gpointer  instance,
+                                                va_list   args,
+                                                gpointer  marshal_data,
+                                                int       n_params,
+                                                GType    *param_types);
+
+/* VOID:STRING,BOXED */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_BOXED (GClosure     *closure,
+                                             GValue       *return_value,
+                                             guint         n_param_values,
+                                             const GValue *param_values,
+                                             gpointer      invocation_hint,
+                                             gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_BOXEDv (GClosure *closure,
+                                              GValue   *return_value,
+                                              gpointer  instance,
+                                              va_list   args,
+                                              gpointer  marshal_data,
+                                              int       n_params,
+                                              GType    *param_types);
+
+/* VOID:STRING,BOXED,BOXED */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_BOXED_BOXED (GClosure     *closure,
+                                                   GValue       *return_value,
+                                                   guint         n_param_values,
+                                                   const GValue *param_values,
+                                                   gpointer      invocation_hint,
+                                                   gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_BOXED_BOXEDv (GClosure *closure,
+                                                    GValue   *return_value,
+                                                    gpointer  instance,
+                                                    va_list   args,
+                                                    gpointer  marshal_data,
+                                                    int       n_params,
+                                                    GType    *param_types);
+
+/* VOID:STRING,INT64,INT64 */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_INT64_INT64 (GClosure     *closure,
+                                                   GValue       *return_value,
+                                                   guint         n_param_values,
+                                                   const GValue *param_values,
+                                                   gpointer      invocation_hint,
+                                                   gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_INT64_INT64v (GClosure *closure,
+                                                    GValue   *return_value,
+                                                    gpointer  instance,
+                                                    va_list   args,
+                                                    gpointer  marshal_data,
+                                                    int       n_params,
+                                                    GType    *param_types);
+
+/* VOID:STRING,STRING,STRING,FLAGS */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_STRING_STRING_FLAGS (GClosure     *closure,
+                                                           GValue       *return_value,
+                                                           guint         n_param_values,
+                                                           const GValue *param_values,
+                                                           gpointer      invocation_hint,
+                                                           gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_STRING_STRING_FLAGSv (GClosure *closure,
+                                                            GValue   *return_value,
+                                                            gpointer  instance,
+                                                            va_list   args,
+                                                            gpointer  marshal_data,
+                                                            int       n_params,
+                                                            GType    *param_types);
+
+/* VOID:STRING,STRING,VARIANT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_STRING_VARIANT (GClosure     *closure,
+                                                      GValue       *return_value,
+                                                      guint         n_param_values,
+                                                      const GValue *param_values,
+                                                      gpointer      invocation_hint,
+                                                      gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_STRING_VARIANTv (GClosure *closure,
+                                                       GValue   *return_value,
+                                                       gpointer  instance,
+                                                       va_list   args,
+                                                       gpointer  marshal_data,
+                                                       int       n_params,
+                                                       GType    *param_types);
+
+/* VOID:STRING,VARIANT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_VARIANT (GClosure     *closure,
+                                               GValue       *return_value,
+                                               guint         n_param_values,
+                                               const GValue *param_values,
+                                               gpointer      invocation_hint,
+                                               gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__STRING_VARIANTv (GClosure *closure,
+                                                GValue   *return_value,
+                                                gpointer  instance,
+                                                va_list   args,
+                                                gpointer  marshal_data,
+                                                int       n_params,
+                                                GType    *param_types);
+
+/* VOID:UINT,UINT,UINT */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__UINT_UINT_UINT (GClosure     *closure,
+                                               GValue       *return_value,
+                                               guint         n_param_values,
+                                               const GValue *param_values,
+                                               gpointer      invocation_hint,
+                                               gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__UINT_UINT_UINTv (GClosure *closure,
+                                                GValue   *return_value,
+                                                gpointer  instance,
+                                                va_list   args,
+                                                gpointer  marshal_data,
+                                                int       n_params,
+                                                GType    *param_types);
+
+/* VOID:VARIANT,BOXED */
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__VARIANT_BOXED (GClosure     *closure,
+                                              GValue       *return_value,
+                                              guint         n_param_values,
+                                              const GValue *param_values,
+                                              gpointer      invocation_hint,
+                                              gpointer      marshal_data);
+G_GNUC_INTERNAL
+void _g_cclosure_marshal_VOID__VARIANT_BOXEDv (GClosure *closure,
+                                               GValue   *return_value,
+                                               gpointer  instance,
+                                               va_list   args,
+                                               gpointer  marshal_data,
+                                               int       n_params,
+                                               GType    *param_types);
+
+
+G_END_DECLS
+
+#endif /* ___G_CCLOSURE_MARSHAL_MARSHAL_H__ */
diff --git a/gio/gmarshal-internal.list b/gio/gmarshal-internal.list
new file mode 100644
index 000000000..925ae4265
--- /dev/null
+++ b/gio/gmarshal-internal.list
@@ -0,0 +1,28 @@
+BOOLEAN:OBJECT
+BOOLEAN:OBJECT,FLAGS
+BOOLEAN:OBJECT,OBJECT
+BOOLEAN:POINTER,INT
+BOOLEAN:STRING
+BOOLEAN:UINT
+BOOLEAN:VOID
+INT:BOXED
+INT:OBJECT
+VOID:BOOLEAN,BOXED
+VOID:ENUM,OBJECT
+VOID:ENUM,OBJECT,OBJECT
+VOID:INT,INT,INT
+VOID:OBJECT,OBJECT
+VOID:OBJECT,OBJECT,ENUM
+VOID:OBJECT,OBJECT,STRING,STRING,VARIANT
+VOID:OBJECT,OBJECT,VARIANT,BOXED
+VOID:OBJECT,VARIANT
+VOID:POINTER,INT,STRING
+VOID:STRING,BOOLEAN
+VOID:STRING,BOXED
+VOID:STRING,BOXED,BOXED
+VOID:STRING,INT64,INT64
+VOID:STRING,STRING,STRING,FLAGS
+VOID:STRING,STRING,VARIANT
+VOID:STRING,VARIANT
+VOID:UINT,UINT,UINT
+VOID:VARIANT,BOXED
diff --git a/gio/gmenumodel.c b/gio/gmenumodel.c
index f4d7fcae5..8ca45e098 100644
--- a/gio/gmenumodel.c
+++ b/gio/gmenumodel.c
@@ -22,6 +22,7 @@
 #include "gmenumodel.h"
 
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gmenumodel
@@ -452,8 +453,12 @@ g_menu_model_class_init (GMenuModelClass *class)
   g_menu_model_items_changed_signal =
     g_signal_new (I_("items-changed"), G_TYPE_MENU_MODEL,
                   G_SIGNAL_RUN_LAST, 0, NULL, NULL,
-                  g_cclosure_marshal_generic, G_TYPE_NONE,
+                  _g_cclosure_marshal_VOID__INT_INT_INT,
+                  G_TYPE_NONE,
                   3, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
+  g_signal_set_va_marshaller (g_menu_model_items_changed_signal,
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_VOID__INT_INT_INTv);
 }
 
 /**
diff --git a/gio/gmountoperation.c b/gio/gmountoperation.c
index b6982a96e..39762e51d 100644
--- a/gio/gmountoperation.c
+++ b/gio/gmountoperation.c
@@ -25,6 +25,7 @@
 #include "gmountoperation.h"
 #include "gioenumtypes.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 
 /**
@@ -321,9 +322,12 @@ g_mount_operation_class_init (GMountOperationClass *klass)
                  G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GMountOperationClass, ask_password),
                  NULL, NULL,
-                 NULL,
+                 _g_cclosure_marshal_VOID__STRING_STRING_STRING_FLAGS,
                  G_TYPE_NONE, 4,
                  G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_ASK_PASSWORD_FLAGS);
+  g_signal_set_va_marshaller (signals[ASK_PASSWORD],
+                              G_TYPE_FROM_CLASS (object_class),
+                              _g_cclosure_marshal_VOID__STRING_STRING_STRING_FLAGSv);
                  
   /**
    * GMountOperation::ask-question:
@@ -344,9 +348,12 @@ g_mount_operation_class_init (GMountOperationClass *klass)
                  G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GMountOperationClass, ask_question),
                  NULL, NULL,
-                 NULL,
+                 _g_cclosure_marshal_VOID__STRING_BOXED,
                  G_TYPE_NONE, 2,
                  G_TYPE_STRING, G_TYPE_STRV);
+  g_signal_set_va_marshaller (signals[ASK_QUESTION],
+                              G_TYPE_FROM_CLASS (object_class),
+                              _g_cclosure_marshal_VOID__STRING_BOXEDv);
                  
   /**
    * GMountOperation::reply:
@@ -414,9 +421,12 @@ g_mount_operation_class_init (GMountOperationClass *klass)
                  G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GMountOperationClass, show_processes),
                  NULL, NULL,
-                 NULL,
+                 _g_cclosure_marshal_VOID__STRING_BOXED_BOXED,
                  G_TYPE_NONE, 3,
                  G_TYPE_STRING, G_TYPE_ARRAY, G_TYPE_STRV);
+  g_signal_set_va_marshaller (signals[SHOW_PROCESSES],
+                              G_TYPE_FROM_CLASS (object_class),
+                              _g_cclosure_marshal_VOID__STRING_BOXED_BOXEDv);
 
   /**
    * GMountOperation::show-unmount-progress:
@@ -452,9 +462,13 @@ g_mount_operation_class_init (GMountOperationClass *klass)
                   G_TYPE_FROM_CLASS (object_class),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GMountOperationClass, show_unmount_progress),
-                  NULL, NULL, NULL,
+                  NULL, NULL,
+                  _g_cclosure_marshal_VOID__STRING_INT64_INT64,
                   G_TYPE_NONE, 3,
                   G_TYPE_STRING, G_TYPE_INT64, G_TYPE_INT64);
+  g_signal_set_va_marshaller (signals[SHOW_UNMOUNT_PROGRESS],
+                              G_TYPE_FROM_CLASS (object_class),
+                              _g_cclosure_marshal_VOID__STRING_INT64_INT64v);
 
   /**
    * GMountOperation:username:
diff --git a/gio/gsettings.c b/gio/gsettings.c
index eb7f11f3c..5a966b06a 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -30,6 +30,7 @@
 #include "gsettings-mapping.h"
 #include "gsettingsschema-internal.h"
 #include "gaction.h"
+#include "gmarshal-internal.h"
 
 #include "strinfo.c"
 
@@ -777,8 +778,11 @@ g_settings_class_init (GSettingsClass *class)
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GSettingsClass, change_event),
                   g_signal_accumulator_true_handled, NULL,
-                  NULL,
+                  _g_cclosure_marshal_BOOLEAN__POINTER_INT,
                   G_TYPE_BOOLEAN, 2, G_TYPE_POINTER, G_TYPE_INT);
+  g_signal_set_va_marshaller (g_settings_signals[SIGNAL_CHANGE_EVENT],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_BOOLEAN__POINTER_INTv);
 
   /**
    * GSettings::writable-changed:
@@ -832,7 +836,11 @@ g_settings_class_init (GSettingsClass *class)
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GSettingsClass, writable_change_event),
                   g_signal_accumulator_true_handled, NULL,
-                  NULL, G_TYPE_BOOLEAN, 1, G_TYPE_UINT);
+                  _g_cclosure_marshal_BOOLEAN__UINT,
+                  G_TYPE_BOOLEAN, 1, G_TYPE_UINT);
+  g_signal_set_va_marshaller (g_settings_signals[SIGNAL_WRITABLE_CHANGE_EVENT],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_BOOLEAN__UINTv);
 
   /**
    * GSettings:backend:
diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
index 59af25abf..6adeee299 100644
--- a/gio/gsocketclient.c
+++ b/gio/gsocketclient.c
@@ -49,6 +49,7 @@
 #include <gio/gtlsclientconnection.h>
 #include <gio/ginetaddress.h>
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /* As recommended by RFC 8305 this is the time it waits
  * on a connection before starting another concurrent attempt.
@@ -832,11 +833,14 @@ g_socket_client_class_init (GSocketClientClass *class)
                  G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GSocketClientClass, event),
                  NULL, NULL,
-                 NULL,
+                 _g_cclosure_marshal_VOID__ENUM_OBJECT_OBJECT,
                  G_TYPE_NONE, 3,
                  G_TYPE_SOCKET_CLIENT_EVENT,
                  G_TYPE_SOCKET_CONNECTABLE,
                  G_TYPE_IO_STREAM);
+  g_signal_set_va_marshaller (signals[EVENT],
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_VOID__ENUM_OBJECT_OBJECTv);
 
   g_object_class_install_property (gobject_class, PROP_FAMILY,
                                   g_param_spec_enum ("family",
diff --git a/gio/gsocketlistener.c b/gio/gsocketlistener.c
index 7bc4d1a44..d11f10ae4 100644
--- a/gio/gsocketlistener.c
+++ b/gio/gsocketlistener.c
@@ -36,6 +36,7 @@
 #include <gio/gsocketconnection.h>
 #include <gio/ginetsocketaddress.h>
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 
 /**
@@ -181,10 +182,14 @@ g_socket_listener_class_init (GSocketListenerClass *klass)
                   G_TYPE_FROM_CLASS (gobject_class),
                   G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GSocketListenerClass, event),
-                  NULL, NULL, NULL,
+                  NULL, NULL,
+                  _g_cclosure_marshal_VOID__ENUM_OBJECT,
                   G_TYPE_NONE, 2,
                   G_TYPE_SOCKET_LISTENER_EVENT,
                   G_TYPE_SOCKET);
+  g_signal_set_va_marshaller (signals[EVENT],
+                              G_TYPE_FROM_CLASS (gobject_class),
+                              _g_cclosure_marshal_VOID__ENUM_OBJECTv);
 
   source_quark = g_quark_from_static_string ("g-socket-listener-source");
 }
diff --git a/gio/gsocketservice.c b/gio/gsocketservice.c
index 1ac31d505..176c122eb 100644
--- a/gio/gsocketservice.c
+++ b/gio/gsocketservice.c
@@ -64,6 +64,7 @@
 #include "gsocketlistener.h"
 #include "gsocketconnection.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 struct _GSocketServicePrivate
 {
@@ -346,8 +347,12 @@ g_socket_service_class_init (GSocketServiceClass *class)
     g_signal_new (I_("incoming"), G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST,
                   G_STRUCT_OFFSET (GSocketServiceClass, incoming),
                   g_signal_accumulator_true_handled, NULL,
-                  NULL, G_TYPE_BOOLEAN,
+                  _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECT,
+                  G_TYPE_BOOLEAN,
                   2, G_TYPE_SOCKET_CONNECTION, G_TYPE_OBJECT);
+  g_signal_set_va_marshaller (g_socket_service_incoming_signal,
+                              G_TYPE_FROM_CLASS (class),
+                              _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECTv);
 
   /**
    * GSocketService:active:
diff --git a/gio/gthreadedsocketservice.c b/gio/gthreadedsocketservice.c
index b330196e3..c48a93424 100644
--- a/gio/gthreadedsocketservice.c
+++ b/gio/gthreadedsocketservice.c
@@ -48,6 +48,7 @@
 #include "gsocketconnection.h"
 #include "gthreadedsocketservice.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 struct _GThreadedSocketServicePrivate
 {
@@ -238,8 +239,12 @@ g_threaded_socket_service_class_init (GThreadedSocketServiceClass *class)
     g_signal_new (I_("run"), G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GThreadedSocketServiceClass, run),
                  g_signal_accumulator_true_handled, NULL,
-                 NULL, G_TYPE_BOOLEAN,
+                 _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECT,
+                 G_TYPE_BOOLEAN,
                  2, G_TYPE_SOCKET_CONNECTION, G_TYPE_OBJECT);
+  g_signal_set_va_marshaller (g_threaded_socket_service_run_signal,
+                             G_TYPE_FROM_CLASS (class),
+                             _g_cclosure_marshal_BOOLEAN__OBJECT_OBJECTv);
 
   g_object_class_install_property (gobject_class, PROP_MAX_THREADS,
                                   g_param_spec_int ("max-threads",
diff --git a/gio/gtlsconnection.c b/gio/gtlsconnection.c
index 3942f65e3..2e431ae7e 100644
--- a/gio/gtlsconnection.c
+++ b/gio/gtlsconnection.c
@@ -29,6 +29,7 @@
 #include "gtlsdatabase.h"
 #include "gtlsinteraction.h"
 #include "glibintl.h"
+#include "gmarshal-internal.h"
 
 /**
  * SECTION:gtlsconnection
@@ -345,10 +346,13 @@ g_tls_connection_class_init (GTlsConnectionClass *klass)
                  G_SIGNAL_RUN_LAST,
                  G_STRUCT_OFFSET (GTlsConnectionClass, accept_certificate),
                  g_signal_accumulator_true_handled, NULL,
-                 NULL,
+                 _g_cclosure_marshal_BOOLEAN__OBJECT_FLAGS,
                  G_TYPE_BOOLEAN, 2,
                  G_TYPE_TLS_CERTIFICATE,
                  G_TYPE_TLS_CERTIFICATE_FLAGS);
+  g_signal_set_va_marshaller (signals[ACCEPT_CERTIFICATE],
+                              G_TYPE_FROM_CLASS (klass),
+                              _g_cclosure_marshal_BOOLEAN__OBJECT_FLAGSv);
 }
 
 static void
diff --git a/gio/meson.build b/gio/meson.build
index 8f897d5fa..b17ab8148 100644
--- a/gio/meson.build
+++ b/gio/meson.build
@@ -526,6 +526,7 @@ gio_sources = files(
   'gioscheduler.c',
   'giostream.c',
   'gloadableicon.c',
+  'gmarshal-internal.c',
   'gmount.c',
   'gmemoryinputstream.c',
   'gmemoryoutputstream.c',
@@ -1003,4 +1004,15 @@ subdir('fam')
 build_tests = not meson.is_cross_build() or (meson.is_cross_build() and meson.has_exe_wrapper())
 if build_tests
     subdir('tests')
-endif
\ No newline at end of file
+endif
+
+# The following is an example for building internal marshallers that are used
+# by GIO. We cannot guarantee glib-genmarshal availability while building GLib
+# so they are pre-generated and placed into gmarshal-internal.[ch].
+#
+# gmarshal_internal = gnome.genmarshal('gmarshal-internal',
+#   sources: 'gmarshal-internal.list',
+#   prefix: '_g_cclosure_marshal',
+#   valist_marshallers: true,
+#   internal: true,
+# )


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