]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkprintsettings.c
stylecontext: Do invalidation on first resize container
[~andy/gtk] / gtk / gtkprintsettings.c
index 80c0c9913bcbd294298e2491bcc9b1f1a7798a03..b1e8476f03ee9be4da34ffa7d1235a070206dff8 100644 (file)
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "config.h"
+
 #include <string.h>
 #include <stdlib.h>
+
 #include <glib/gprintf.h>
+
 #include "gtkprintsettings.h"
-#include "gtkalias.h"
+#include "gtkprintutils.h"
+#include "gtktypebuiltins.h"
+#include "gtkwidget.h"
+
+
+/**
+ * SECTION:gtkprintsettings
+ * @Short_description: Stores print settings
+ * @Title: GtkPrintSettings
+ *
+ * A GtkPrintSettings object represents the settings of a print dialog in
+ * a system-independent way. The main use for this object is that once
+ * you've printed you can get a settings object that represents the settings
+ * the user chose, and the next time you print you can pass that object in so
+ * that the user doesn't have to re-set all his settings.
+ *
+ * Its also possible to enumerate the settings so that you can easily save
+ * the settings for the next time your app runs, or even store them in a
+ * document. The predefined keys try to use shared values as much as possible
+ * so that moving such a document between systems still works.
+ *
+ * <!-- TODO example of getting, storing and setting settings -->
+ *
+ * Printing support was added in GTK+ 2.10.
+ */
 
-#define MM_PER_INCH 25.4
-#define POINTS_PER_INCH 72
 
 typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass;
 
@@ -37,7 +60,7 @@ typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass;
 struct _GtkPrintSettings
 {
   GObject parent_instance;
-  
+
   GHashTable *hash;
 };
 
@@ -46,45 +69,9 @@ struct _GtkPrintSettingsClass
   GObjectClass parent_class;
 };
 
-G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
+#define KEYFILE_GROUP_NAME "Print Settings"
 
-static gdouble
-to_mm (gdouble len, GtkUnit unit)
-{
-  switch (unit)
-    {
-    case GTK_UNIT_MM:
-      return len;
-    case GTK_UNIT_INCH:
-      return len * MM_PER_INCH;
-    default:
-    case GTK_UNIT_PIXEL:
-      g_warning ("Unsupported unit");
-      /* Fall through */
-    case GTK_UNIT_POINTS:
-      return len * (MM_PER_INCH / POINTS_PER_INCH);
-      break;
-    }
-}
-
-static gdouble
-from_mm (gdouble len, GtkUnit unit)
-{
-  switch (unit)
-    {
-    case GTK_UNIT_MM:
-      return len;
-    case GTK_UNIT_INCH:
-      return len / MM_PER_INCH;
-    default:
-    case GTK_UNIT_PIXEL:
-      g_warning ("Unsupported unit");
-      /* Fall through */
-    case GTK_UNIT_POINTS:
-      return len / (MM_PER_INCH / POINTS_PER_INCH);
-      break;
-    }
-}
+G_DEFINE_TYPE (GtkPrintSettings, gtk_print_settings, G_TYPE_OBJECT)
 
 static void
 gtk_print_settings_finalize (GObject *object)
