[dconf: 10/11] DConfClient: Add "writability-changed" signal
- From: Allison Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dconf: 10/11] DConfClient: Add "writability-changed" signal
- Date: Wed, 16 Dec 2015 16:36:02 +0000 (UTC)
commit b9427b1b27f95fdb75a404d899de2383a62eb6d9
Author: Xavier Claessens <xavier claessens collabora com>
Date: Fri Dec 4 11:19:01 2015 -0500
DConfClient: Add "writability-changed" signal
https://bugzilla.gnome.org/show_bug.cgi?id=759128
client/dconf-client.c | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
---
diff --git a/client/dconf-client.c b/client/dconf-client.c
index 11bdf3c..36b56aa 100644
--- a/client/dconf-client.c
+++ b/client/dconf-client.c
@@ -63,6 +63,7 @@ G_DEFINE_TYPE (DConfClient, dconf_client, G_TYPE_OBJECT)
enum
{
SIGNAL_CHANGED,
+ SIGNAL_WRITABILITY_CHANGED,
N_SIGNALS
};
static guint dconf_client_signals[N_SIGNALS];
@@ -135,6 +136,20 @@ dconf_client_class_init (DConfClientClass *class)
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
G_TYPE_STRV | G_SIGNAL_TYPE_STATIC_SCOPE,
G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE);
+
+ /**
+ * DConfClient::writability-changed:
+ * @client: the #DConfClient reporting the change
+ * @path: the dir or key that changed
+ *
+ * Signal emitted when writability for a key (or all keys in a dir) changes.
+ * It will be immediately followed by #DConfClient::changed signal for
+ * the path.
+ */
+ dconf_client_signals[SIGNAL_WRITABILITY_CHANGED] = g_signal_new ("writability-changed", DCONF_TYPE_CLIENT,
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING |
G_SIGNAL_TYPE_STATIC_SCOPE);
}
typedef struct
@@ -143,6 +158,7 @@ typedef struct
gchar *prefix;
gchar **changes;
gchar *tag;
+ gboolean is_writability;
} DConfClientChange;
static gboolean
@@ -150,6 +166,16 @@ dconf_client_dispatch_change_signal (gpointer user_data)
{
DConfClientChange *change = user_data;
+ if (change->is_writability)
+ {
+ /* We know that the engine does it this way... */
+ g_assert (change->changes[0][0] == '\0' && change->changes[1] == NULL);
+
+ g_signal_emit (change->client,
+ dconf_client_signals[SIGNAL_WRITABILITY_CHANGED], 0,
+ change->prefix);
+ }
+
g_signal_emit (change->client, dconf_client_signals[SIGNAL_CHANGED], 0,
change->prefix, change->changes, change->tag);
@@ -187,6 +213,7 @@ dconf_engine_change_notify (DConfEngine *engine,
change->prefix = g_strdup (prefix);
change->changes = g_strdupv ((gchar **) changes);
change->tag = g_strdup (tag);
+ change->is_writability = is_writability;
g_main_context_invoke (client->context, dconf_client_dispatch_change_signal, change);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]