gtk+ r21175 - in trunk: gtk modules/printbackends/cups



Author: mkasik
Date: Thu Aug 21 10:25:27 2008
New Revision: 21175
URL: http://svn.gnome.org/viewvc/gtk+?rev=21175&view=rev

Log:
2008-08-21  Marek Kasik  <mkasik redhat com>

	Bug 535158 â can't rearrange the order of multi pages per side

	* gtk/gtkprinter.c
	* gtk/gtkprinter.h
	* gtk/gtkprintunixdialog.c
	* gtk/gtkprintsettings.c
	* gtk/gtkprintsettings.h
	* gtk/gtkenums.h
	* modules/printbackends/cups/gtkprintbackendcups.c: Allow user to
	specify layout of pages per sheet in number-up mode


Modified:
   trunk/gtk/gtkenums.h
   trunk/gtk/gtkprinter.c
   trunk/gtk/gtkprinter.h
   trunk/gtk/gtkprintsettings.c
   trunk/gtk/gtkprintsettings.h
   trunk/gtk/gtkprintunixdialog.c
   trunk/modules/printbackends/cups/gtkprintbackendcups.c

Modified: trunk/gtk/gtkenums.h
==============================================================================
--- trunk/gtk/gtkenums.h	(original)
+++ trunk/gtk/gtkenums.h	Thu Aug 21 10:25:27 2008
@@ -489,6 +489,18 @@
 
 typedef enum
 {
+  GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM,
+  GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP,
+  GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM,
+  GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP,
+  GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT,
+  GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT,
+  GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT,
+  GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT
+} GtkNumberUpLayout;
+
+typedef enum
+{
   GTK_PAGE_ORIENTATION_PORTRAIT,
   GTK_PAGE_ORIENTATION_LANDSCAPE,
   GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT,

Modified: trunk/gtk/gtkprinter.c
==============================================================================
--- trunk/gtk/gtkprinter.c	(original)
+++ trunk/gtk/gtkprinter.c	Thu Aug 21 10:25:27 2008
@@ -1224,6 +1224,7 @@
         { GTK_PRINT_CAPABILITY_GENERATE_PS, "GTK_PRINT_CAPABILITY_GENERATE_PS", "generate-ps" },
         { GTK_PRINT_CAPABILITY_PREVIEW, "GTK_PRINT_CAPABILITY_PREVIEW", "preview" },
 	{ GTK_PRINT_CAPABILITY_NUMBER_UP, "GTK_PRINT_CAPABILITY_NUMBER_UP", "number-up"},
+        { GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT, "GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT", "number-up-layout" },
         { 0, NULL, NULL }
       };
 

Modified: trunk/gtk/gtkprinter.h
==============================================================================
--- trunk/gtk/gtkprinter.h	(original)
+++ trunk/gtk/gtkprinter.h	Thu Aug 21 10:25:27 2008
@@ -36,15 +36,16 @@
  */
 typedef enum
 {
-  GTK_PRINT_CAPABILITY_PAGE_SET     = 1 << 0,
-  GTK_PRINT_CAPABILITY_COPIES       = 1 << 1,
-  GTK_PRINT_CAPABILITY_COLLATE      = 1 << 2,
-  GTK_PRINT_CAPABILITY_REVERSE      = 1 << 3,
-  GTK_PRINT_CAPABILITY_SCALE        = 1 << 4,
-  GTK_PRINT_CAPABILITY_GENERATE_PDF = 1 << 5,
-  GTK_PRINT_CAPABILITY_GENERATE_PS  = 1 << 6,
-  GTK_PRINT_CAPABILITY_PREVIEW      = 1 << 7,
-  GTK_PRINT_CAPABILITY_NUMBER_UP    = 1 << 8
+  GTK_PRINT_CAPABILITY_PAGE_SET         = 1 << 0,
+  GTK_PRINT_CAPABILITY_COPIES           = 1 << 1,
+  GTK_PRINT_CAPABILITY_COLLATE          = 1 << 2,
+  GTK_PRINT_CAPABILITY_REVERSE          = 1 << 3,
+  GTK_PRINT_CAPABILITY_SCALE            = 1 << 4,
+  GTK_PRINT_CAPABILITY_GENERATE_PDF     = 1 << 5,
+  GTK_PRINT_CAPABILITY_GENERATE_PS      = 1 << 6,
+  GTK_PRINT_CAPABILITY_PREVIEW          = 1 << 7,
+  GTK_PRINT_CAPABILITY_NUMBER_UP        = 1 << 8,
+  GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT = 1 << 9
 } GtkPrintCapabilities;
 
 GType gtk_print_capabilities_get_type (void) G_GNUC_CONST;

Modified: trunk/gtk/gtkprintsettings.c
==============================================================================
--- trunk/gtk/gtkprintsettings.c	(original)
+++ trunk/gtk/gtkprintsettings.c	Thu Aug 21 10:25:27 2008
@@ -25,6 +25,7 @@
 #include "gtkprintsettings.h"
 #include "gtkprintutils.h"
 #include "gtkalias.h"
+#include <gtk/gtk.h>
 
 
 typedef struct _GtkPrintSettingsClass GtkPrintSettingsClass;
