gsettingsbackend: a minor simplification
[platform/upstream/glib.git] / gio / gsettingsbackend.c
index c0bcaeb..ef31b73 100644 (file)
@@ -130,18 +130,17 @@ struct _GSettingsBackendWatch
 
 struct _GSettingsBackendClosure
 {
-  void (*function) (GObject          *target,
-                    GSettingsBackend *backend,
-                    const gchar      *name,
-                    gpointer          data1,
-                    gpointer          data2);
-
-  GSettingsBackend *backend;
-  GObject          *target;
-  gchar            *name;
-  gpointer          data1;
-  GBoxedFreeFunc    data1_free;
-  gpointer          data2;
+  void (*function) (GObject           *target,
+                    GSettingsBackend  *backend,
+                    const gchar       *name,
+                    gpointer           origin_tag,
+                    gchar            **names);
+
+  GObject           *target;
+  GSettingsBackend  *backend;
+  gchar             *name;
+  gpointer           origin_tag;
+  gchar            **names;
 };
 
 static void
@@ -265,11 +264,11 @@ g_settings_backend_invoke_closure (gpointer user_data)
   GSettingsBackendClosure *closure = user_data;
 
   closure->function (closure->target, closure->backend, closure->name,
-                     closure->data1, closure->data2);
+                     closure->origin_tag, closure->names);
 
-  closure->data1_free (closure->data1);
   g_object_unref (closure->backend);
   g_object_unref (closure->target);
+  g_strfreev (closure->names);
   g_free (closure->name);
 
   g_slice_free (GSettingsBackendClosure, closure);
@@ -277,34 +276,15 @@ g_settings_backend_invoke_closure (gpointer user_data)
   return FALSE;
 }
 
-static gpointer
-pointer_id (gpointer a)
-{
-  return a;
-}
-
 static void
-pointer_ignore (gpointer a)
-{
-}
-
-static void
-g_settings_backend_dispatch_signal (GSettingsBackend *backend,
-                                    gsize             function_offset,
-                                    const gchar      *name,
-                                    gpointer          data1,
-                                    GBoxedCopyFunc    data1_copy,
-                                    GBoxedFreeFunc    data1_free,
-                                    gpointer          data2)
+g_settings_backend_dispatch_signal (GSettingsBackend    *backend,
+                                    gsize                function_offset,
+                                    const gchar         *name,
+                                    gpointer             origin_tag,
+                                    const gchar * const *names)
 {
   GSettingsBackendWatch *suffix, *watch, *next;
 
-  if (data1_copy == NULL)
-    data1_copy = pointer_id;
-
-  if (data1_free == NULL)
-    data1_free = pointer_ignore;
-
   /* We're in a little bit of a tricky situation here.  We need to hold
    * a lock while traversing the list, but we don't want to hold the
    * lock while calling back into user code.
@@ -336,9 +316,8 @@ g_settings_backend_dispatch_signal (GSettingsBackend *backend,
       closure->function = G_STRUCT_MEMBER (void *, watch->vtable,
                                            function_offset);
       closure->name = g_strdup (name);
-      closure->data1 = data1_copy (data1);
-      closure->data1_free = data1_free;
-      closure->data2 = data2;
+      closure->origin_tag = origin_tag;
+      closure->names = g_strdupv ((gchar **) names);
 
       /* we do this here because 'watch' may not live to the end of this
        * iteration of the loop (since we may unref the target below).
@@ -396,7 +375,7 @@ g_settings_backend_changed (GSettingsBackend *backend,
   g_settings_backend_dispatch_signal (backend,
                                       G_STRUCT_OFFSET (GSettingsListenerVTable,
                                                        changed),
-                                      key, origin_tag, NULL, NULL, NULL);
+                                      key, origin_tag, NULL);
 }
 
 /**
@@ -445,10 +424,7 @@ g_settings_backend_keys_changed (GSettingsBackend    *backend,
   g_settings_backend_dispatch_signal (backend,
                                       G_STRUCT_OFFSET (GSettingsListenerVTable,
                                                        keys_changed),
-                                      path, (gpointer) items,
-                                      (GBoxedCopyFunc) g_strdupv,
-                                      (GBoxedFreeFunc) g_strfreev,
-                                      origin_tag);
+                                      path, origin_tag, items);
 }
 
 /**
@@ -492,7 +468,7 @@ g_settings_backend_path_changed (GSettingsBackend *backend,
   g_settings_backend_dispatch_signal (backend,
                                       G_STRUCT_OFFSET (GSettingsListenerVTable,
                                                        path_changed),
-                                      path, origin_tag, NULL, NULL, NULL);
+                                      path, origin_tag, NULL);
 }
 
 /**
@@ -517,7 +493,7 @@ g_settings_backend_writable_changed (GSettingsBackend *backend,
   g_settings_backend_dispatch_signal (backend,
                                       G_STRUCT_OFFSET (GSettingsListenerVTable,
                                                        writable_changed),
-                                      key, NULL, NULL, NULL, NULL);
+                                      key, NULL, NULL);
 }
 
 /**
@@ -543,7 +519,7 @@ g_settings_backend_path_writable_changed (GSettingsBackend *backend,
   g_settings_backend_dispatch_signal (backend,
                                       G_STRUCT_OFFSET (GSettingsListenerVTable,
                                                        path_writable_changed),
-                                      path, NULL, NULL, NULL, NULL);
+                                      path, NULL, NULL);
 }
 
 typedef struct