@@ -143,10 +130,10 @@ copy_hash_entry  (gpointer  key,
 /**
  * gtk_print_settings_copy:
  * @other: a #GtkPrintSettings
- * 
+ *
  * Copies a #GtkPrintSettings object.
- * 
- * Return value: a newly allocated copy of @other
+ *
+ * Return value: (transfer full): a newly allocated copy of @other
  *
  * Since: 2.10
  */
@@ -180,7 +167,7 @@ gtk_print_settings_copy (GtkPrintSettings *other)
  * 
  * Since: 2.10
  */
-G_CONST_RETURN gchar *        
+const gchar *
 gtk_print_settings_get (GtkPrintSettings *settings,
                        const gchar      *key)
 {
@@ -191,11 +178,11 @@ gtk_print_settings_get (GtkPrintSettings *settings,
  * gtk_print_settings_set:
  * @settings: a #GtkPrintSettings
  * @key: a key
- * @value: a string value, or %NULL
- * 
+ * @value: (allow-none): a string value, or %NULL
+ *
  * Associates @value with @key.
  *
- * Since: 2.10 
+ * Since: 2.10
  */
 void
 gtk_print_settings_set (GtkPrintSettings *settings,
@@ -268,7 +255,7 @@ gtk_print_settings_get_bool (GtkPrintSettings *settings,
   const gchar *val;
 
   val = gtk_print_settings_get (settings, key);
-  if (val != NULL && strcmp (val, "true") == 0)
+  if (g_strcmp0 (val, "true") == 0)
     return TRUE;
   
   return FALSE;
@@ -299,10 +286,10 @@ gtk_print_settings_get_bool_with_default (GtkPrintSettings *settings,
   const gchar *val;
 
   val = gtk_print_settings_get (settings, key);
-  if (val != NULL && strcmp (val, "true") == 0)
+  if (g_strcmp0 (val, "true") == 0)
     return TRUE;
 
-  if (val != NULL && strcmp (val, "false") == 0)
+  if (g_strcmp0 (val, "false") == 0)
     return FALSE;
   
   return default_val;
@@ -417,14 +404,14 @@ gtk_print_settings_get_length (GtkPrintSettings *settings,
                               GtkUnit           unit)
 {
   gdouble length = gtk_print_settings_get_double (settings, key);
-  return from_mm (length, unit);
+  return _gtk_print_convert_from_mm (length, unit);
 }
 
 /**
  * gtk_print_settings_set_length:
  * @settings: a #GtkPrintSettings
  * @key: a key
- * @length: a length
+ * @value: a length
  * @unit: the unit of @length
  * 
  * Associates a length in units of @unit with @key.
@@ -434,11 +421,11 @@ gtk_print_settings_get_length (GtkPrintSettings *settings,
 void
 gtk_print_settings_set_length (GtkPrintSettings *settings,
                               const gchar      *key,
-                              gdouble           length
+                              gdouble           value
                               GtkUnit           unit)
 {
   gtk_print_settings_set_double (settings, key,
-                                to_mm (length, unit));
+                                _gtk_print_convert_to_mm (value, unit));
 }
 
 /**
@@ -509,9 +496,9 @@ gtk_print_settings_set_int (GtkPrintSettings *settings,
 /**
  * gtk_print_settings_foreach:
  * @settings: a #GtkPrintSettings
- * @func: the function to call
+ * @func: (scope call): the function to call
  * @user_data: user data for @func
- * 
+ *
  * Calls @func for each key-value pair of @settings.
  *
  * Since: 2.10
@@ -535,7 +522,7 @@ gtk_print_settings_foreach (GtkPrintSettings    *settings,
  *
  * Since: 2.10
  */
-G_CONST_RETURN gchar *       
+const gchar *
 gtk_print_settings_get_printer (GtkPrintSettings *settings)
 {
   return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_PRINTER);
@@ -780,6 +767,16 @@ gtk_print_settings_set_paper_height (GtkPrintSettings *settings,
                                 height, unit);
 }
 
+/**
+ * gtk_print_settings_get_use_color:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
+ * 
+ * Return value: whether to use color
+ *
+ * Since: 2.10
+ */
 gboolean
 gtk_print_settings_get_use_color (GtkPrintSettings *settings)
 {
@@ -788,6 +785,15 @@ gtk_print_settings_get_use_color (GtkPrintSettings *settings)
                                                   TRUE);
 }
 
+/**
+ * gtk_print_settings_set_use_color:
+ * @settings: a #GtkPrintSettings
+ * @use_color: whether to use color
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_USE_COLOR.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_use_color (GtkPrintSettings *settings,
                                  gboolean          use_color)
@@ -797,13 +803,33 @@ gtk_print_settings_set_use_color (GtkPrintSettings *settings,
                               use_color);
 }
 
+/**
+ * gtk_print_settings_get_collate:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_COLLATE.
+ * 
+ * Return value: whether to collate the printed pages
+ *
+ * Since: 2.10
+ */
 gboolean
 gtk_print_settings_get_collate (GtkPrintSettings *settings)
 {
-  return gtk_print_settings_get_bool (settings, 
-                                     GTK_PRINT_SETTINGS_COLLATE);
+  return gtk_print_settings_get_bool_with_default (settings,
+                                                   GTK_PRINT_SETTINGS_COLLATE,
+                                                   TRUE);
 }
 
+/**
+ * gtk_print_settings_set_collate:
+ * @settings: a #GtkPrintSettings
+ * @collate: whether to collate the output
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_COLLATE.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_collate (GtkPrintSettings *settings,
                                gboolean          collate)
@@ -813,6 +839,16 @@ gtk_print_settings_set_collate (GtkPrintSettings *settings,
                               collate);
 }
 
+/**
+ * gtk_print_settings_get_reverse:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_REVERSE.
+ * 
+ * Return value: whether to reverse the order of the printed pages
+ *
+ * Since: 2.10
+ */
 gboolean
 gtk_print_settings_get_reverse (GtkPrintSettings *settings)
 {
@@ -820,6 +856,15 @@ gtk_print_settings_get_reverse (GtkPrintSettings *settings)
                                      GTK_PRINT_SETTINGS_REVERSE);
 }
 
+/**
+ * gtk_print_settings_set_reverse:
+ * @settings: a #GtkPrintSettings
+ * @reverse: whether to reverse the output
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_REVERSE.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_reverse (GtkPrintSettings *settings,
                                  gboolean        reverse)
@@ -829,6 +874,16 @@ gtk_print_settings_set_reverse (GtkPrintSettings *settings,
                               reverse);
 }
 
+/**
+ * gtk_print_settings_get_duplex:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_DUPLEX.
+ * 
+ * Return value: whether to print the output in duplex.
+ *
+ * Since: 2.10
+ */
 GtkPrintDuplex
 gtk_print_settings_get_duplex (GtkPrintSettings *settings)
 {
@@ -843,11 +898,20 @@ gtk_print_settings_get_duplex (GtkPrintSettings *settings)
     return GTK_PRINT_DUPLEX_HORIZONTAL;
   
   if (strcmp (val, "vertical") == 0)
-    return GTK_PRINT_DUPLEX_HORIZONTAL;
+    return GTK_PRINT_DUPLEX_VERTICAL;
   
   return GTK_PRINT_DUPLEX_SIMPLEX;
 }
 
+/**
+ * gtk_print_settings_set_duplex:
+ * @settings: a #GtkPrintSettings
+ * @duplex: a #GtkPrintDuplex value
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_DUPLEX.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_duplex (GtkPrintSettings *settings,
                               GtkPrintDuplex    duplex)
@@ -871,6 +935,16 @@ gtk_print_settings_set_duplex (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DUPLEX, str);
 }
 
+/**
+ * gtk_print_settings_get_quality:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_QUALITY.
+ * 
+ * Return value: the print quality
+ *
+ * Since: 2.10
+ */
 GtkPrintQuality
 gtk_print_settings_get_quality (GtkPrintSettings *settings)
 {
@@ -893,6 +967,15 @@ gtk_print_settings_get_quality (GtkPrintSettings *settings)
   return GTK_PRINT_QUALITY_NORMAL;
 }
 
+/**
+ * gtk_print_settings_set_quality:
+ * @settings: a #GtkPrintSettings
+ * @quality: a #GtkPrintQuality value
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_QUALITY.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_quality (GtkPrintSettings *settings,
                                GtkPrintQuality   quality)
@@ -919,6 +1002,16 @@ gtk_print_settings_set_quality (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_QUALITY, str);
 }
 
+/**
+ * gtk_print_settings_get_page_set:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
+ * 
+ * Return value: the set of pages to print
+ *
+ * Since: 2.10
+ */
 GtkPageSet
 gtk_print_settings_get_page_set (GtkPrintSettings *settings)
 {
@@ -938,6 +1031,15 @@ gtk_print_settings_get_page_set (GtkPrintSettings *settings)
   return GTK_PAGE_SET_ALL;
 }
 
+/**
+ * gtk_print_settings_set_page_set:
+ * @settings: a #GtkPrintSettings
+ * @page_set: a #GtkPageSet value
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_PAGE_SET.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_page_set (GtkPrintSettings *settings,
                                 GtkPageSet        page_set)
@@ -961,26 +1063,131 @@ gtk_print_settings_set_page_set (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PAGE_SET, str);
 }
 
+/**
+ * gtk_print_settings_get_number_up_layout:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
+ * 
+ * Return value: layout of page in number-up mode
+ *
+ * Since: 2.14
+ */
+GtkNumberUpLayout
+gtk_print_settings_get_number_up_layout (GtkPrintSettings *settings)
+{
+  GtkNumberUpLayout layout;
+  GtkTextDirection  text_direction;
+  GEnumClass       *enum_class;
+  GEnumValue       *enum_value;
+  const gchar      *val;
+
+  g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM);
+
+  val = gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT);
+  text_direction = gtk_widget_get_default_direction ();
+
+  if (text_direction == GTK_TEXT_DIR_LTR)
+    layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
+  else
+    layout = GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM;
+
+  if (val == NULL)
+    return layout;
+
+  enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
+  enum_value = g_enum_get_value_by_nick (enum_class, val);
+  if (enum_value)
+    layout = enum_value->value;
+  g_type_class_unref (enum_class);
+
+  return layout;
+}
+
+/**
+ * gtk_print_settings_set_number_up_layout:
+ * @settings: a #GtkPrintSettings
+ * @number_up_layout: a #GtkNumberUpLayout value
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT.
+ * 
+ * Since: 2.14
+ */
+void
+gtk_print_settings_set_number_up_layout (GtkPrintSettings  *settings,
+                                        GtkNumberUpLayout  number_up_layout)
+{
+  GEnumClass *enum_class;
+  GEnumValue *enum_value;
+
+  g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings));
+
+  enum_class = g_type_class_ref (GTK_TYPE_NUMBER_UP_LAYOUT);
+  enum_value = g_enum_get_value (enum_class, number_up_layout);
+  g_return_if_fail (enum_value != NULL);
+
+  gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, enum_value->value_nick);
+  g_type_class_unref (enum_class);
+}
+
+/**
+ * gtk_print_settings_get_n_copies:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_N_COPIES.
+ * 
+ * Return value: the number of copies to print
+ *
+ * Since: 2.10
+ */
 gint
