+ gtk_print_settings_set (settings, keys[i], value);
+ g_free (value);
+ }
+
+ g_strfreev (keys);
+
+ return TRUE;
+}
+
+/**
+ * gtk_print_settings_new_from_key_file:
+ * @key_file: the #GKeyFile to retrieve the settings from
+ * @group_name: (allow-none): the name of the group to use, or %NULL to use
+ * the default "Print Settings"
+ * @error: (allow-none): return location for errors, or %NULL
+ *
+ * Reads the print settings from the group @group_name in @key_file. Returns a
+ * new #GtkPrintSettings object with the restored settings, or %NULL if an
+ * error occurred. If the file could not be loaded then error is set to either
+ * a #GFileError or #GKeyFileError.
+ *
+ * Return value: the restored #GtkPrintSettings
+ *
+ * Since: 2.12
+ */
+GtkPrintSettings *
+gtk_print_settings_new_from_key_file (GKeyFile *key_file,
+ const gchar *group_name,
+ GError **error)
+{
+ GtkPrintSettings *settings = gtk_print_settings_new ();
+
+ if (!gtk_print_settings_load_key_file (settings, key_file,
+ group_name, error))
+ {
+ g_object_unref (settings);
+ settings = NULL;
+ }
+
+ return settings;
+}
+
+/**
+ * gtk_print_settings_to_file:
+ * @settings: a #GtkPrintSettings
+ * @file_name: (type filename): the file to save to
+ * @error: (allow-none): return location for errors, or %NULL
+ *
+ * This function saves the print settings from @settings to @file_name. If the
+ * file could not be loaded then error is set to either a #GFileError or
+ * #GKeyFileError.
+ *
+ * Return value: %TRUE on success
+ *
+ * Since: 2.12
+ */
+gboolean
+gtk_print_settings_to_file (GtkPrintSettings *settings,
+ const gchar *file_name,
+ GError **error)
+{
+ GKeyFile *key_file;
+ gboolean retval = FALSE;
+ char *data = NULL;
+ gsize len;
+ GError *err = NULL;
+
+ g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
+ g_return_val_if_fail (file_name != NULL, FALSE);
+
+ key_file = g_key_file_new ();
+ gtk_print_settings_to_key_file (settings, key_file, NULL);
+
+ data = g_key_file_to_data (key_file, &len, &err);
+ if (!data)
+ goto out;
+
+ retval = g_file_set_contents (file_name, data, len, &err);
+
+out:
+ if (err != NULL)
+ g_propagate_error (error, err);
+
+ g_key_file_free (key_file);
+ g_free (data);
+
+ return retval;
+}
+
+typedef struct {
+ GKeyFile *key_file;
+ const gchar *group_name;
+} SettingsData;
+
+static void
+add_value_to_key_file (const gchar *key,
+ const gchar *value,
+ SettingsData *data)
+{
+ g_key_file_set_string (data->key_file, data->group_name, key, value);
+}
+
+/**
+ * gtk_print_settings_to_key_file:
+ * @settings: a #GtkPrintSettings
+ * @key_file: the #GKeyFile to save the print settings to
+ * @group_name: the group to add the settings to in @key_file, or
+ * %NULL to use the default "Print Settings"
+ *
+ * This function adds the print settings from @settings to @key_file.
+ *
+ * Since: 2.12
+ */
+void
+gtk_print_settings_to_key_file (GtkPrintSettings *settings,
+ GKeyFile *key_file,
+ const gchar *group_name)
+{
+ SettingsData data;
+
+ g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
+ g_return_if_fail (key_file != NULL);
+
+ if (!group_name)
+ group_name = KEYFILE_GROUP_NAME;
+
+ data.key_file = key_file;
+ data.group_name = group_name;
+
+ gtk_print_settings_foreach (settings,
+ (GtkPrintSettingsFunc) add_value_to_key_file,
+ &data);
+}