[glib] gsettingsbackend: a minor simplification



commit 698970f1f70f1821df5ac83ffa6d797fa4579881
Author: Ryan Lortie <desrt desrt ca>
Date:   Wed Feb 26 17:09:59 2014 -0500

    gsettingsbackend: a minor simplification
    
    Change the order of the arguments on the (internal) keys_changed callback in
    GSettingsListenerVTable.
    
    This means that all functions in the table now fit the following signature:
    
      void (* f) (GObject             *target,
                  GSettingsBackend    *backend,
                  const gchar         *name_or_path,
                  gpointer             origin_tag,
                  const gchar * const *names);
    
    allowing the possibility of arguments ignored at the end.
    
    This allows us to simplify our dispatch-to-thread code in GSettingsBackend,
    making it a bit less generic.
    
    So far, this should be a straight refactor.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=710367

 gio/gdelayedsettingsbackend.c  |    4 +-
 gio/gsettings.c                |    4 +-
 gio/gsettingsbackend.c         |   74 +++++++++++++--------------------------
 gio/gsettingsbackendinternal.h |    4 +-
 4 files changed, 31 insertions(+), 55 deletions(-)
---
diff --git a/gio/gdelayedsettingsbackend.c b/gio/gdelayedsettingsbackend.c
index 2a45a0e..22a42eb 100644
--- a/gio/gdelayedsettingsbackend.c
+++ b/gio/gdelayedsettingsbackend.c
@@ -306,8 +306,8 @@ static void
 delayed_backend_keys_changed (GObject             *target,
                               GSettingsBackend    *backend,
                               const gchar         *path,
-                              const gchar * const *items,
-                              gpointer             origin_tag)
+                              gpointer             origin_tag,
+                              const gchar * const *items)
 {
   GDelayedSettingsBackend *delayed = G_DELAYED_SETTINGS_BACKEND (target);
 
diff --git a/gio/gsettings.c b/gio/gsettings.c
index 66effae..fdc3c9d 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -357,8 +357,8 @@ static void
 settings_backend_keys_changed (GObject             *target,
                                GSettingsBackend    *backend,
                                const gchar         *path,
-                               const gchar * const *items,
-                               gpointer             origin_tag)
+                               gpointer             origin_tag,
+                               const gchar * const *items)
 {
   GSettings *settings = G_SETTINGS (target);
   gboolean ignore_this;
diff --git a/gio/gsettingsbackend.c b/gio/gsettingsbackend.c
index c0bcaeb..ef31b73 100644
--- a/gio/gsettingsbackend.c
+++ b/gio/gsettingsbackend.c
@@ -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
diff --git a/gio/gsettingsbackendinternal.h b/gio/gsettingsbackendinternal.h
index c01fd8f..eef4c7a 100644
--- a/gio/gsettingsbackendinternal.h
+++ b/gio/gsettingsbackendinternal.h
@@ -37,8 +37,8 @@ typedef struct
   void (* keys_changed)          (GObject             *target,
                                   GSettingsBackend    *backend,
                                   const gchar         *prefix,
-                                  const gchar * const *names,
-                                  gpointer             origin_tag);
+                                  gpointer             origin_tag,
+                                  const gchar * const *names);
   void (* writable_changed)      (GObject             *target,
                                   GSettingsBackend    *backend,
                                   const gchar         *key);


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