-gtk_print_settings_get_num_copies (GtkPrintSettings *settings)
+gtk_print_settings_get_n_copies (GtkPrintSettings *settings)
 {
-  return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUM_COPIES, 1);
+  return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_N_COPIES, 1);
 }
 
+/**
+ * gtk_print_settings_set_n_copies:
+ * @settings: a #GtkPrintSettings
+ * @num_copies: the number of copies 
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_N_COPIES.
+ * 
+ * Since: 2.10
+ */
 void
-gtk_print_settings_set_num_copies (GtkPrintSettings *settings,
-                                  gint              num_copies)
+gtk_print_settings_set_n_copies (GtkPrintSettings *settings,
+                                gint              num_copies)
 {
-  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_NUM_COPIES,
+  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_N_COPIES,
                              num_copies);
 }
 
+/**
+ * gtk_print_settings_get_number_up:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
+ * 
+ * Return value: the number of pages per sheet
+ *
+ * Since: 2.10
+ */
 gint
 gtk_print_settings_get_number_up (GtkPrintSettings *settings)
 {
-  return gtk_print_settings_get_int (settings, GTK_PRINT_SETTINGS_NUMBER_UP);
+  return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_NUMBER_UP, 1);
 }
 
+/**
+ * gtk_print_settings_set_number_up:
+ * @settings: a #GtkPrintSettings
+ * @number_up: the number of pages per sheet 
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_NUMBER_UP.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_number_up (GtkPrintSettings *settings,
                                  gint              number_up)
@@ -989,20 +1196,145 @@ gtk_print_settings_set_number_up (GtkPrintSettings *settings,
                                number_up);
 }
 
+/**
+ * gtk_print_settings_get_resolution:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION.
+ * 
+ * Return value: the resolution in dpi
+ *
+ * Since: 2.10
+ */
 gint
 gtk_print_settings_get_resolution (GtkPrintSettings *settings)
 {
-  return gtk_print_settings_get_int (settings, GTK_PRINT_SETTINGS_RESOLUTION);
+  return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION, 300);
 }
 
