X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgsettings-tool.c;h=fd6d910d01762704ab7a055ddb6a734992bc3b05;hb=d5e2a57741ec13196360b073a04f7929ebdb642e;hp=04a1954f59905a322015946b192515e70bf5394d;hpb=eabad1923e7b0f133f8f38e57601a97521e38cfe;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gsettings-tool.c b/gio/gsettings-tool.c index 04a1954..fd6d910 100644 --- a/gio/gsettings-tool.c +++ b/gio/gsettings-tool.c @@ -27,6 +27,10 @@ #include #include +#ifdef G_OS_WIN32 +#include "glib/glib-private.h" +#endif + static gboolean contained (const gchar * const *items, const gchar *item) @@ -39,49 +43,51 @@ contained (const gchar * const *items, } static gboolean -is_schema (const gchar *schema) +is_relocatable_schema (GSettingsSchema *schema) { - return contained (g_settings_list_schemas (), schema); + return g_settings_schema_get_path (schema) == NULL; } static gboolean -is_relocatable_schema (const gchar *schema) +check_relocatable_schema (GSettingsSchema *schema, + const gchar *schema_id) { - return contained (g_settings_list_relocatable_schemas (), schema); -} - -static gboolean -check_relocatable_schema (const gchar *schema) -{ - if (is_relocatable_schema (schema)) - return TRUE; - - if (is_schema (schema)) - g_printerr (_("Schema '%s' is not relocatable " - "(path must not be specified)\n"), - schema); + if (schema == NULL) + { + g_printerr (_("No such schema '%s'\n"), schema_id); + return FALSE; + } - else - g_printerr (_("No such schema '%s'\n"), schema); + if (!is_relocatable_schema (schema)) + { + g_printerr (_("Schema '%s' is not relocatable " + "(path must not be specified)\n"), + schema_id); + return FALSE; + } - return FALSE; + return TRUE; } static gboolean -check_schema (const gchar *schema) +check_schema (GSettingsSchema *schema, + const gchar *schema_id) { - if (is_schema (schema)) - return TRUE; + if (schema == NULL) + { + g_printerr (_("No such schema '%s'\n"), schema_id); + return FALSE; + } if (is_relocatable_schema (schema)) - g_printerr (_("Schema '%s' is relocatable " - "(path must be specified)\n"), - schema); - - else - g_printerr (_("No such schema '%s'\n"), schema); + { + g_printerr (_("Schema '%s' is relocatable " + "(path must be specified)\n"), + schema_id); + return FALSE; + } - return FALSE; + return TRUE; } static gboolean @@ -143,6 +149,15 @@ output_list (const gchar * const *list) } static void +gsettings_print_version (GSettings *settings, + const gchar *key, + const gchar *value) +{ + 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) @@ -187,22 +202,22 @@ gsettings_list_children (GSettings *settings, for (i = 0; children[i]; i++) { GSettings *child; - gchar *schema; + GSettingsSchema *schema; gchar *path; child = g_settings_get_child (settings, children[i]); g_object_get (child, - "schema", &schema, + "settings-schema", &schema, "path", &path, NULL); - if (is_schema (schema)) - g_print ("%-*s %s\n", max, children[i], schema); + if (g_settings_schema_get_path (schema) != NULL) + g_print ("%-*s %s\n", max, children[i], g_settings_schema_get_id (schema)); else - g_print ("%-*s %s:%s\n", max, children[i], schema, path); + g_print ("%-*s %s:%s\n", max, children[i], g_settings_schema_get_id (schema), path); g_object_unref (child); - g_free (schema); + g_settings_schema_unref (schema); g_free (path); } @@ -216,7 +231,7 @@ enumerate (GSettings *settings) gchar *schema; gint i; - g_object_get (settings, "schema", &schema, NULL); + g_object_get (settings, "schema-id", &schema, NULL); keys = g_settings_list_keys (settings); for (i = 0; keys[i]; i++) @@ -250,16 +265,10 @@ gsettings_list_recursively (GSettings *settings, for (i = 0; children[i]; i++) { GSettings *child; - gchar *schema; child = g_settings_get_child (settings, children[i]); - g_object_get (child, "schema", &schema, NULL); - - if (is_schema (schema)) - enumerate (child); - + gsettings_list_recursively (child, NULL, NULL); g_object_unref (child); - g_free (schema); } g_strfreev (children); @@ -274,7 +283,7 @@ gsettings_list_recursively (GSettings *settings, for (i = 0; schemas[i]; i++) { settings = g_settings_new (schemas[i]); - enumerate (settings); + gsettings_list_recursively (settings, NULL, NULL); g_object_unref (settings); } } @@ -387,16 +396,11 @@ gsettings_reset_recursively (GSettings *settings, for (i = 0; children[i]; i++) { GSettings *child; - gchar *schema; - child = g_settings_get_child (settings, children[i]); - g_object_get (child, "schema", &schema, NULL); - if (is_schema (schema)) - reset_all_keys (child); + reset_all_keys (child); g_object_unref (child); - g_free (schema); } g_strfreev (children); @@ -493,6 +497,9 @@ gsettings_set (GSettings *settings, new = g_variant_new_string (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); @@ -506,9 +513,11 @@ gsettings_set (GSettings *settings, exit (1); } - g_settings_set_value (settings, key, new); - g_variant_unref (existing); - g_variant_unref (new); + if (!g_settings_set_value (settings, key, new)) + { + g_printerr (_("The key is not writable\n")); + exit (1); + } g_settings_sync (); @@ -534,6 +543,12 @@ gsettings_help (gboolean requested, synopsis = "[COMMAND]"; } + else if (strcmp (command, "--version") == 0) + { + description = _("Print version information and exit"); + synopsis = ""; + } + else if (strcmp (command, "list-schemas") == 0) { description = _("List the installed (non-relocatable) schemas"); @@ -619,7 +634,8 @@ gsettings_help (gboolean requested, { g_string_append (string, _("Usage:\n" - " gsettings COMMAND [ARGS...]\n" + " gsettings --version\n" + " gsettings [--schemadir SCHEMADIR] COMMAND [ARGS...]\n" "\n" "Commands:\n" " help Show this information\n" @@ -640,36 +656,36 @@ gsettings_help (gboolean requested, } else { - g_string_append_printf (string, _("Usage:\n gsettings %s %s\n\n%s\n\n"), + g_string_append_printf (string, _("Usage:\n gsettings [--schemadir SCHEMADIR] %s %s\n\n%s\n\n"), command, synopsis[0] ? _(synopsis) : "", description); - if (synopsis[0]) - { - g_string_append (string, _("Arguments:\n")); + g_string_append (string, _("Arguments:\n")); - if (strstr (synopsis, "[COMMAND]")) - g_string_append (string, - _(" COMMAND The (optional) command to explain\n")); + g_string_append (string, + _(" SCHEMADIR A directory to search for additional schemas\n")); - else if (strstr (synopsis, "SCHEMA")) - g_string_append (string, - _(" SCHEMA The name of the schema\n" - " PATH The path, for relocatable schemas\n")); + if (strstr (synopsis, "[COMMAND]")) + g_string_append (string, + _(" COMMAND The (optional) command to explain\n")); - if (strstr (synopsis, "[KEY]")) - g_string_append (string, - _(" KEY The (optional) key within the schema\n")); + else if (strstr (synopsis, "SCHEMA")) + g_string_append (string, + _(" SCHEMA The name of the schema\n" + " PATH The path, for relocatable schemas\n")); - else if (strstr (synopsis, "KEY")) - g_string_append (string, - _(" KEY The key within the schema\n")); + if (strstr (synopsis, "[KEY]")) + g_string_append (string, + _(" KEY The (optional) key within the schema\n")); - if (strstr (synopsis, "VALUE")) - g_string_append (string, - _(" VALUE The value to set\n")); + else if (strstr (synopsis, "KEY")) + g_string_append (string, + _(" KEY The key within the schema\n")); - g_string_append (string, "\n"); - } + if (strstr (synopsis, "VALUE")) + g_string_append (string, + _(" VALUE The value to set\n")); + + g_string_append (string, "\n"); } if (requested) @@ -687,14 +703,20 @@ int main (int argc, char **argv) { void (* function) (GSettings *, const gchar *, const gchar *); + GSettingsSchemaSource *schema_source; + GSettingsSchema *schema; GSettings *settings; const gchar *key; +#ifdef G_OS_WIN32 + gchar *tmp; +#endif + setlocale (LC_ALL, ""); textdomain (GETTEXT_PACKAGE); #ifdef G_OS_WIN32 - gchar *tmp = _glib_get_locale_dir (); + tmp = _glib_get_locale_dir (); bindtextdomain (GETTEXT_PACKAGE, tmp); g_free (tmp); #else @@ -708,9 +730,35 @@ main (int argc, char **argv) if (argc < 2) return gsettings_help (FALSE, NULL); - else if (strcmp (argv[1], "help") == 0) + 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; + GError *error = NULL; + + schema_source = g_settings_schema_source_new_from_directory (argv[2], parent, FALSE, &error); + g_settings_schema_source_unref (parent); + + if (schema_source == NULL) + { + g_printerr (_("Could not load schemas from %s: %s\n"), argv[2], error->message); + g_clear_error (&error); + + return 1; + } + + /* shift remaining arguments (not correct wrt argv[0], but doesn't matter) */ + argv = argv + 2; + argc -= 2; + } + + if (strcmp (argv[1], "help") == 0) return gsettings_help (TRUE, argv[2]); + else if (argc == 2 && strcmp (argv[1], "--version") == 0) + function = gsettings_print_version; + else if (argc == 2 && strcmp (argv[1], "list-schemas") == 0) function = gsettings_list_schemas; @@ -750,8 +798,6 @@ main (int argc, char **argv) else return gsettings_help (FALSE, argv[1]); - g_type_init (); - if (argc > 2) { gchar **parts; @@ -764,25 +810,29 @@ main (int argc, char **argv) parts = g_strsplit (argv[2], ":", 2); + schema = g_settings_schema_source_lookup (schema_source, parts[0], TRUE); if (parts[1]) { - if (!check_relocatable_schema (parts[0]) || !check_path (parts[1])) + if (!check_relocatable_schema (schema, parts[0]) || !check_path (parts[1])) return 1; - settings = g_settings_new_with_path (parts[0], parts[1]); + settings = g_settings_new_full (schema, NULL, parts[1]); } else { - if (!check_schema (parts[0])) + if (!check_schema (schema, parts[0])) return 1; - settings = g_settings_new (parts[0]); + settings = g_settings_new_full (schema, NULL, NULL); } g_strfreev (parts); } else - settings = NULL; + { + settings = NULL; + schema = NULL; + } if (argc > 3) { @@ -798,6 +848,10 @@ main (int argc, char **argv) if (settings != NULL) g_object_unref (settings); + if (schema != NULL) + g_settings_schema_unref (schema); + + g_settings_schema_source_unref (schema_source); return 0; }