diff options
author | Ryan Lortie <desrt@desrt.ca> | 2013-10-27 08:24:22 -0700 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2013-10-27 09:15:25 -0700 |
commit | a1d8d962aedeaf1ef15543573121962bf6aba702 (patch) | |
tree | 018f736583c745b0f60a46c002887589ab24ba84 | |
parent | 27840ede86a6a4785f59ed4ec706c4ac1a31936b (diff) | |
download | glib-wip/gsettings-work.tar.gz |
GSettings tool: stop using deprecated APIswip/gsettings-work
Stop using the recently-deprecated GSettings APIs.
This fixes a number of bugs and also a net reduction of code. In
particular, list-schemas will now work in context of a given --schemadir
argument.
https://bugzilla.gnome.org/show_bug.cgi?id=695558
-rw-r--r-- | gio/gsettings-tool.c | 259 |
1 files changed, 108 insertions, 151 deletions
diff --git a/gio/gsettings-tool.c b/gio/gsettings-tool.c index fd6d910d0..e823cf4d5 100644 --- a/gio/gsettings-tool.c +++ b/gio/gsettings-tool.c @@ -31,16 +31,12 @@ #include "glib/glib-private.h" #endif -static gboolean -contained (const gchar * const *items, - const gchar *item) -{ - while (*items) - if (strcmp (*items++, item) == 0) - return TRUE; - - return FALSE; -} +static GSettingsSchemaSource *global_schema_source; +static GSettings *global_settings; +static GSettingsSchema *global_schema; +static GSettingsSchemaKey *global_schema_key; +const gchar *global_key; +const gchar *global_value; static gboolean is_relocatable_schema (GSettingsSchema *schema) @@ -120,27 +116,8 @@ check_path (const gchar *path) return TRUE; } -static gboolean -check_key (GSettings *settings, - const gchar *key) -{ - gboolean good; - gchar **keys; - - keys = g_settings_list_keys (settings); - good = contained ((const gchar **) keys, key); - g_strfreev (keys); - - if (good) - return TRUE; - - g_printerr (_("No such key '%s'\n"), key); - - return FALSE; -} - static void -output_list (const gchar * const *list) +output_list (gchar **list) { gint i; @@ -149,52 +126,50 @@ output_list (const gchar * const *list) } static void -gsettings_print_version (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_print_version (void) { g_print ("%d.%d.%d\n", glib_major_version, glib_minor_version, glib_micro_version); } static void -gsettings_list_schemas (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_list_schemas (void) { - output_list (g_settings_list_schemas ()); + gchar **schemas; + + g_settings_schema_source_list_schemas (global_schema_source, TRUE, &schemas, NULL); + output_list (schemas); + g_strfreev (schemas); } static void -gsettings_list_relocatable_schemas (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_list_relocatable_schemas (void) { - output_list (g_settings_list_relocatable_schemas ()); + gchar **schemas; + + g_settings_schema_source_list_schemas (global_schema_source, TRUE, NULL, &schemas); + output_list (schemas); + g_strfreev (schemas); } static void -gsettings_list_keys (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_list_keys (void) { gchar **keys; - keys = g_settings_list_keys (settings); - output_list ((const gchar **) keys); + keys = g_settings_list_keys (global_settings); + output_list (keys); g_strfreev (keys); } static void -gsettings_list_children (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_list_children (void) { gchar **children; gint max = 0; gint i; - children = g_settings_list_children (settings); + children = g_settings_list_children (global_settings); for (i = 0; children[i]; i++) if (strlen (children[i]) > max) max = strlen (children[i]); @@ -205,7 +180,7 @@ gsettings_list_children (GSettings *settings, GSettingsSchema *schema; gchar *path; - child = g_settings_get_child (settings, children[i]); + child = g_settings_get_child (global_settings, children[i]); g_object_get (child, "settings-schema", &schema, "path", &path, @@ -251,53 +226,59 @@ enumerate (GSettings *settings) } static void -gsettings_list_recursively (GSettings *settings, - const gchar *key, - const gchar *value) +list_recursively (GSettings *settings) { - if (settings) + gchar **children; + gint i; + + enumerate (settings); + children = g_settings_list_children (settings); + for (i = 0; children[i]; i++) { - gchar **children; - gint i; + GSettings *child; - enumerate (settings); - children = g_settings_list_children (settings); - for (i = 0; children[i]; i++) - { - GSettings *child; + child = g_settings_get_child (settings, children[i]); + list_recursively (child); + g_object_unref (child); + } - child = g_settings_get_child (settings, children[i]); - gsettings_list_recursively (child, NULL, NULL); - g_object_unref (child); - } + g_strfreev (children); +} - g_strfreev (children); +static void +gsettings_list_recursively (void) +{ + if (global_settings) + { + list_recursively (global_settings); } else { - const gchar * const *schemas; + gchar **schemas; gint i; - schemas = g_settings_list_schemas (); + g_settings_schema_source_list_schemas (global_schema_source, TRUE, &schemas, NULL); for (i = 0; schemas[i]; i++) { + GSettings *settings; + settings = g_settings_new (schemas[i]); - gsettings_list_recursively (settings, NULL, NULL); + list_recursively (settings); g_object_unref (settings); } + + g_strfreev (schemas); } } static void -gsettings_range (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_range (void) { GVariant *range, *detail; const gchar *type; - range = g_settings_get_range (settings, key); + range = g_settings_schema_key_get_range (global_schema_key); g_variant_get (range, "(&sv)", &type, &detail); if (strcmp (type, "type") == 0) @@ -343,14 +324,12 @@ gsettings_range (GSettings *settings, } static void -gsettings_get (GSettings *settings, - const gchar *key, - const gchar *value_) +gsettings_get (void) { GVariant *value; gchar *printed; - value = g_settings_get_value (settings, key); + value = g_settings_get_value (global_settings, global_key); printed = g_variant_print (value, TRUE); g_print ("%s\n", printed); g_variant_unref (value); @@ -358,16 +337,14 @@ gsettings_get (GSettings *settings, } static void -gsettings_reset (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_reset (void) { - g_settings_reset (settings, key); + g_settings_reset (global_settings, global_key); g_settings_sync (); } static void -reset_all_keys (GSettings *settings) +reset_all_keys (GSettings *settings) { gchar **keys; gint i; @@ -382,21 +359,19 @@ reset_all_keys (GSettings *settings) } static void -gsettings_reset_recursively (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_reset_recursively (void) { gchar **children; gint i; - g_settings_delay (settings); + g_settings_delay (global_settings); - reset_all_keys (settings); - children = g_settings_list_children (settings); + reset_all_keys (global_settings); + children = g_settings_list_children (global_settings); for (i = 0; children[i]; i++) { GSettings *child; - child = g_settings_get_child (settings, children[i]); + child = g_settings_get_child (global_settings, children[i]); reset_all_keys (child); @@ -405,68 +380,58 @@ gsettings_reset_recursively (GSettings *settings, g_strfreev (children); - g_settings_apply (settings); + g_settings_apply (global_settings); g_settings_sync (); } static void -gsettings_writable (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_writable (void) { g_print ("%s\n", - g_settings_is_writable (settings, key) ? + g_settings_is_writable (global_settings, global_key) ? "true" : "false"); } static void -value_changed (GSettings *settings, - const gchar *key, - gpointer user_data) +value_changed (void) { GVariant *value; gchar *printed; - value = g_settings_get_value (settings, key); + value = g_settings_get_value (global_settings, global_key); printed = g_variant_print (value, TRUE); - g_print ("%s: %s\n", key, printed); + g_print ("%s: %s\n", global_key, printed); g_variant_unref (value); g_free (printed); } static void -gsettings_monitor (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_monitor (void) { - if (key) + if (global_key) { gchar *name; - name = g_strdup_printf ("changed::%s", key); - g_signal_connect (settings, name, G_CALLBACK (value_changed), NULL); + name = g_strdup_printf ("changed::%s", global_key); + g_signal_connect (global_settings, name, G_CALLBACK (value_changed), NULL); } else - g_signal_connect (settings, "changed", G_CALLBACK (value_changed), NULL); + g_signal_connect (global_settings, "changed", G_CALLBACK (value_changed), NULL); g_main_loop_run (g_main_loop_new (NULL, FALSE)); } static void -gsettings_set (GSettings *settings, - const gchar *key, - const gchar *value) +gsettings_set (void) { const GVariantType *type; GError *error = NULL; - GVariant *existing; GVariant *new; gchar *freeme = NULL; - existing = g_settings_get_value (settings, key); - type = g_variant_get_type (existing); + type = g_settings_schema_key_get_value_type (global_schema_key); - new = g_variant_parse (type, value, NULL, NULL, &error); + new = g_variant_parse (type, global_value, NULL, NULL, &error); /* If that didn't work and the type is string then we should assume * that the user is just trying to set a string directly and forgot @@ -491,29 +456,26 @@ gsettings_set (GSettings *settings, */ if (new == NULL && g_variant_type_equal (type, G_VARIANT_TYPE_STRING) && - value[0] != '\'' && value[0] != '"') + global_value[0] != '\'' && global_value[0] != '"') { g_clear_error (&error); - new = g_variant_new_string (value); + new = g_variant_new_string (global_value); } - /* we're done with 'type' now, so we can free 'existing' */ - g_variant_unref (existing); - if (new == NULL) { g_printerr ("%s\n", error->message); exit (1); } - if (!g_settings_range_check (settings, key, new)) + if (!g_settings_schema_key_range_check (global_schema_key, new)) { g_printerr (_("The provided value is outside of the valid range\n")); g_variant_unref (new); exit (1); } - if (!g_settings_set_value (settings, key, new)) + if (!g_settings_set_value (global_settings, global_key, new)) { g_printerr (_("The key is not writable\n")); exit (1); @@ -702,11 +664,7 @@ gsettings_help (gboolean requested, int main (int argc, char **argv) { - void (* function) (GSettings *, const gchar *, const gchar *); - GSettingsSchemaSource *schema_source; - GSettingsSchema *schema; - GSettings *settings; - const gchar *key; + void (* function) (void); #ifdef G_OS_WIN32 gchar *tmp; @@ -730,17 +688,17 @@ main (int argc, char **argv) if (argc < 2) return gsettings_help (FALSE, NULL); - schema_source = g_settings_schema_source_ref (g_settings_schema_source_get_default ()); + global_schema_source = g_settings_schema_source_ref (g_settings_schema_source_get_default ()); if (argc > 3 && g_str_equal (argv[1], "--schemadir")) { - GSettingsSchemaSource *parent = schema_source; + GSettingsSchemaSource *parent = global_schema_source; GError *error = NULL; - schema_source = g_settings_schema_source_new_from_directory (argv[2], parent, FALSE, &error); + global_schema_source = g_settings_schema_source_new_from_directory (argv[2], parent, FALSE, &error); g_settings_schema_source_unref (parent); - if (schema_source == NULL) + if (global_schema_source == NULL) { g_printerr (_("Could not load schemas from %s: %s\n"), argv[2], error->message); g_clear_error (&error); @@ -810,48 +768,47 @@ main (int argc, char **argv) parts = g_strsplit (argv[2], ":", 2); - schema = g_settings_schema_source_lookup (schema_source, parts[0], TRUE); + global_schema = g_settings_schema_source_lookup (global_schema_source, parts[0], TRUE); if (parts[1]) { - if (!check_relocatable_schema (schema, parts[0]) || !check_path (parts[1])) + if (!check_relocatable_schema (global_schema, parts[0]) || !check_path (parts[1])) return 1; - settings = g_settings_new_full (schema, NULL, parts[1]); + global_settings = g_settings_new_full (global_schema, NULL, parts[1]); } else { - if (!check_schema (schema, parts[0])) + if (!check_schema (global_schema, parts[0])) return 1; - settings = g_settings_new_full (schema, NULL, NULL); + global_settings = g_settings_new_full (global_schema, NULL, NULL); } g_strfreev (parts); } - else - { - settings = NULL; - schema = NULL; - } if (argc > 3) { - if (!check_key (settings, argv[3])) - return 1; + if (!g_settings_schema_has_key (global_schema, argv[3])) + { + g_printerr (_("No such key '%s'\n"), argv[3]); + return 1; + } - key = argv[3]; + global_key = argv[3]; + global_schema_key = g_settings_schema_get_key (global_schema, global_key); } - else - key = NULL; - (* function) (settings, key, argc > 4 ? argv[4] : NULL); + if (argc > 4) + global_value = argv[4]; + + (* function) (); - if (settings != NULL) - g_object_unref (settings); - if (schema != NULL) - g_settings_schema_unref (schema); - g_settings_schema_source_unref (schema_source); + g_clear_pointer (&global_schema_source, g_settings_schema_source_unref); + g_clear_pointer (&global_schema_key, g_settings_schema_key_unref); + g_clear_pointer (&global_schema, g_settings_schema_unref); + g_clear_object (&global_settings); return 0; } |