+/**
+ * gtk_print_settings_set_resolution:
+ * @settings: a #GtkPrintSettings
+ * @resolution: the resolution in dpi
+ * 
+ * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
+ * %GTK_PRINT_SETTINGS_RESOLUTION_X and 
+ * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_resolution (GtkPrintSettings *settings,
                                   gint              resolution)
 {
   gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
                              resolution);
+  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
+                             resolution);
+  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
+                             resolution);
+}
+
+/**
+ * gtk_print_settings_get_resolution_x:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_X.
+ * 
+ * Return value: the horizontal resolution in dpi
+ *
+ * Since: 2.16
+ */
+gint
+gtk_print_settings_get_resolution_x (GtkPrintSettings *settings)
+{
+  return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_X, 300);
+}
+
+/**
+ * gtk_print_settings_get_resolution_y:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_RESOLUTION_Y.
+ * 
+ * Return value: the vertical resolution in dpi
+ *
+ * Since: 2.16
+ */
+gint
+gtk_print_settings_get_resolution_y (GtkPrintSettings *settings)
+{
+  return gtk_print_settings_get_int_with_default (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y, 300);
+}
+
+/**
+ * gtk_print_settings_set_resolution_xy:
+ * @settings: a #GtkPrintSettings
+ * @resolution_x: the horizontal resolution in dpi
+ * @resolution_y: the vertical resolution in dpi
+ * 
+ * Sets the values of %GTK_PRINT_SETTINGS_RESOLUTION,
+ * %GTK_PRINT_SETTINGS_RESOLUTION_X and
+ * %GTK_PRINT_SETTINGS_RESOLUTION_Y.
+ * 
+ * Since: 2.16
+ */
+void
+gtk_print_settings_set_resolution_xy (GtkPrintSettings *settings,
+                                     gint              resolution_x,
+                                     gint              resolution_y)
+{
+  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_X,
+                             resolution_x);
+  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION_Y,
+                             resolution_y);
+  gtk_print_settings_set_int (settings, GTK_PRINT_SETTINGS_RESOLUTION,
+                             resolution_x);
+}
+
+/**
+ * gtk_print_settings_get_printer_lpi:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
+ * 
+ * Return value: the resolution in lpi (lines per inch)
+ *
+ * Since: 2.16
+ */
+gdouble
+gtk_print_settings_get_printer_lpi (GtkPrintSettings *settings)
+{
+  return gtk_print_settings_get_double_with_default (settings, GTK_PRINT_SETTINGS_PRINTER_LPI, 150.0);
 }
 