@@ -1039,6 +1040,108 @@
 }
 
 /**
+ * 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;
+  const gchar      *val;
+
+  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;
+
+  if (strcmp (val, "lrtb") == 0)
+    return GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
+
+  if (strcmp (val, "lrbt") == 0)
+    return GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP;
+
+  if (strcmp (val, "rltb") == 0)
+    return GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM;
+
+  if (strcmp (val, "rlbt") == 0)
+    return GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP;
+
+  if (strcmp (val, "tblr") == 0)
+    return GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT;
+
+  if (strcmp (val, "tbrl") == 0)
+    return GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT;
+
+  if (strcmp (val, "btlr") == 0)
+    return GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT;
+
+  if (strcmp (val, "btrl") == 0)
+    return GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT;
+
+  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)
+{
+  const gchar *str;
+
+  switch (number_up_layout)
+    {
+    default:
+    case GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM:
+      str = "lrtb";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP:
+      str = "lrbt";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM:
+      str = "rltb";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP:
+      str = "rlbt";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT:
+      str = "tblr";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT:
+      str = "tbrl";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT:
+      str = "btlr";
+      break;
+    case GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT:
+      str = "btrl";
+      break;
+    }
+  
+  gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, str);
+}
+
+/**
  * gtk_print_settings_get_n_copies:
  * @settings: a #GtkPrintSettings
  * 

Modified: trunk/gtk/gtkprintsettings.h
==============================================================================
--- trunk/gtk/gtkprintsettings.h	(original)
+++ trunk/gtk/gtkprintsettings.h	Thu Aug 21 10:25:27 2008
@@ -46,8 +46,8 @@
   gint end;
 };
 
-GType             gtk_print_settings_get_type (void) G_GNUC_CONST;
-GtkPrintSettings *gtk_print_settings_new      (void);
+GType             gtk_print_settings_get_type                (void) G_GNUC_CONST;
+GtkPrintSettings *gtk_print_settings_new                     (void);
 
 GtkPrintSettings *gtk_print_settings_copy                    (GtkPrintSettings     *other);
 
@@ -71,7 +71,7 @@
 							      const gchar          *group_name);
 gboolean          gtk_print_settings_has_key                 (GtkPrintSettings     *settings,
 							      const gchar          *key);
-G_CONST_RETURN gchar *gtk_print_settings_get                (GtkPrintSettings     *settings,
+G_CONST_RETURN gchar *gtk_print_settings_get                 (GtkPrintSettings     *settings,
 							      const gchar          *key);
 void              gtk_print_settings_set                     (GtkPrintSettings     *settings,
 							      const gchar          *key,
@@ -110,28 +110,29 @@
 							      const gchar          *key,
 							      gint                  value);
 
-#define GTK_PRINT_SETTINGS_PRINTER        "printer"
-#define GTK_PRINT_SETTINGS_ORIENTATION    "orientation"
-#define GTK_PRINT_SETTINGS_PAPER_FORMAT   "paper-format"
-#define GTK_PRINT_SETTINGS_PAPER_WIDTH    "paper-width"
-#define GTK_PRINT_SETTINGS_PAPER_HEIGHT   "paper-height"
-#define GTK_PRINT_SETTINGS_N_COPIES       "n-copies"
-#define GTK_PRINT_SETTINGS_DEFAULT_SOURCE "default-source"
-#define GTK_PRINT_SETTINGS_QUALITY        "quality"
-#define GTK_PRINT_SETTINGS_RESOLUTION     "resolution"
-#define GTK_PRINT_SETTINGS_USE_COLOR      "use-color"
-#define GTK_PRINT_SETTINGS_DUPLEX         "duplex"
-#define GTK_PRINT_SETTINGS_COLLATE        "collate"
-#define GTK_PRINT_SETTINGS_REVERSE        "reverse"
-#define GTK_PRINT_SETTINGS_MEDIA_TYPE     "media-type"
-#define GTK_PRINT_SETTINGS_DITHER         "dither"
-#define GTK_PRINT_SETTINGS_SCALE          "scale"
-#define GTK_PRINT_SETTINGS_PRINT_PAGES    "print-pages"
-#define GTK_PRINT_SETTINGS_PAGE_RANGES    "page-ranges"
-#define GTK_PRINT_SETTINGS_PAGE_SET       "page-set"
-#define GTK_PRINT_SETTINGS_FINISHINGS     "finishings"
-#define GTK_PRINT_SETTINGS_NUMBER_UP      "number-up"
-#define GTK_PRINT_SETTINGS_OUTPUT_BIN     "output-bin"
+#define GTK_PRINT_SETTINGS_PRINTER          "printer"
+#define GTK_PRINT_SETTINGS_ORIENTATION      "orientation"
+#define GTK_PRINT_SETTINGS_PAPER_FORMAT     "paper-format"
+#define GTK_PRINT_SETTINGS_PAPER_WIDTH      "paper-width"
+#define GTK_PRINT_SETTINGS_PAPER_HEIGHT     "paper-height"
+#define GTK_PRINT_SETTINGS_N_COPIES         "n-copies"
+#define GTK_PRINT_SETTINGS_DEFAULT_SOURCE   "default-source"
+#define GTK_PRINT_SETTINGS_QUALITY          "quality"
+#define GTK_PRINT_SETTINGS_RESOLUTION       "resolution"
+#define GTK_PRINT_SETTINGS_USE_COLOR        "use-color"
+#define GTK_PRINT_SETTINGS_DUPLEX           "duplex"
+#define GTK_PRINT_SETTINGS_COLLATE          "collate"
+#define GTK_PRINT_SETTINGS_REVERSE          "reverse"
+#define GTK_PRINT_SETTINGS_MEDIA_TYPE       "media-type"
+#define GTK_PRINT_SETTINGS_DITHER           "dither"
+#define GTK_PRINT_SETTINGS_SCALE            "scale"
+#define GTK_PRINT_SETTINGS_PRINT_PAGES      "print-pages"
+#define GTK_PRINT_SETTINGS_PAGE_RANGES      "page-ranges"
+#define GTK_PRINT_SETTINGS_PAGE_SET         "page-set"
+#define GTK_PRINT_SETTINGS_FINISHINGS       "finishings"
+#define GTK_PRINT_SETTINGS_NUMBER_UP        "number-up"
+#define GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT "number-up-layout"
+#define GTK_PRINT_SETTINGS_OUTPUT_BIN       "output-bin"
 
 #define GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT  "output-file-format"
 #define GTK_PRINT_SETTINGS_OUTPUT_URI          "output-uri"
@@ -141,78 +142,81 @@
 
 /* Helpers: */
 
