From 698970f1f70f1821df5ac83ffa6d797fa4579881 Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Wed, 26 Feb 2014 17:09:59 -0500 Subject: [PATCH] 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 | 72 ++++++++++++---------------------- gio/gsettingsbackendinternal.h | 4 +- 4 files changed, 30 insertions(+), 54 deletions(-) diff --git a/gio/gdelayedsettingsbackend.c b/gio/gdelayedsettingsbackend.c index 2a45a0e7f..22a42ebda 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 66effae25..fdc3c9d10 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 c0bcaeb08..ef31b7361 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); + void (*function) (GObject *target, + GSettingsBackend *backend, + const gchar *name, + gpointer origin_tag, + gchar **names); - GSettingsBackend *backend; - GObject *target; - gchar *name; - gpointer data1; - GBoxedFreeFunc data1_free; - gpointer data2; + 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 c01fd8ffc..eef4c7a10 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);