+/**
+ * gtk_print_settings_set_printer_lpi:
+ * @settings: a #GtkPrintSettings
+ * @lpi: the resolution in lpi (lines per inch)
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_PRINTER_LPI.
+ * 
+ * Since: 2.16
+ */
+void
+gtk_print_settings_set_printer_lpi (GtkPrintSettings *settings,
+                                   gdouble           lpi)
+{
+  gtk_print_settings_set_double (settings, GTK_PRINT_SETTINGS_PRINTER_LPI,
+                                lpi);
+}
+
+/**
+ * gtk_print_settings_get_scale:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_SCALE.
+ * 
+ * Return value: the scale in percent
+ *
+ * Since: 2.10
+ */
 gdouble
 gtk_print_settings_get_scale (GtkPrintSettings *settings)
 {
@@ -1011,6 +1343,15 @@ gtk_print_settings_get_scale (GtkPrintSettings *settings)
                                                     100.0);
 }
 
+/**
+ * gtk_print_settings_set_scale:
+ * @settings: a #GtkPrintSettings
+ * @scale: the scale in percent
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_SCALE.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_scale (GtkPrintSettings *settings,
                              gdouble           scale)
@@ -1019,22 +1360,16 @@ gtk_print_settings_set_scale (GtkPrintSettings *settings,
                                 scale);
 }
 
-gboolean
-gtk_print_settings_get_print_to_file (GtkPrintSettings *settings)
-{
-  return gtk_print_settings_get_bool (settings, 
-                                     GTK_PRINT_SETTINGS_PRINT_TO_FILE);
-}
-
-void
-gtk_print_settings_set_print_to_file (GtkPrintSettings *settings,
-                                     gboolean          print_to_file)
-{
-  gtk_print_settings_set_bool (settings,
-                              GTK_PRINT_SETTINGS_PRINT_TO_FILE, 
-                              print_to_file);
-}
-
+/**
+ * gtk_print_settings_get_print_pages:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
+ * 
+ * Return value: which pages to print
+ *
+ * Since: 2.10
+ */
 GtkPrintPages
 gtk_print_settings_get_print_pages (GtkPrintSettings *settings)
 {
@@ -1045,6 +1380,9 @@ gtk_print_settings_get_print_pages (GtkPrintSettings *settings)
   if (val == NULL || (strcmp (val, "all") == 0))
     return GTK_PRINT_PAGES_ALL;
 
+  if (strcmp (val, "selection") == 0)
+    return GTK_PRINT_PAGES_SELECTION;
+
   if (strcmp (val, "current") == 0)
     return GTK_PRINT_PAGES_CURRENT;
   
@@ -1054,13 +1392,22 @@ gtk_print_settings_get_print_pages (GtkPrintSettings *settings)
   return GTK_PRINT_PAGES_ALL;
 }
 
