static gboolean utils_get_entry_values_stringified (DBusMessageIter *main_iter, gchar **key_p, GConfValue **value_p, gboolean *is_default_p, gboolean *is_writable_p, gchar **schema_name_p) { DBusMessageIter struct_iter; gchar *key; gchar *value_str; GConfValue *value; gboolean is_default; gboolean is_writable; gchar *schema_name; dbus_message_iter_recurse (main_iter, &struct_iter); dbus_message_iter_get_basic (&struct_iter, &key); d(g_print ("Getting entry %s\n", key)); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &value_str); if (value_str[0] != '\0') value = gconf_value_decode (value_str); else value = NULL; dbus_message_iter_next (&struct_iter); schema_name = (gchar *) utils_get_optional_string (&struct_iter); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &is_default); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &is_writable); if (key_p) *key_p = key; if (value_p) *value_p = value; else gconf_value_free (value); if (schema_name_p) *schema_name_p = schema_name; if (is_default_p) *is_default_p = is_default; if (is_writable_p) *is_writable_p = is_writable; return TRUE; }
void gconf_defaults_set_mandatory_value (GConfDefaults *mechanism, const char *path, const char *value, DBusGMethodInvocation *context) { GConfValue *gvalue; const char *includes[] = { NULL, NULL }; gvalue = gconf_value_decode (value); if (gvalue) { includes[0] = path; do_copy (mechanism, TRUE, includes, NULL, gvalue, context, NULL, NULL, NULL); } }
static GConfSchema * utils_get_schema (DBusMessageIter *main_iter) { DBusMessageIter struct_iter; gint32 type, list_type, car_type, cdr_type; const gchar *locale, *short_desc, *long_desc, *owner; const gchar *encoded; GConfSchema *schema; GConfValue *default_value; g_assert (dbus_message_iter_get_arg_type (main_iter) == DBUS_TYPE_STRUCT); dbus_message_iter_recurse (main_iter, &struct_iter); dbus_message_iter_get_basic (&struct_iter, &type); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &list_type); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &car_type); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &cdr_type); dbus_message_iter_next (&struct_iter); locale = utils_get_optional_string (&struct_iter); dbus_message_iter_next (&struct_iter); short_desc = utils_get_optional_string (&struct_iter); dbus_message_iter_next (&struct_iter); long_desc = utils_get_optional_string (&struct_iter); dbus_message_iter_next (&struct_iter); owner = utils_get_optional_string (&struct_iter); dbus_message_iter_next (&struct_iter); dbus_message_iter_get_basic (&struct_iter, &encoded); schema = gconf_schema_new (); gconf_schema_set_type (schema, type); gconf_schema_set_list_type (schema, list_type); gconf_schema_set_car_type (schema, car_type); gconf_schema_set_cdr_type (schema, cdr_type); if (locale) gconf_schema_set_locale (schema, locale); if (short_desc) gconf_schema_set_short_desc (schema, short_desc); if (long_desc) gconf_schema_set_long_desc (schema, long_desc); if (owner) gconf_schema_set_owner (schema, owner); if (*encoded != '\0') { default_value = gconf_value_decode (encoded); if (default_value) gconf_schema_set_default_value_nocopy (schema, default_value); } return schema; }
static void do_set_value (GConfDefaults *mechanism, gboolean mandatory, const char *path, const char *value, DBusGMethodInvocation *context, GConfChangeSet **changeset_out) { GConfClient *dest = NULL; GConfChangeSet *changes = NULL; GConfEngine *engine; GConfValue *gvalue; GError *error; GError *error2; const char *action; const char *annotation_key; const char *default_action; const char *dest_address; if (changeset_out) *changeset_out = NULL; stop_killtimer (); if (mandatory) { annotation_key = "org.gnome.gconf.defaults.set-mandatory.prefix"; default_action = "org.gnome.gconf.defaults.set-mandatory"; dest_address = "xml:merged:/etc/gconf/gconf.xml.mandatory"; } else { annotation_key = "org.gnome.gconf.defaults.set-system.prefix"; default_action = "org.gnome.gconf.defaults.set-system"; dest_address = "xml:merged:/etc/gconf/gconf.xml.system"; } action = polkit_action_for_gconf_path (mechanism, annotation_key, path); if (action == NULL) action = default_action; if (!check_polkit_for_action (mechanism, context, action)) goto out; error = NULL; engine = gconf_engine_get_local (dest_address, &error); if (error) goto cleanup; dest = gconf_client_get_for_engine (engine); gconf_engine_unref (engine); changes = gconf_change_set_new (); gvalue = gconf_value_decode (value); if (!gvalue) goto cleanup; gconf_change_set_set (changes, path, gvalue); gconf_value_free (gvalue); gconf_client_commit_change_set (dest, changes, FALSE, &error); gconf_client_suggest_sync (dest, NULL); if (changeset_out) { *changeset_out = changes; changes = NULL; } cleanup: if (changes) gconf_change_set_unref (changes); if (dest) g_object_unref (dest); if (error) { g_print ("failed to set GConf values: %s\n", error->message); error2 = g_error_new_literal (GCONF_DEFAULTS_ERROR, GCONF_DEFAULTS_ERROR_GENERAL, error->message); g_error_free (error); dbus_g_method_return_error (context, error2); g_error_free (error2); } else dbus_g_method_return (context); out: start_killtimer (); }