diff --git a/gio/gsettings.c b/gio/gsettings.c index 219630b79..a6ee776c2 100644 --- a/gio/gsettings.c +++ b/gio/gsettings.c @@ -279,8 +279,14 @@ g_settings_real_change_event (GSettings *settings, keys = g_settings_schema_list (settings->priv->schema, &n_keys); for (i = 0; i < n_keys; i++) - g_signal_emit (settings, g_settings_signals[SIGNAL_CHANGED], - keys[i], g_quark_to_string (keys[i])); + { + const gchar *key = g_quark_to_string (keys[i]); + + if (g_str_has_suffix (key, "/")) + continue; + + g_signal_emit (settings, g_settings_signals[SIGNAL_CHANGED], keys[i], key); + } return FALSE; } @@ -297,8 +303,14 @@ g_settings_real_writable_change_event (GSettings *settings, keys = g_settings_schema_list (settings->priv->schema, &n_keys); for (i = 0; i < n_keys; i++) - g_signal_emit (settings, g_settings_signals[SIGNAL_WRITABLE_CHANGED], - keys[i], g_quark_to_string (keys[i])); + { + const gchar *key = g_quark_to_string (keys[i]); + + if (g_str_has_suffix (key, "/")) + continue; + + g_signal_emit (settings, g_settings_signals[SIGNAL_WRITABLE_CHANGED], keys[i], key); + } return FALSE; } diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c index bdb9babcb..f8be19fa9 100644 --- a/gio/gsettingsschema.c +++ b/gio/gsettingsschema.c @@ -636,7 +636,7 @@ g_settings_schema_get_value (GSettingsSchema *schema, value = gvdb_table_get_raw_value (schema->table, key); - if G_UNLIKELY (value == NULL) + if G_UNLIKELY (value == NULL || !g_variant_is_of_type (value, G_VARIANT_TYPE_TUPLE)) g_error ("Settings schema '%s' does not contain a key named '%s'", schema->id, key); iter = g_variant_iter_new (value);