+/**
+ * gtk_print_settings_set_print_pages:
+ * @settings: a #GtkPrintSettings
+ * @pages: a #GtkPrintPages value
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_PRINT_PAGES.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
-                                   GtkPrintPages     print_pages)
+                                   GtkPrintPages     pages)
 {
   const gchar *str;
 
-  switch (print_pages)
+  switch (pages)
     {
     default:
     case GTK_PRINT_PAGES_ALL:
@@ -1069,6 +1416,9 @@ gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
     case GTK_PRINT_PAGES_CURRENT:
       str = "current";
       break;
+    case GTK_PRINT_PAGES_SELECTION:
+      str = "selection";
+      break;
     case GTK_PRINT_PAGES_RANGES:
       str = "ranges";
       break;
@@ -1076,9 +1426,20 @@ gtk_print_settings_set_print_pages (GtkPrintSettings *settings,
   
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_PRINT_PAGES, str);
 }
-     
-
 
+/**
+ * gtk_print_settings_get_page_ranges:
+ * @settings: a #GtkPrintSettings
+ * @num_ranges: (out): return location for the length of the returned array
+ *
+ * Gets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
+ *
+ * Return value: (array length=num_ranges) (transfer full): an array
+ *     of #GtkPageRange<!-- -->s.  Use g_free() to free the array when
+ *     it is no longer needed.
+ *
+ * Since: 2.10
+ */
 GtkPageRange *
 gtk_print_settings_get_page_ranges (GtkPrintSettings *settings,
                                    gint             *num_ranges)
@@ -1117,18 +1478,28 @@ gtk_print_settings_get_page_ranges (GtkPrintSettings *settings,
        {
          str++;
          end = (gint)strtol (str, NULL, 10);
-         if (end < start)
-           end = start;
        }
 
       ranges[i].start = start;
       ranges[i].end = end;
     }
 
+  g_strfreev (range_strs);
+
   *num_ranges = n;
   return ranges;
 }
 