-G_CONST_RETURN gchar *gtk_print_settings_get_printer     (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_printer        (GtkPrintSettings   *settings,
-							  const gchar        *printer);
-GtkPageOrientation gtk_print_settings_get_orientation    (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_orientation    (GtkPrintSettings   *settings,
-							  GtkPageOrientation  orientation);
-GtkPaperSize *     gtk_print_settings_get_paper_size     (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_paper_size     (GtkPrintSettings   *settings,
-							  GtkPaperSize       *paper_size);
-gdouble            gtk_print_settings_get_paper_width    (GtkPrintSettings   *settings,
-							  GtkUnit             unit);
-void               gtk_print_settings_set_paper_width    (GtkPrintSettings   *settings,
-							  gdouble             width,
-							  GtkUnit             unit);
-gdouble            gtk_print_settings_get_paper_height   (GtkPrintSettings   *settings,
-							  GtkUnit             unit);
-void               gtk_print_settings_set_paper_height   (GtkPrintSettings   *settings,
-							  gdouble             height,
-							  GtkUnit             unit);
-gboolean           gtk_print_settings_get_use_color      (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_use_color      (GtkPrintSettings   *settings,
-							  gboolean            use_color);
-gboolean           gtk_print_settings_get_collate        (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_collate        (GtkPrintSettings   *settings,
-							  gboolean            collate);
-gboolean           gtk_print_settings_get_reverse        (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_reverse        (GtkPrintSettings   *settings,
-							  gboolean            reverse);
-GtkPrintDuplex     gtk_print_settings_get_duplex         (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_duplex         (GtkPrintSettings   *settings,
-							  GtkPrintDuplex      duplex);
-GtkPrintQuality    gtk_print_settings_get_quality        (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_quality        (GtkPrintSettings   *settings,
-							  GtkPrintQuality     quality);
-gint               gtk_print_settings_get_n_copies       (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_n_copies       (GtkPrintSettings   *settings,
-							  gint                num_copies);
-gint               gtk_print_settings_get_number_up      (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_number_up      (GtkPrintSettings   *settings,
-							  gint                number_up);
-gint               gtk_print_settings_get_resolution     (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_resolution     (GtkPrintSettings   *settings,
-							  gint                resolution);
-gdouble            gtk_print_settings_get_scale          (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_scale          (GtkPrintSettings   *settings,
-							  gdouble             scale);
-GtkPrintPages      gtk_print_settings_get_print_pages    (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_print_pages    (GtkPrintSettings   *settings,
-							  GtkPrintPages       pages);
-GtkPageRange *     gtk_print_settings_get_page_ranges    (GtkPrintSettings   *settings,
-							  gint               *num_ranges);
-void               gtk_print_settings_set_page_ranges    (GtkPrintSettings   *settings,
-							  GtkPageRange       *page_ranges,
-							  gint                num_ranges);
-GtkPageSet         gtk_print_settings_get_page_set       (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_page_set       (GtkPrintSettings   *settings,
-							  GtkPageSet          page_set);
-G_CONST_RETURN gchar *gtk_print_settings_get_default_source (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_default_source (GtkPrintSettings   *settings,
-							  const gchar        *default_source);
-G_CONST_RETURN gchar *gtk_print_settings_get_media_type  (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_media_type     (GtkPrintSettings   *settings,
-							  const gchar        *media_type);
-G_CONST_RETURN gchar *gtk_print_settings_get_dither      (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_dither         (GtkPrintSettings   *settings,
-							  const gchar        *dither);
-G_CONST_RETURN gchar *gtk_print_settings_get_finishings  (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_finishings     (GtkPrintSettings   *settings,
-							  const gchar        *finishings);
-G_CONST_RETURN gchar *gtk_print_settings_get_output_bin  (GtkPrintSettings   *settings);
-void               gtk_print_settings_set_output_bin     (GtkPrintSettings   *settings,
-							  const gchar        *output_bin);
+G_CONST_RETURN gchar *gtk_print_settings_get_printer           (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_printer           (GtkPrintSettings   *settings,
+								const gchar        *printer);
+GtkPageOrientation    gtk_print_settings_get_orientation       (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_orientation       (GtkPrintSettings   *settings,
+								GtkPageOrientation  orientation);
+GtkPaperSize *        gtk_print_settings_get_paper_size        (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_paper_size        (GtkPrintSettings   *settings,
+								GtkPaperSize       *paper_size);
+gdouble               gtk_print_settings_get_paper_width       (GtkPrintSettings   *settings,
+								GtkUnit             unit);
+void                  gtk_print_settings_set_paper_width       (GtkPrintSettings   *settings,
+								gdouble             width,
+								GtkUnit             unit);
+gdouble               gtk_print_settings_get_paper_height      (GtkPrintSettings   *settings,
+								GtkUnit             unit);
+void                  gtk_print_settings_set_paper_height      (GtkPrintSettings   *settings,
+								gdouble             height,
+								GtkUnit             unit);
+gboolean              gtk_print_settings_get_use_color         (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_use_color         (GtkPrintSettings   *settings,
+								gboolean            use_color);
+gboolean              gtk_print_settings_get_collate           (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_collate           (GtkPrintSettings   *settings,
+								gboolean            collate);
+gboolean              gtk_print_settings_get_reverse           (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_reverse           (GtkPrintSettings   *settings,
+								gboolean            reverse);
+GtkPrintDuplex        gtk_print_settings_get_duplex            (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_duplex            (GtkPrintSettings   *settings,
+								GtkPrintDuplex      duplex);
+GtkPrintQuality       gtk_print_settings_get_quality           (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_quality           (GtkPrintSettings   *settings,
+								GtkPrintQuality     quality);
+gint                  gtk_print_settings_get_n_copies          (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_n_copies          (GtkPrintSettings   *settings,
+								gint                num_copies);
+gint                  gtk_print_settings_get_number_up         (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_number_up         (GtkPrintSettings   *settings,
+								gint                number_up);
+GtkNumberUpLayout     gtk_print_settings_get_number_up_layout  (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_number_up_layout  (GtkPrintSettings   *settings,
+								GtkNumberUpLayout   number_up_layout);
+gint                  gtk_print_settings_get_resolution        (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_resolution        (GtkPrintSettings   *settings,
+								gint                resolution);
+gdouble               gtk_print_settings_get_scale             (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_scale             (GtkPrintSettings   *settings,
+								gdouble             scale);
+GtkPrintPages         gtk_print_settings_get_print_pages       (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_print_pages       (GtkPrintSettings   *settings,
+								GtkPrintPages       pages);
+GtkPageRange *        gtk_print_settings_get_page_ranges       (GtkPrintSettings   *settings,
+								gint               *num_ranges);
+void                  gtk_print_settings_set_page_ranges       (GtkPrintSettings   *settings,
+								GtkPageRange       *page_ranges,
+								gint                num_ranges);
+GtkPageSet            gtk_print_settings_get_page_set          (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_page_set          (GtkPrintSettings   *settings,
+								GtkPageSet          page_set);
+G_CONST_RETURN gchar *gtk_print_settings_get_default_source    (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_default_source    (GtkPrintSettings   *settings,
+								const gchar        *default_source);
+G_CONST_RETURN gchar *gtk_print_settings_get_media_type        (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_media_type        (GtkPrintSettings   *settings,
+								const gchar        *media_type);
+G_CONST_RETURN gchar *gtk_print_settings_get_dither            (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_dither            (GtkPrintSettings   *settings,
+								const gchar        *dither);
+G_CONST_RETURN gchar *gtk_print_settings_get_finishings        (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_finishings        (GtkPrintSettings   *settings,
+								const gchar        *finishings);
+G_CONST_RETURN gchar *gtk_print_settings_get_output_bin        (GtkPrintSettings   *settings);
+void                  gtk_print_settings_set_output_bin        (GtkPrintSettings   *settings,
+								const gchar        *output_bin);
 
 G_END_DECLS
 

Modified: trunk/gtk/gtkprintunixdialog.c
==============================================================================
--- trunk/gtk/gtkprintunixdialog.c	(original)
+++ trunk/gtk/gtkprintunixdialog.c	Thu Aug 21 10:25:27 2008
@@ -168,6 +168,7 @@
   GtkPrinterOptionWidget *billing_info;
   GtkPrinterOptionWidget *cover_before;
   GtkPrinterOptionWidget *cover_after;
+  GtkPrinterOptionWidget *number_up_layout;
 
   GtkWidget *conflicts_widget;
 
@@ -189,6 +190,9 @@
    * is changed by the user it is cleared.
    */
   GtkPrintSettings *initial_settings;
+
+  GtkPrinterOption *number_up_layout_n_option;
+  GtkPrinterOption *number_up_layout_2_option;
   
   /* This is the initial printer set by set_settings. We look for it in the
    * added printers. We clear this whenever the user manually changes
@@ -415,6 +419,8 @@
   priv = dialog->priv = GTK_PRINT_UNIX_DIALOG_GET_PRIVATE (dialog); 
   priv->print_backends = NULL;
   priv->current_page = -1;
+  priv->number_up_layout_n_option = NULL;
+  priv->number_up_layout_2_option = NULL;
 
   priv->page_setup = gtk_page_setup_new ();
   priv->page_setup_set = FALSE;
@@ -509,6 +515,24 @@
       priv->options = NULL;
     }
  
+  if (priv->number_up_layout_2_option)
+    {
+      priv->number_up_layout_2_option->choices[0] = NULL;
+      priv->number_up_layout_2_option->choices[1] = NULL;
+      g_free (priv->number_up_layout_2_option->choices_display[0]);
+      g_free (priv->number_up_layout_2_option->choices_display[1]);
+      priv->number_up_layout_2_option->choices_display[0] = NULL;
+      priv->number_up_layout_2_option->choices_display[1] = NULL;
+      g_object_unref (priv->number_up_layout_2_option);
+      priv->number_up_layout_2_option = NULL;
+    }
+
+  if (priv->number_up_layout_n_option)
+    {
+      g_object_unref (priv->number_up_layout_n_option);
+      priv->number_up_layout_n_option = NULL;
+    }
+
  if (priv->page_setup)
     {
       g_object_unref (priv->page_setup);
@@ -1149,6 +1173,7 @@
     }
  
   setup_option (dialog, "gtk-n-up", priv->pages_per_sheet);
+  setup_option (dialog, "gtk-n-up-layout", priv->number_up_layout);
   setup_option (dialog, "gtk-duplex", priv->duplex);
   setup_option (dialog, "gtk-paper-type", priv->paper_type);
   setup_option (dialog, "gtk-paper-source", priv->paper_source);
@@ -2095,6 +2120,59 @@
   return num;
 }
 
+static GtkNumberUpLayout
+dialog_get_number_up_layout (GtkPrintUnixDialog *dialog)
+{
+  GtkPrintUnixDialogPrivate *priv = dialog->priv;
+  GtkPrintCapabilities       caps;
+  GtkNumberUpLayout          layout;
+  GtkTextDirection           text_direction;
+  const gchar               *val;
+
+  val = gtk_printer_option_widget_get_value (priv->number_up_layout);
+  text_direction = gtk_widget_get_default_direction ();
+
+  caps = priv->manual_capabilities | priv->printer_capabilities;
+
+  if (caps & GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT)
+    {
+      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;
+    }
+  else
+    layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
+
+  if (val == NULL)
+    return layout;
+
+  if (strcmp (val, "lrtb") == 0)
+    return GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM;
+
+  if (strcmp (val, "lrbt") == 0)
+    return GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP;
+
+  if (strcmp (val, "rltb") == 0)
+    return GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM;
+
+  if (strcmp (val, "rlbt") == 0)
+    return GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP;
+
+  if (strcmp (val, "tblr") == 0)
+    return GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT;
+
+  if (strcmp (val, "tbrl") == 0)
+    return GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT;
+
+  if (strcmp (val, "btlr") == 0)
+    return GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT;
+
+  if (strcmp (val, "btrl") == 0)
+    return GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT;
+
+  return layout;
+}
 
 static gboolean
 draw_page_cb (GtkWidget	         *widget,
@@ -2113,11 +2191,17 @@
   PangoFontDescription *font;
   gchar *text;
   GdkColor *color;
+  GtkNumberUpLayout number_up_layout;
+  gint start_x, end_x, start_y, end_y;
+  gint dx, dy;
+  gboolean horizontal;
   
   orientation = gtk_page_setup_get_orientation (priv->page_setup);
   landscape =
     (orientation == GTK_PAGE_ORIENTATION_LANDSCAPE) ||
     (orientation == GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE);
+
+  number_up_layout = dialog_get_number_up_layout (dialog);
   
   cr = gdk_cairo_create (widget->window);
   
@@ -2196,25 +2280,120 @@
   pango_layout_set_width (layout, page_width * PANGO_SCALE);
   pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
   
-  for (y = 0; y < pages_y; y++)
+  switch (number_up_layout)
     {
-      for (x = 0; x < pages_x; x++)
-	{
-	  text = g_strdup_printf ("%d", i++);
-	  pango_layout_set_text (layout, text, -1);
-	  g_free (text);
-	  pango_layout_get_size (layout, &layout_w, &layout_h);
-	  cairo_save (cr);
-	  cairo_translate (cr,
-			   x * page_width,
-			   y * page_height + (page_height - layout_h / 1024.0) / 2
-			   );
-	  
-	  pango_cairo_show_layout (cr, layout);
-	  cairo_restore (cr);
-	}
-    }
-
+      default:
+      case GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM:
+        start_x = 0;
+        end_x = pages_x - 1;
+        start_y = 0;
+        end_y = pages_y - 1;
+        dx = 1;
+        dy = 1;
+        horizontal = TRUE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP:
+        start_x = 0;
+        end_x = pages_x - 1;
+        start_y = pages_y - 1;
+        end_y = 0;
+        dx = 1;
+        dy = - 1;
+        horizontal = TRUE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM:
+        start_x = pages_x - 1;
+        end_x = 0;
+        start_y = 0;
+        end_y = pages_y - 1;
+        dx = - 1;
+        dy = 1;
+        horizontal = TRUE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP:
+        start_x = pages_x - 1;
+        end_x = 0;
+        start_y = pages_y - 1;
+        end_y = 0;
+        dx = - 1;
+        dy = - 1;
+        horizontal = TRUE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT:
+        start_x = 0;
+        end_x = pages_x - 1;
+        start_y = 0;
+        end_y = pages_y - 1;
+        dx = 1;
+        dy = 1;
+        horizontal = FALSE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT:
+        start_x = pages_x - 1;
+        end_x = 0;
+        start_y = 0;
+        end_y = pages_y - 1;
+        dx = - 1;
+        dy = 1;
+        horizontal = FALSE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT:
+        start_x = 0;
+        end_x = pages_x - 1;
+        start_y = pages_y - 1;
+        end_y = 0;
+        dx = 1;
+        dy = - 1;
+        horizontal = FALSE;
+        break;
+      case GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT:
+        start_x = pages_x - 1;
+        end_x = 0;
+        start_y = pages_y - 1;
+        end_y = 0;
+        dx = - 1;
+        dy = - 1;
+        horizontal = FALSE;
+        break;
+    }
+
+  if (horizontal)
+    for (y = start_y; y != end_y + dy; y += dy)
+      {
+        for (x = start_x; x != end_x + dx; x += dx)
+          {
+            text = g_strdup_printf ("%d", i++);
+            pango_layout_set_text (layout, text, -1);
+            g_free (text);
+            pango_layout_get_size (layout, &layout_w, &layout_h);
+            cairo_save (cr);
+            cairo_translate (cr,
+                             x * page_width,
+                             y * page_height + (page_height - layout_h / 1024.0) / 2);
+
+            pango_cairo_show_layout (cr, layout);
+            cairo_restore (cr);
+          }
+      }
+  else
+    for (x = start_x; x != end_x + dx; x += dx)
+      {
+        for (y = start_y; y != end_y + dy; y += dy)
+          {
+            text = g_strdup_printf ("%d", i++);
+            pango_layout_set_text (layout, text, -1);
+            g_free (text);
+            pango_layout_get_size (layout, &layout_w, &layout_h);
+            cairo_save (cr);
+            cairo_translate (cr,
+                             x * page_width,
+                             y * page_height + (page_height - layout_h / 1024.0) / 2);
+
+            pango_cairo_show_layout (cr, layout);
+            cairo_restore (cr);
+          }
+      }
+  
   g_object_unref (layout);
   cairo_destroy (cr);
 
@@ -2231,6 +2410,103 @@
 }
 
 static void
+update_number_up_layout (GtkPrintUnixDialog *dialog)
+{
+  GtkPrintUnixDialogPrivate *priv = dialog->priv;
+  GtkPrintCapabilities       caps;
+  GtkPrinterOptionSet       *set;
+  GtkNumberUpLayout          layout;
+  GtkPrinterOption          *option;
+  GtkPrinterOption          *old_option;
+
+  set = priv->options;
+
+  caps = priv->manual_capabilities | priv->printer_capabilities;
+
+  if (caps & GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT)
+    {
+      if (priv->number_up_layout_n_option == NULL)
+        {
+          priv->number_up_layout_n_option = gtk_printer_option_set_lookup (set, "gtk-n-up-layout");
+          g_object_ref (priv->number_up_layout_n_option);
+
+          priv->number_up_layout_2_option = gtk_printer_option_new ("gtk-n-up-layout",
+                                                                    _("Page Ordering"),
+                                                                    GTK_PRINTER_OPTION_TYPE_PICKONE);
+          gtk_printer_option_allocate_choices (priv->number_up_layout_2_option, 2);
+
+          priv->number_up_layout_2_option->choices[0] = priv->number_up_layout_n_option->choices[0];
+          priv->number_up_layout_2_option->choices[1] = priv->number_up_layout_n_option->choices[2];
+          priv->number_up_layout_2_option->choices_display[0] = g_strdup ( _("Left to right"));
+          priv->number_up_layout_2_option->choices_display[1] = g_strdup ( _("Right to left"));
+        }
+
+      layout = dialog_get_number_up_layout (dialog);
+
+      old_option = gtk_printer_option_set_lookup (set, "gtk-n-up-layout");
+      if (old_option != NULL)
+        gtk_printer_option_set_remove (set, old_option);
+
+      if (dialog_get_pages_per_sheet (dialog) != 1)
+        {
+          if (dialog_get_pages_per_sheet (dialog) == 2)
+            {
+              option = priv->number_up_layout_2_option;
+
+              if (layout == GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM ||
+                  layout == GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP ||
+                  layout == GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT ||
+                  layout == GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT)
+                gtk_printer_option_set (option, "lrtb");
+              else
+                gtk_printer_option_set (option, "rltb");
+            }
+          else
+            {
+              option = priv->number_up_layout_n_option;
+
+              switch (layout)
+                {
+                  case GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM:
+                    gtk_printer_option_set (option, "lrtb");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_BOTTOM_TO_TOP:
+                    gtk_printer_option_set (option, "lrbt");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_TOP_TO_BOTTOM:
+                    gtk_printer_option_set (option, "rltb");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_RIGHT_TO_LEFT_BOTTOM_TO_TOP:
+                    gtk_printer_option_set (option, "rlbt");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_LEFT_TO_RIGHT:
+                    gtk_printer_option_set (option, "tblr");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_TOP_TO_BOTTOM_RIGHT_TO_LEFT:
+                    gtk_printer_option_set (option, "tbrl");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_LEFT_TO_RIGHT:
+                    gtk_printer_option_set (option, "btlr");
+                    break;
+                  case GTK_NUMBER_UP_LAYOUT_BOTTOM_TO_TOP_RIGHT_TO_LEFT:
+                    gtk_printer_option_set (option, "btrl");
+                    break;
+               }
+            }
+
+          gtk_printer_option_set_add (set, option);
+        }
+    }
+
+  setup_option (dialog, "gtk-n-up-layout", priv->number_up_layout);
+
+  if (priv->number_up_layout != NULL)
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->number_up_layout),
+                              (caps & GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT) &&
+                              (dialog_get_pages_per_sheet (dialog) > 1));
+}
+
+static void
 create_page_setup_page (GtkPrintUnixDialog *dialog)
 {
   GtkPrintUnixDialogPrivate *priv = dialog->priv;
@@ -2253,7 +2529,7 @@
   gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0);
   gtk_widget_show (table);
 
-  label = gtk_label_new_with_mnemonic (_("Pages per _side:"));
+  label = gtk_label_new_with_mnemonic (_("T_wo-sided:"));
   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
   gtk_widget_show (label);
   gtk_table_attach (GTK_TABLE (table), label,
@@ -2261,15 +2537,14 @@
 		    0, 0);
 
   widget = gtk_printer_option_widget_new (NULL);
-  g_signal_connect_swapped (widget, "changed", G_CALLBACK (redraw_page_layout_preview), dialog);
-  priv->pages_per_sheet = GTK_PRINTER_OPTION_WIDGET (widget);
+  priv->duplex = GTK_PRINTER_OPTION_WIDGET (widget);
   gtk_widget_show (widget);
   gtk_table_attach (GTK_TABLE (table), widget,
 		    1, 2, 0, 1,  GTK_FILL, 0,
 		    0, 0);
   gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
 
-  label = gtk_label_new_with_mnemonic (_("T_wo-sided:"));
+  label = gtk_label_new_with_mnemonic (_("Pages per _side:"));
   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
   gtk_widget_show (label);
   gtk_table_attach (GTK_TABLE (table), label,
@@ -2277,25 +2552,44 @@
 		    0, 0);
 
   widget = gtk_printer_option_widget_new (NULL);
-  priv->duplex = GTK_PRINTER_OPTION_WIDGET (widget);
+  g_signal_connect_swapped (widget, "changed", G_CALLBACK (redraw_page_layout_preview), dialog);
+  g_signal_connect_swapped (widget, "changed", G_CALLBACK (update_number_up_layout), dialog);
+  priv->pages_per_sheet = GTK_PRINTER_OPTION_WIDGET (widget);
   gtk_widget_show (widget);
   gtk_table_attach (GTK_TABLE (table), widget,
 		    1, 2, 1, 2,  GTK_FILL, 0,
 		    0, 0);
   gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
 
-  label = gtk_label_new_with_mnemonic (_("_Only print:"));
+
+  label = gtk_label_new_with_mnemonic (_("Page or_dering:"));
   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
   gtk_widget_show (label);
   gtk_table_attach (GTK_TABLE (table), label,
 		    0, 1, 2, 3,  GTK_FILL, 0,
 		    0, 0);
 
+  widget = gtk_printer_option_widget_new (NULL);
+  g_signal_connect_swapped (widget, "changed", G_CALLBACK (redraw_page_layout_preview), dialog);
+  priv->number_up_layout = GTK_PRINTER_OPTION_WIDGET (widget);
+  gtk_widget_show (widget);
+  gtk_table_attach (GTK_TABLE (table), widget,
+		    1, 2, 2, 3,  GTK_FILL, 0,
+		    0, 0);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
+
+  label = gtk_label_new_with_mnemonic (_("_Only print:"));
+  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+  gtk_widget_show (label);
+  gtk_table_attach (GTK_TABLE (table), label,
+		    0, 1, 3, 4,  GTK_FILL, 0,
+		    0, 0);
+
   combo = gtk_combo_box_new_text ();
   priv->page_set_combo = combo;
   gtk_widget_show (combo);
   gtk_table_attach (GTK_TABLE (table), combo,
-		    1, 2, 2, 3,  GTK_FILL, 0,
+		    1, 2, 3, 4,  GTK_FILL, 0,
 		    0, 0);
   gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
   /* In enum order */
@@ -2308,13 +2602,13 @@
   gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
   gtk_widget_show (label);
   gtk_table_attach (GTK_TABLE (table), label,
-		    0, 1, 3, 4,  GTK_FILL, 0,
+		    0, 1, 4, 5,  GTK_FILL, 0,
 		    0, 0);
 
   hbox2 = gtk_hbox_new (FALSE, 6);
   gtk_widget_show (hbox2);
   gtk_table_attach (GTK_TABLE (table), hbox2,
-		    1, 2, 3, 4,  GTK_FILL, 0,
+		    1, 2, 4, 5,  GTK_FILL, 0,
 		    0, 0);
   
   spinbutton = gtk_spin_button_new_with_range (1.0, 1000.0, 1.0);

Modified: trunk/modules/printbackends/cups/gtkprintbackendcups.c
==============================================================================
--- trunk/modules/printbackends/cups/gtkprintbackendcups.c	(original)
+++ trunk/modules/printbackends/cups/gtkprintbackendcups.c	Thu Aug 21 10:25:27 2008
@@ -2684,17 +2684,23 @@
   char *n_up[] = {"1", "2", "4", "6", "9", "16" };
   char *prio[] = {"100", "80", "50", "30" };
   char *prio_display[] = {N_("Urgent"), N_("High"), N_("Medium"), N_("Low") };
+  char *n_up_layout[] = { "lrtb", "lrbt", "rltb", "rlbt", "tblr", "tbrl", "btlr", "btrl" };
+  char *n_up_layout_display[] = { N_("Left to right, top to bottom"), N_("Left to right, bottom to top"), 
+                                  N_("Right to left, top to bottom"), N_("Right to left, bottom to top"), 
+                                  N_("Top to bottom, left to right"), N_("Top to bottom, right to left"), 
+                                  N_("Bottom to top, left to right"), N_("Bottom to top, right to left") };
   char *name;
   int num_opts;
   cups_option_t *opts = NULL;
   GtkPrintBackendCups *backend;
+  GtkTextDirection text_direction;
 
 
   set = gtk_printer_option_set_new ();
 
   /* Cups specific, non-ppd related settings */
 
-  option = gtk_printer_option_new ("gtk-n-up", "Pages Per Sheet", GTK_PRINTER_OPTION_TYPE_PICKONE);
+  option = gtk_printer_option_new ("gtk-n-up", _("Pages Per Sheet"), GTK_PRINTER_OPTION_TYPE_PICKONE);
   gtk_printer_option_choices_from_array (option, G_N_ELEMENTS (n_up),
 					 n_up, n_up);
   gtk_printer_option_set (option, "1");
@@ -2702,10 +2708,30 @@
   gtk_printer_option_set_add (set, option);
   g_object_unref (option);
 
+  if (cups_printer_get_capabilities (printer) & GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT)
+    {
+      for (i = 0; i < G_N_ELEMENTS (n_up_layout_display); i++)
+        n_up_layout_display[i] = _(n_up_layout_display[i]);
+  
+      option = gtk_printer_option_new ("gtk-n-up-layout", _("Page Ordering"), GTK_PRINTER_OPTION_TYPE_PICKONE);
+      gtk_printer_option_choices_from_array (option, G_N_ELEMENTS (n_up_layout),
+                                             n_up_layout, n_up_layout_display);
+
+      text_direction = gtk_widget_get_default_direction ();
+      if (text_direction == GTK_TEXT_DIR_LTR)
+        gtk_printer_option_set (option, "lrtb");
+      else
+        gtk_printer_option_set (option, "rltb");
+
+      set_option_from_settings (option, settings);
+      gtk_printer_option_set_add (set, option);
+      g_object_unref (option);
+    }
+
   for (i = 0; i < G_N_ELEMENTS(prio_display); i++)
     prio_display[i] = _(prio_display[i]);
   
-  option = gtk_printer_option_new ("gtk-job-prio", "Job Priority", GTK_PRINTER_OPTION_TYPE_PICKONE);
+  option = gtk_printer_option_new ("gtk-job-prio", _("Job Priority"), GTK_PRINTER_OPTION_TYPE_PICKONE);
   gtk_printer_option_choices_from_array (option, G_N_ELEMENTS (prio),
 					 prio, prio_display);
   gtk_printer_option_set (option, "50");
@@ -2713,7 +2739,7 @@
   gtk_printer_option_set_add (set, option);
   g_object_unref (option);
 
-  option = gtk_printer_option_new ("gtk-billing-info", "Billing Info", GTK_PRINTER_OPTION_TYPE_STRING);
+  option = gtk_printer_option_new ("gtk-billing-info", _("Billing Info"), GTK_PRINTER_OPTION_TYPE_STRING);
   gtk_printer_option_set (option, "");
   set_option_from_settings (option, settings);
   gtk_printer_option_set_add (set, option);
@@ -2756,7 +2782,7 @@
       for (i = 0; i < num_of_covers; i++)
         cover_display_translated[i] = _(cover_display[i]);
   
-      option = gtk_printer_option_new ("gtk-cover-before", "Before", GTK_PRINTER_OPTION_TYPE_PICKONE);
+      option = gtk_printer_option_new ("gtk-cover-before", _("Before"), GTK_PRINTER_OPTION_TYPE_PICKONE);
       gtk_printer_option_choices_from_array (option, num_of_covers,
 					 cover, cover_display_translated);
 
@@ -2768,7 +2794,7 @@
       gtk_printer_option_set_add (set, option);
       g_object_unref (option);
 
-      option = gtk_printer_option_new ("gtk-cover-after", "After", GTK_PRINTER_OPTION_TYPE_PICKONE);
+      option = gtk_printer_option_new ("gtk-cover-after", _("After"), GTK_PRINTER_OPTION_TYPE_PICKONE);
       gtk_printer_option_choices_from_array (option, num_of_covers,
 					 cover, cover_display_translated);
       if (backend->default_cover_after != NULL)
@@ -2784,7 +2810,7 @@
       g_free (cover_display_translated);
     }
 
-  option = gtk_printer_option_new ("gtk-print-time", "Print at", GTK_PRINTER_OPTION_TYPE_PICKONE);
+  option = gtk_printer_option_new ("gtk-print-time", _("Print at"), GTK_PRINTER_OPTION_TYPE_PICKONE);
   gtk_printer_option_choices_from_array (option, G_N_ELEMENTS (print_at),
 					 print_at, print_at);
   gtk_printer_option_set (option, "now");
@@ -2792,7 +2818,7 @@
   gtk_printer_option_set_add (set, option);
   g_object_unref (option);
   
-  option = gtk_printer_option_new ("gtk-print-time-text", "Print at time", GTK_PRINTER_OPTION_TYPE_STRING);
+  option = gtk_printer_option_new ("gtk-print-time-text", _("Print at time"), GTK_PRINTER_OPTION_TYPE_STRING);
   gtk_printer_option_set (option, "");
   set_option_from_settings (option, settings);
   gtk_printer_option_set_add (set, option);
@@ -3149,6 +3175,11 @@
       map_settings_to_option (option, all_map, G_N_ELEMENTS (all_map),
 			      settings, GTK_PRINT_SETTINGS_NUMBER_UP, "number-up");
     }
+  else if (strcmp (option->name, "gtk-n-up-layout") == 0)
+    {
+      map_settings_to_option (option, all_map, G_N_ELEMENTS (all_map),
+			      settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, "number-up-layout");
+    }
   else if (strcmp (option->name, "gtk-billing-info") == 0)
     {
       cups_value = gtk_print_settings_get (settings, "cups-job-billing");
@@ -3229,6 +3260,9 @@
   else if (strcmp (option->name, "gtk-n-up") == 0)
     map_option_to_settings (value, all_map, G_N_ELEMENTS (all_map),
 			    settings, GTK_PRINT_SETTINGS_NUMBER_UP, "number-up");
+  else if (strcmp (option->name, "gtk-n-up-layout") == 0)
+    map_option_to_settings (value, all_map, G_N_ELEMENTS (all_map),
+			    settings, GTK_PRINT_SETTINGS_NUMBER_UP_LAYOUT, "number-up-layout");
   else if (strcmp (option->name, "gtk-billing-info") == 0 && strlen (value) > 0)
     gtk_print_settings_set (settings, "cups-job-billing", value);
   else if (strcmp (option->name, "gtk-job-prio") == 0)
@@ -3458,5 +3492,8 @@
     GTK_PRINT_CAPABILITY_COPIES |
     GTK_PRINT_CAPABILITY_COLLATE |
     GTK_PRINT_CAPABILITY_REVERSE |
+#if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 1 && CUPS_VERSION_PATCH >= 15) || (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR > 1) || CUPS_VERSION_MAJOR > 1
+    GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT |
+#endif
     GTK_PRINT_CAPABILITY_NUMBER_UP;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]