static void shell_prefs_init (void) { ShellGlobal *global = shell_global_get (); GSettings *settings = shell_global_get_overrides_settings (global); GSettingsSchema *schema; char **keys, **k; if (!settings) return; g_object_get (G_OBJECT (settings), "settings-schema", &schema, NULL); for (keys = k = g_settings_schema_list_keys (schema); *k; k++) meta_prefs_override_preference_schema (*k, g_settings_schema_get_id (schema)); g_strfreev (keys); g_settings_schema_unref (schema); }
static gboolean gnc_gsettings_is_valid_key(GSettings *settings, const gchar *key) { gchar **keys = NULL; gint i = 0; gboolean found = FALSE; #ifdef HAVE_GLIB_2_46 GSettingsSchema *schema; #endif // Check if the key is valid key within settings if (!G_IS_SETTINGS(settings)) return FALSE; #ifdef HAVE_GLIB_2_46 g_object_get (settings, "settings-schema", &schema, NULL); if (!schema) return FALSE; #endif // Get list of keys #ifdef HAVE_GLIB_2_46 keys = g_settings_schema_list_keys(schema); #else keys = g_settings_list_keys(settings); #endif while (keys && keys[i]) { if (!g_strcmp0(key, keys[i])) { found = TRUE; break; } i++; } // Free keys g_strfreev(keys); return found; }
void gnc_gsettings_reset_schema (const gchar *schema_str) { gchar **keys; gint counter = 0; #ifdef HAVE_GLIB_2_46 GSettingsSchema *schema; #endif GSettings *settings = gnc_gsettings_get_settings_ptr (schema_str); if (!settings) return; #ifdef HAVE_GLIB_2_46 g_object_get (settings, "settings-schema", &schema, NULL); if (!schema) return; keys = g_settings_schema_list_keys (schema); #else keys = g_settings_list_keys (settings); #endif if (!keys) return; while (keys[counter]) { gnc_gsettings_reset (schema_str, keys[counter]); counter++; } g_strfreev (keys); }
static NimfSettingsPage * nimf_settings_page_new (NimfSettings *nsettings, const gchar *schema_id) { NimfSettingsPage *page; GSettingsSchema *schema; GList *key_list = NULL; gchar **keys; GList *l; gint i; page = g_slice_new0 (NimfSettingsPage); page->gsettings = g_settings_new (schema_id); page->label = nimf_settings_page_build_label (page, schema_id); page->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 15); page->page_keys = g_ptr_array_new_with_free_func ((GDestroyNotify) nimf_settings_page_key_free); #if GTK_CHECK_VERSION (3, 12, 0) gtk_widget_set_margin_start (page->box, 15); gtk_widget_set_margin_end (page->box, 15); #else gtk_widget_set_margin_left (page->box, 15); gtk_widget_set_margin_right (page->box, 15); #endif gtk_widget_set_margin_top (page->box, 15); gtk_widget_set_margin_bottom (page->box, 15); schema = g_settings_schema_source_lookup (nsettings->schema_source, schema_id, TRUE); #if GLIB_CHECK_VERSION (2, 46, 0) keys = g_settings_schema_list_keys (schema); #else keys = g_settings_list_keys (page->gsettings); #endif for (i = 0; keys[i] != NULL; i++) key_list = g_list_prepend (key_list, keys[i]); key_list = g_list_sort (key_list, (GCompareFunc) on_comparison); for (i = 0, l = key_list; l != NULL; l = l->next, i++) { GVariant *variant; GSettingsSchemaKey *schema_key = NULL; NimfSettingsPageKey *page_key; const GVariantType *type; const gchar *key; const gchar *summary; const gchar *desc; key = l->data; if (g_str_has_prefix (key, "hidden-")) continue; variant = g_settings_get_value (page->gsettings, key); type = g_variant_get_type (variant); schema_key = g_settings_schema_get_key (schema, key); summary = g_settings_schema_key_get_summary (schema_key); desc = g_settings_schema_key_get_description (schema_key); page_key = nimf_settings_page_key_new (page->gsettings, key, summary, desc); g_ptr_array_add (page->page_keys, page_key); if (g_variant_type_equal (type, G_VARIANT_TYPE_BOOLEAN)) { GtkWidget *item; item = nimf_settings_page_key_build_boolean (page_key); gtk_box_pack_start (GTK_BOX (page->box), item, FALSE, FALSE, 0); } else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING)) { GtkWidget *item; item = nimf_settings_page_key_build_string (page_key, schema_id, key_list); gtk_box_pack_start (GTK_BOX (page->box), item, FALSE, FALSE, 0); } else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING_ARRAY)) { GtkWidget *item; item = nimf_settings_page_key_build_string_array (page_key); gtk_box_pack_start (GTK_BOX (page->box), item, FALSE, FALSE, 0); } else g_error (G_STRLOC ": %s: not supported variant type: \"%s\"", G_STRFUNC, (gchar *) type); g_settings_schema_key_unref (schema_key); g_variant_unref (variant); } g_strfreev (keys); g_list_free (key_list); g_settings_schema_unref (schema); return page; }
static gboolean panel_layout_append_self_check (GSettings *settings, PanelLayoutKeyDefinition *key_definitions, int key_definitions_len, GError **error) { GSettingsSchema *schema; char **settings_keys = NULL; int i, j=0; /* Don't do those checks twice; we use a static array with a boolean * for each set of key definitions we might want to check, and mark the * booleans to TRUE once we've entered this function once for a set. */ static gboolean self_check_done[2] = {FALSE, FALSE}; g_assert (key_definitions == panel_layout_toplevel_keys || key_definitions == panel_layout_object_keys); if (key_definitions == panel_layout_toplevel_keys) { if (self_check_done[0]) return TRUE; else self_check_done[0] = TRUE; } if (key_definitions == panel_layout_object_keys) { if (self_check_done[1]) return TRUE; else self_check_done[1] = TRUE; } /* End hacky way of avoiding double-checks */ g_return_val_if_fail (error == NULL || *error == NULL, FALSE); g_object_get (settings, "settings-schema", &schema, NULL); settings_keys = g_settings_schema_list_keys (schema); g_settings_schema_unref (schema); for (i = 0; settings_keys[i] != NULL; i++) { gboolean found = FALSE; for (j = 0; j < key_definitions_len; j++) { if (g_strcmp0 (settings_keys[i], key_definitions[j].name) == 0) { found = TRUE; break; } } if (!found) { g_set_error (error, PANEL_LAYOUT_ERROR, 0, "Mismatch between keys defined in schema and keys known to gnome-panel ('%s' is not known)", settings_keys[i]); g_strfreev (settings_keys); return FALSE; } } g_strfreev (settings_keys); if (i != key_definitions_len) { g_set_error (error, PANEL_LAYOUT_ERROR, 0, "Mismatch between keys defined in schema and keys known to gnome-panel (%d keys in schema, %d keys known to gnome-panel)", i, j); return FALSE; } return TRUE; }