+/**
+ * gtk_print_settings_set_page_ranges:
+ * @settings: a #GtkPrintSettings
+ * @page_ranges: (array length=num_ranges): an array of #GtkPageRange<!-- -->s
+ * @num_ranges: the length of @page_ranges
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_PAGE_RANGES.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_page_ranges  (GtkPrintSettings *settings,
                                     GtkPageRange     *page_ranges,
@@ -1158,12 +1529,31 @@ gtk_print_settings_set_page_ranges  (GtkPrintSettings *settings,
   g_string_free (s, TRUE);
 }
 
-G_CONST_RETURN gchar *
+/**
+ * gtk_print_settings_get_default_source:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
+ * 
+ * Return value: the default source
+ *
+ * Since: 2.10
+ */
+const gchar *
 gtk_print_settings_get_default_source (GtkPrintSettings *settings)
 {
   return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE);
 }
 
+/**
+ * gtk_print_settings_set_default_source:
+ * @settings: a #GtkPrintSettings
+ * @default_source: the default source
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_DEFAULT_SOURCE.
+ * 
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_default_source (GtkPrintSettings *settings,
                                       const gchar      *default_source)
@@ -1171,13 +1561,37 @@ gtk_print_settings_set_default_source (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DEFAULT_SOURCE, default_source);
 }
      
-G_CONST_RETURN gchar *
+/**
+ * gtk_print_settings_get_media_type:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
+ *
+ * The set of media types is defined in PWG 5101.1-2002 PWG.
+ * <!-- FIXME link here -->
+ * 
+ * Return value: the media type
+ *
+ * Since: 2.10
+ */
+const gchar *
 gtk_print_settings_get_media_type (GtkPrintSettings *settings)
 {
   return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE);
 }
 
-/* The set of media types is defined in PWG 5101.1-2002 PWG */
+/**
+ * gtk_print_settings_set_media_type:
+ * @settings: a #GtkPrintSettings
+ * @media_type: the media type
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_MEDIA_TYPE.
+ * 
+ * The set of media types is defined in PWG 5101.1-2002 PWG.
+ * <!-- FIXME link here -->
+ *
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_media_type (GtkPrintSettings *settings,
                                   const gchar      *media_type)
@@ -1185,13 +1599,31 @@ gtk_print_settings_set_media_type (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_MEDIA_TYPE, media_type);
 }
 
-
-G_CONST_RETURN gchar *
+/**
+ * gtk_print_settings_get_dither:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_DITHER.
+ * 
+ * Return value: the dithering that is used
+ *
+ * Since: 2.10
+ */
+const gchar *
 gtk_print_settings_get_dither (GtkPrintSettings *settings)
 {
   return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_DITHER);
 }
 
+/**
+ * gtk_print_settings_set_dither:
+ * @settings: a #GtkPrintSettings
+ * @dither: the dithering that is used
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_DITHER.
+ *
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_dither (GtkPrintSettings *settings,
                               const gchar      *dither)
@@ -1199,12 +1631,31 @@ gtk_print_settings_set_dither (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_DITHER, dither);
 }
      
+/**
+ * gtk_print_settings_get_finishings:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
+ * 
+ * Return value: the finishings
+ *
+ * Since: 2.10
+ */
 const gchar *
 gtk_print_settings_get_finishings (GtkPrintSettings *settings)
 {
   return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_FINISHINGS);
 }
 
+/**
+ * gtk_print_settings_set_finishings:
+ * @settings: a #GtkPrintSettings
+ * @finishings: the finishings
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_FINISHINGS.
+ *
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_finishings (GtkPrintSettings *settings,
                                   const gchar      *finishings)
@@ -1212,19 +1663,286 @@ gtk_print_settings_set_finishings (GtkPrintSettings *settings,
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_FINISHINGS, finishings);
 }
      
-G_CONST_RETURN gchar *
+/**
+ * gtk_print_settings_get_output_bin:
+ * @settings: a #GtkPrintSettings
+ * 
+ * Gets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
+ * 
+ * Return value: the output bin
+ *
+ * Since: 2.10
+ */
+const gchar *
 gtk_print_settings_get_output_bin (GtkPrintSettings *settings)
 {
   return gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN);
 }
 
