diff options
author | Matthias Clasen <mclasen@redhat.com> | 2007-04-29 06:23:58 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-04-29 06:23:58 +0000 |
commit | 3c5bd522b36383afa704d39bf12963683a4663ea (patch) | |
tree | 0c3222b44bb43e6224c94e932620f740d990de85 /gtk/gtkpapersize.c | |
parent | ea3667c49ca6ee6c692bc6fbf00d8769c80deca3 (diff) | |
download | gtk+-3c5bd522b36383afa704d39bf12963683a4663ea.tar.gz |
Add a new error code
2007-04-29 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprintoperation.h: Add a new error code
* gtk/gtk.symbols:
* gtk/gtkpagesetup.[hc]:
* gtk/gtkpapersize.[hc]:
* gtk/gtkprintsettings.[hc]: Add functions to serialize
and deserialize page setups and print settings to files
and key files. (#344515, Christian Persch)
* gtk/gtkpagesetupunixdialog.c: Adapt to the new functions.
* tests/print-editor.c: Use the new functions to persist
page setup and print settings.
svn path=/trunk/; revision=17697
Diffstat (limited to 'gtk/gtkpapersize.c')
-rw-r--r-- | gtk/gtkpapersize.c | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/gtk/gtkpapersize.c b/gtk/gtkpapersize.c index be21faf68e..c5613275ab 100644 --- a/gtk/gtkpapersize.c +++ b/gtk/gtkpapersize.c @@ -28,6 +28,7 @@ #include "gtkpapersize.h" #include "gtkprintutils.h" +#include "gtkprintoperation.h" /* for GtkPrintError */ #include "gtkintl.h" #include "gtkalias.h" @@ -759,6 +760,135 @@ gtk_paper_size_get_default_right_margin (GtkPaperSize *size, return _gtk_print_convert_from_mm (margin, unit); } +/** + * gtk_paper_size_new_from_key_file: + * @key_file: the #GKeyFile to retrieve the papersize from + * @group_name: the name ofthe group in the key file to read, + * or %NULL to read the first group + * @error: return location for an error, or %NULL + * + * Reads a paper size from the group @group_name in the key file + * @key_file. Returns a new #GtkPaperSize object with the restored + * paper size, or %NULL if an error occurred. + * + * Since: 2.12 + */ +GtkPaperSize * +gtk_paper_size_new_from_key_file (GKeyFile *key_file, + const gchar *group_name, + GError **error) +{ + GtkPaperSize *paper_size = NULL; + char *name = NULL, *ppd_name = NULL, *display_name = NULL, *freeme = NULL; + gdouble width, height; + gboolean retval = TRUE; + GError *err = NULL; + + g_return_val_if_fail (key_file != NULL, NULL); + + if (!group_name) + group_name = freeme = g_key_file_get_start_group (key_file); + if (!group_name || !g_key_file_has_group (key_file, group_name)) + { + g_set_error (error, + GTK_PRINT_ERROR, + GTK_PRINT_ERROR_INVALID_FILE, + _("Not a valid page setup file")); + retval = FALSE; + goto out; + } + +#define GET_DOUBLE(kf, group, name, v) \ + v = g_key_file_get_double (kf, group, name, &err); \ + if (err != NULL) \ + {\ + g_propagate_error (error, err);\ + retval = FALSE;\ + goto out;\ + } + + GET_DOUBLE (key_file, group_name, "Width", width); + GET_DOUBLE (key_file, group_name, "Height", height); + +#undef GET_DOUBLE + + name = g_key_file_get_string (key_file, group_name, + "Name", NULL); + ppd_name = g_key_file_get_string (key_file, group_name, + "PPDName", NULL); + display_name = g_key_file_get_string (key_file, group_name, + "DisplayName", NULL); + /* Fallback for old ~/.gtk-custom-paper entries */ + if (!display_name) + display_name = g_strdup (name); + + if (ppd_name != NULL) + paper_size = gtk_paper_size_new_from_ppd (ppd_name, display_name, + width, height); + else if (name != NULL) + paper_size = gtk_paper_size_new_custom (name, display_name, + width, height, GTK_UNIT_MM); + else + { + g_set_error (error, + GTK_PRINT_ERROR, + GTK_PRINT_ERROR_INVALID_FILE, + _("Not a valid page setup file")); + retval = FALSE; + goto out; + } + g_assert (paper_size != NULL); + +out: + g_free (ppd_name); + g_free (name); + g_free (display_name); + g_free (freeme); + + return paper_size; +} + +/** + * gtk_paper_size_to_key_file: + * @paper_size: a #GtkPaperSize + * @key_file: the #GKeyFile to save the paper size to + * @group_name: the group to add the settings to in @key_file + * + * This function adds the paper size from @paper_size to @key_file. + * + * Since: 2.12 + */ +void +gtk_paper_size_to_key_file (GtkPaperSize *paper_size, + GKeyFile *key_file, + const gchar *group_name) +{ + const char *name, *ppd_name, *display_name; + + g_return_if_fail (paper_size != NULL); + g_return_if_fail (key_file != NULL); + + name = gtk_paper_size_get_name (paper_size); + display_name = gtk_paper_size_get_display_name (paper_size); + ppd_name = gtk_paper_size_get_ppd_name (paper_size); + + if (ppd_name != NULL) + g_key_file_set_string (key_file, group_name, + "PPDName", ppd_name); + else + g_key_file_set_string (key_file, group_name, + "Name", name); + + if (display_name) + g_key_file_set_string (key_file, group_name, + "DisplayName", display_name); + + g_key_file_set_double (key_file, group_name, + "Width", gtk_paper_size_get_width (paper_size, GTK_UNIT_MM)); + g_key_file_set_double (key_file, group_name, + "Height", gtk_paper_size_get_height (paper_size, GTK_UNIT_MM)); +} + #define __GTK_PAPER_SIZE_C__ #include "gtkaliasdef.c" |