+ 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,
+ _gtk_print_convert_from_mm (width, GTK_UNIT_POINTS),
+ _gtk_print_convert_from_mm (height, GTK_UNIT_POINTS));
+ else if (name != NULL)
+ paper_size = gtk_paper_size_new_custom (name, display_name,
+ width, height, GTK_UNIT_MM);
+ else
+ {
+ g_set_error_literal (error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_INVALID_FILE,
+ _("Not a valid page setup file"));
+ 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;