+/**
+ * gtk_print_settings_set_output_bin:
+ * @settings: a #GtkPrintSettings
+ * @output_bin: the output bin
+ * 
+ * Sets the value of %GTK_PRINT_SETTINGS_OUTPUT_BIN.
+ *
+ * Since: 2.10
+ */
 void
 gtk_print_settings_set_output_bin (GtkPrintSettings *settings,
                                   const gchar      *output_bin)
 {
   gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BIN, output_bin);
 }
+
+/**
+ * gtk_print_settings_load_file:
+ * @settings: a #GtkPrintSettings
+ * @file_name: (type filename): the filename to read the settings from
+ * @error: (allow-none): return location for errors, or %NULL
+ *
+ * Reads the print settings from @file_name. If the file could not be loaded
+ * then error is set to either a #GFileError or #GKeyFileError.
+ * See gtk_print_settings_to_file().
+ *
+ * Return value: %TRUE on success
+ *
+ * Since: 2.14
+ */
+gboolean
+gtk_print_settings_load_file (GtkPrintSettings *settings,
+                              const gchar      *file_name,
+                              GError          **error)
+{
+  gboolean retval = FALSE;
+  GKeyFile *key_file;
+
+  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 ();
+
+  if (g_key_file_load_from_file (key_file, file_name, 0, error) &&
+      gtk_print_settings_load_key_file (settings, key_file, NULL, error))
+    retval = TRUE;
+
+  g_key_file_free (key_file);
+
+  return retval;
+}
+
+/**
+ * gtk_print_settings_new_from_file:
+ * @file_name: (type filename): the filename to read the settings from
+ * @error: (allow-none): return location for errors, or %NULL
+ * 
+ * Reads the print settings from @file_name. 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.  See gtk_print_settings_to_file().
+ *
+ * Return value: the restored #GtkPrintSettings
+ * 
+ * Since: 2.12
+ */
+GtkPrintSettings *
+gtk_print_settings_new_from_file (const gchar  *file_name,
+                                 GError      **error)
+{
+  GtkPrintSettings *settings = gtk_print_settings_new ();
+
+  if (!gtk_print_settings_load_file (settings, file_name, error))
+    {
+      g_object_unref (settings);
+      settings = NULL;
+    }
+
+  return settings;
+}
+
+/**
+ * gtk_print_settings_load_key_file:
+ * @settings: a #GtkPrintSettings
+ * @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. If the
+ * file could not be loaded then error is set to either a #GFileError or
+ * #GKeyFileError.
+ *
+ * Return value: %TRUE on success
+ * 
+ * Since: 2.14
+ */
+gboolean
+gtk_print_settings_load_key_file (GtkPrintSettings *settings,
+                                 GKeyFile         *key_file,
+                                 const gchar      *group_name,
+                                 GError          **error)
+{
+  gchar **keys;
+  gsize n_keys, i;
+  GError *err = NULL;
+
+  g_return_val_if_fail (GTK_IS_PRINT_SETTINGS (settings), FALSE);
+  g_return_val_if_fail (key_file != NULL, FALSE);
+
+  if (!group_name)
+    group_name = KEYFILE_GROUP_NAME;
+
+  keys = g_key_file_get_keys (key_file,
+                             group_name,
+                             &n_keys,
+                             &err);
+  if (err != NULL)
+    {
+      g_propagate_error (error, err);
+      return FALSE;
+    }
    
+  for (i = 0 ; i < n_keys; ++i)
+    {
+      gchar *value;
+
+      value = g_key_file_get_string (key_file,
+                                    group_name,
+                                    keys[i],
+                                    NULL);
+      if (!value)
+        continue;
 
-#define __GTK_PRINT_SETTINGS_C__
-#include "gtkaliasdef.c"
+      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);
+}