rpms/gtk2/F-9 printer-paper-size.patch, NONE, 1.1 gtk2.spec, 1.292, 1.293

Marek Kašík (mkasik) fedora-extras-commits at redhat.com
Fri Jun 13 13:51:24 UTC 2008


Author: mkasik

Update of /cvs/pkgs/rpms/gtk2/F-9
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv3016

Modified Files:
	gtk2.spec 
Added Files:
	printer-paper-size.patch 
Log Message:
* Fri Jun 13 2008 - Marek Kasik <mkasik at redhat.com> - 2.12.10-4
- Sets default paper size according to default paper size of
  selected printer and locale.
- Resolves: #204621


printer-paper-size.patch:

--- NEW FILE printer-paper-size.patch ---
--- modules/printbackends/file/gtkprintbackendfile.c	2008-06-03 23:18:39.000000000 +0200
+++ modules/printbackends/file/gtkprintbackendfile.c	2008-06-13 13:02:29.000000000 +0200
@@ -104,6 +104,7 @@ static cairo_surface_t *    file_printer
 								    GIOChannel              *cache_io);
 
 static GList *              file_printer_list_papers               (GtkPrinter              *printer);
+static GtkPageSetup *       file_printer_get_default_page_size     (GtkPrinter              *printer);
 
 static void
 gtk_print_backend_file_register_type (GTypeModule *module)
@@ -182,6 +183,7 @@ gtk_print_backend_file_class_init (GtkPr
   backend_class->printer_get_settings_from_options = file_printer_get_settings_from_options;
   backend_class->printer_prepare_for_print = file_printer_prepare_for_print;
   backend_class->printer_list_papers = file_printer_list_papers;
+  backend_class->printer_get_default_page_size = file_printer_get_default_page_size;
 }
 
 /* return N_FORMATS if no explicit format in the settings */
@@ -697,3 +699,11 @@ file_printer_list_papers (GtkPrinter *pr
 
   return g_list_reverse (result);
 }
+
+static GtkPageSetup *
+file_printer_get_default_page_size (GtkPrinter *printer)
+{
+  GtkPageSetup *result = NULL;
+
+  return result;
+}
--- modules/printbackends/cups/gtkprintbackendcups.c	2008-06-13 12:57:42.000000000 +0200
+++ modules/printbackends/cups/gtkprintbackendcups.c	2008-06-13 13:10:35.000000000 +0200
@@ -136,6 +136,7 @@ static void                 cups_printer
 								    GtkPrintSettings                  *settings,
 								    GtkPageSetup                      *page_setup);
 static GList *              cups_printer_list_papers               (GtkPrinter                        *printer);
+static GtkPageSetup *       cups_printer_get_default_page_size     (GtkPrinter                        *printer);
 static void                 cups_printer_request_details           (GtkPrinter                        *printer);
 static void                 cups_request_default_printer           (GtkPrintBackendCups               *print_backend);
 static void                 cups_request_ppd                       (GtkPrinter                        *printer);
@@ -255,6 +256,7 @@ gtk_print_backend_cups_class_init (GtkPr
   backend_class->printer_get_settings_from_options = cups_printer_get_settings_from_options;
   backend_class->printer_prepare_for_print = cups_printer_prepare_for_print;
   backend_class->printer_list_papers = cups_printer_list_papers;
+  backend_class->printer_get_default_page_size = cups_printer_get_default_page_size;
   backend_class->printer_get_hard_margins = cups_printer_get_hard_margins;
   backend_class->printer_get_capabilities = cups_printer_get_capabilities;
 }
@@ -1456,6 +1458,8 @@ cups_request_ppd_cb (GtkPrintBackendCups
   /* let ppdOpenFd take over the ownership of the open file */
   g_io_channel_seek_position (data->ppd_io, 0, G_SEEK_SET, NULL);
   data->printer->ppd_file = ppdOpenFd (dup (g_io_channel_unix_get_fd (data->ppd_io)));
+
+  ppdMarkDefaults (data->printer->ppd_file);
   
   gtk_printer_set_has_details (printer, TRUE);
   g_signal_emit_by_name (printer, "details-acquired", TRUE);
@@ -3140,16 +3144,52 @@ cups_printer_prepare_for_print (GtkPrint
   print_job->rotate_to_orientation = TRUE;
 }
 
+static GtkPageSetup *
+create_page_setup (ppd_file_t *ppd_file,
+		   ppd_size_t *size)
+{
+   char *display_name;
+   GtkPageSetup *page_setup;
+   GtkPaperSize *paper_size;
+   ppd_option_t *option;
+   ppd_choice_t *choice;
+
+  display_name = NULL;
+  option = ppdFindOption (ppd_file, "PageSize");
+  if (option)
+    {
+      choice = ppdFindChoice (option, size->name);
+      if (choice)
+	display_name = ppd_text_to_utf8 (ppd_file, choice->text);
+    }
+
+  if (display_name == NULL)
+    display_name = g_strdup (size->name);
+  
+  page_setup = gtk_page_setup_new ();
+  paper_size = gtk_paper_size_new_from_ppd (size->name,
+					    display_name,
+					    size->width,
+					    size->length);
+  gtk_page_setup_set_paper_size (page_setup, paper_size);
+  gtk_paper_size_free (paper_size);
+  
+  gtk_page_setup_set_top_margin (page_setup, size->length - size->top, GTK_UNIT_POINTS);
+  gtk_page_setup_set_bottom_margin (page_setup, size->bottom, GTK_UNIT_POINTS);
+  gtk_page_setup_set_left_margin (page_setup, size->left, GTK_UNIT_POINTS);
+  gtk_page_setup_set_right_margin (page_setup, size->width - size->right, GTK_UNIT_POINTS);
+  
+  g_free (display_name);
+
+  return page_setup;
+}
+
 static GList *
 cups_printer_list_papers (GtkPrinter *printer)
 {
   ppd_file_t *ppd_file;
   ppd_size_t *size;
-  char *display_name;
   GtkPageSetup *page_setup;
-  GtkPaperSize *paper_size;
-  ppd_option_t *option;
-  ppd_choice_t *choice;
   GList *l;
   int i;
 
@@ -3163,31 +3203,7 @@ cups_printer_list_papers (GtkPrinter *pr
     {
       size = &ppd_file->sizes[i];
 
-      display_name = NULL;
-      option = ppdFindOption (ppd_file, "PageSize");
-      if (option)
-	{
-	  choice = ppdFindChoice (option, size->name);
-	  if (choice)
-	    display_name = ppd_text_to_utf8 (ppd_file, choice->text);
-	}
-      if (display_name == NULL)
-	display_name = g_strdup (size->name);
-
-      page_setup = gtk_page_setup_new ();
-      paper_size = gtk_paper_size_new_from_ppd (size->name,
-						display_name,
-						size->width,
-						size->length);
-      gtk_page_setup_set_paper_size (page_setup, paper_size);
-      gtk_paper_size_free (paper_size);
-
-      gtk_page_setup_set_top_margin (page_setup, size->length - size->top, GTK_UNIT_POINTS);
-      gtk_page_setup_set_bottom_margin (page_setup, size->bottom, GTK_UNIT_POINTS);
-      gtk_page_setup_set_left_margin (page_setup, size->left, GTK_UNIT_POINTS);
-      gtk_page_setup_set_right_margin (page_setup, size->width - size->right, GTK_UNIT_POINTS);
-	
-      g_free (display_name);
+      page_setup = create_page_setup (ppd_file, size);
 
       l = g_list_prepend (l, page_setup);
     }
@@ -3195,6 +3211,24 @@ cups_printer_list_papers (GtkPrinter *pr
   return g_list_reverse (l);
 }
 
+static GtkPageSetup *
+cups_printer_get_default_page_size (GtkPrinter *printer)
+{
+  ppd_file_t *ppd_file;
+  ppd_size_t *size;
+  ppd_option_t *option;
+
+
+  ppd_file = gtk_printer_cups_get_ppd (GTK_PRINTER_CUPS (printer));
+  if (ppd_file == NULL)
+    return NULL;
+
+  option = ppdFindOption (ppd_file, "PageSize");
+  size = ppdPageSize (ppd_file, option->defchoice); 
+
+  return create_page_setup (ppd_file, size);
+}
+
 static void
 cups_printer_get_hard_margins (GtkPrinter *printer,
 			       gdouble    *top,
--- gtk/gtkprintunixdialog.c	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkprintunixdialog.c	2008-06-13 13:27:35.000000000 +0200
@@ -134,6 +134,7 @@ struct GtkPrintUnixDialogPrivate
   GtkTreeModelFilter *printer_list_filter;
 
   GtkPageSetup *page_setup;
+  gboolean page_setup_set;
 
   GtkWidget *all_pages_radio;
   GtkWidget *current_page_radio;
@@ -409,6 +410,7 @@ gtk_print_unix_dialog_init (GtkPrintUnix
   priv->current_page = -1;
 
   priv->page_setup = gtk_page_setup_new ();
+  priv->page_setup_set = FALSE;
 
   g_signal_connect (dialog, 
                     "destroy", 
@@ -1444,6 +1446,20 @@ selected_printer_changed (GtkTreeSelecti
 
   if (printer != NULL)
     {
+      if (!priv->page_setup_set)
+        {
+          /* if no explicit page setup has been set, use the printer default */	  
+          GtkPageSetup *page_setup;
+
+          page_setup = gtk_printer_get_default_page_size (printer);
+
+          if (!page_setup)
+            page_setup = gtk_page_setup_new ();
+
+          g_object_unref (priv->page_setup);
+          priv->page_setup = page_setup;
+        }
+
       priv->printer_capabilities = gtk_printer_get_capabilities (printer);
       priv->options = _gtk_printer_get_options (printer, 
 						priv->initial_settings,
@@ -2654,6 +2670,8 @@ gtk_print_unix_dialog_set_page_setup (Gt
       g_object_unref (priv->page_setup);
       priv->page_setup = g_object_ref (page_setup);
 
+      priv->page_setup_set = TRUE;
+
       g_object_notify (G_OBJECT (dialog), "page-setup");
     }
 }
--- gtk/gtkpagesetupunixdialog.c	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkpagesetupunixdialog.c	2008-06-13 13:13:30.000000000 +0200
@@ -677,8 +677,6 @@ fill_paper_sizes_from_printer (GtkPageSe
   GtkTreeIter iter;
   gint i;
 
-  current_page_setup = get_current_page_setup (dialog);
-  
   gtk_list_store_clear (priv->page_setup_list);
 
   if (printer == NULL)
@@ -716,6 +714,15 @@ fill_paper_sizes_from_printer (GtkPageSe
 
   fill_custom_paper_sizes (dialog);
   
+  current_page_setup = NULL;
+
+  /* When selecting a different printer, select its default paper size */
+  if (printer != NULL)
+    current_page_setup = gtk_printer_get_default_page_size (printer);
+
+  if (current_page_setup == NULL)
+    current_page_setup = get_current_page_setup (dialog);
+
   if (!set_paper_size (dialog, current_page_setup, FALSE, FALSE))
     set_paper_size (dialog, current_page_setup, TRUE, TRUE);
   
--- gtk/gtkprinter.h	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkprinter.h	2008-06-13 13:20:48.000000000 +0200
@@ -83,28 +83,29 @@ struct _GtkPrinterClass
   void (*_gtk_reserved7) (void);
 };
 
-GType                    gtk_printer_get_type          (void) G_GNUC_CONST;
-GtkPrinter              *gtk_printer_new               (const gchar     *name,
-							GtkPrintBackend *backend,
-							gboolean         virtual_);
-GtkPrintBackend         *gtk_printer_get_backend       (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_name          (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_state_message (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_description   (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_location      (GtkPrinter      *printer);
-G_CONST_RETURN gchar    *gtk_printer_get_icon_name     (GtkPrinter      *printer);
-gint                     gtk_printer_get_job_count     (GtkPrinter      *printer);
-gboolean                 gtk_printer_is_active         (GtkPrinter      *printer);
-gboolean                 gtk_printer_is_virtual        (GtkPrinter      *printer);
-gboolean                 gtk_printer_is_default        (GtkPrinter      *printer);
-gboolean                 gtk_printer_accepts_pdf       (GtkPrinter      *printer);
-gboolean                 gtk_printer_accepts_ps        (GtkPrinter      *printer);
-GList                   *gtk_printer_list_papers       (GtkPrinter      *printer);
-gint                     gtk_printer_compare           (GtkPrinter *a,
-							GtkPrinter *b);
-gboolean                 gtk_printer_has_details       (GtkPrinter       *printer);
-void                     gtk_printer_request_details   (GtkPrinter       *printer);
-GtkPrintCapabilities     gtk_printer_get_capabilities  (GtkPrinter       *printer);
+GType                    gtk_printer_get_type              (void) G_GNUC_CONST;
+GtkPrinter              *gtk_printer_new                   (const gchar     *name,
+							    GtkPrintBackend *backend,
+							    gboolean         virtual_);
+GtkPrintBackend         *gtk_printer_get_backend           (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_name              (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_state_message     (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_description       (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_location          (GtkPrinter      *printer);
+G_CONST_RETURN gchar    *gtk_printer_get_icon_name         (GtkPrinter      *printer);
+gint                     gtk_printer_get_job_count         (GtkPrinter      *printer);
+gboolean                 gtk_printer_is_active             (GtkPrinter      *printer);
+gboolean                 gtk_printer_is_virtual            (GtkPrinter      *printer);
+gboolean                 gtk_printer_is_default            (GtkPrinter      *printer);
+gboolean                 gtk_printer_accepts_pdf           (GtkPrinter      *printer);
+gboolean                 gtk_printer_accepts_ps            (GtkPrinter      *printer);
+GList                   *gtk_printer_list_papers           (GtkPrinter      *printer);
+GtkPageSetup            *gtk_printer_get_default_page_size (GtkPrinter      *printer);
+gint                     gtk_printer_compare               (GtkPrinter *a,
+							    GtkPrinter *b);
+gboolean                 gtk_printer_has_details           (GtkPrinter       *printer);
+void                     gtk_printer_request_details       (GtkPrinter       *printer);
+GtkPrintCapabilities     gtk_printer_get_capabilities      (GtkPrinter       *printer);
 
 typedef gboolean (*GtkPrinterFunc) (GtkPrinter *printer,
 				    gpointer    data);
--- gtk/gtkprinter.c	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkprinter.c	2008-06-13 13:18:43.000000000 +0200
@@ -832,6 +832,27 @@ gtk_printer_list_papers (GtkPrinter *pri
   return backend_class->printer_list_papers (printer);
 }
 
+/**
+ * gtk_printer_get_default_page_size:
+ * @printer: a #GtkPrinter
+ * 
+ * Returns default page size of @printer.
+ * 
+ * Return value: a newly allocated #GtkPageSetup with default page size of the printer.
+ *
+ * Since: 2.13
+ */
+GtkPageSetup  *
+gtk_printer_get_default_page_size (GtkPrinter *printer)
+{
+  GtkPrintBackendClass *backend_class;
+
+  g_return_val_if_fail (GTK_IS_PRINTER (printer), NULL);
+
+  backend_class = GTK_PRINT_BACKEND_GET_CLASS (printer->priv->backend);
+  return backend_class->printer_get_default_page_size (printer);
+}
+
 void
 _gtk_printer_get_hard_margins (GtkPrinter *printer,
 			       gdouble    *top,
--- gtk/gtkprintbackend.h	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkprintbackend.h	2008-06-13 13:17:38.000000000 +0200
@@ -99,6 +99,7 @@ struct _GtkPrintBackendClass
 							      GtkPrintSettings    *settings,
 							      GtkPageSetup        *page_setup);
   GList  *              (*printer_list_papers)               (GtkPrinter          *printer);
+  GtkPageSetup *        (*printer_get_default_page_size)     (GtkPrinter          *printer);
   void                  (*printer_get_hard_margins)          (GtkPrinter          *printer,
 							      double              *top,
 							      double              *bottom,
@@ -123,7 +124,6 @@ struct _GtkPrintBackendClass
   void (*_gtk_reserved4) (void);
   void (*_gtk_reserved5) (void);
   void (*_gtk_reserved6) (void);
-  void (*_gtk_reserved7) (void);
 };
 
 GType   gtk_print_backend_get_type       (void) G_GNUC_CONST;
--- gtk/gtkprintoperation-unix.c	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkprintoperation-unix.c	2008-06-13 13:23:44.000000000 +0200
@@ -349,7 +349,6 @@ get_print_dialog (GtkPrintOperation *op,
 {
   GtkPrintOperationPrivate *priv = op->priv;
   GtkWidget *pd, *label;
-  GtkPageSetup *page_setup;
   const gchar *custom_tab_label;
 
   pd = gtk_print_unix_dialog_new (NULL, parent);
@@ -366,13 +365,8 @@ get_print_dialog (GtkPrintOperation *op,
     gtk_print_unix_dialog_set_settings (GTK_PRINT_UNIX_DIALOG (pd),
 					priv->print_settings);
   if (priv->default_page_setup)
-    page_setup = gtk_page_setup_copy (priv->default_page_setup);
-  else
-    page_setup = gtk_page_setup_new ();
-
-  gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (pd), 
-                                        page_setup);
-  g_object_unref (page_setup);
+    gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (pd), 
+                                          priv->default_page_setup);
 
   g_signal_emit_by_name (op, "create-custom-widget",
 			 &priv->custom_widget);
@@ -432,6 +426,10 @@ finish_print (PrintResponseData *rdata,
     {
       gtk_print_operation_set_print_settings (op, settings);
       priv->print_context = _gtk_print_context_new (op);
+
+      if ( (page_setup != NULL) && (gtk_print_operation_get_default_page_setup (op) == NULL))
+        gtk_print_operation_set_default_page_setup (op, page_setup);
+
       _gtk_print_context_set_page_setup (priv->print_context, page_setup);
 
       if (!rdata->do_preview)
--- gtk/gtkprintbackend.c	2008-06-03 23:18:30.000000000 +0200
+++ gtk/gtkprintbackend.c	2008-06-13 13:16:57.000000000 +0200
@@ -283,16 +283,17 @@ gtk_print_backend_load_modules (void)
 
 G_DEFINE_TYPE (GtkPrintBackend, gtk_print_backend, G_TYPE_OBJECT)
 
-static void                 fallback_printer_request_details  (GtkPrinter          *printer);
-static gboolean             fallback_printer_mark_conflicts   (GtkPrinter          *printer,
-							       GtkPrinterOptionSet *options);
-static void                 fallback_printer_get_hard_margins (GtkPrinter          *printer,
-							       gdouble             *top,
-							       gdouble             *bottom,
-							       gdouble             *left,
-							       gdouble             *right);
-static GList *              fallback_printer_list_papers      (GtkPrinter          *printer);
-static GtkPrintCapabilities fallback_printer_get_capabilities (GtkPrinter          *printer);
+static void                 fallback_printer_request_details       (GtkPrinter          *printer);
+static gboolean             fallback_printer_mark_conflicts        (GtkPrinter          *printer,
+                                                                    GtkPrinterOptionSet *options);
+static void                 fallback_printer_get_hard_margins      (GtkPrinter          *printer,
+                                                                    gdouble             *top,
+                                                                    gdouble             *bottom,
+                                                                    gdouble             *left,
+                                                                    gdouble             *right);
+static GList *              fallback_printer_list_papers           (GtkPrinter          *printer);
+static GtkPageSetup *       fallback_printer_get_default_page_size (GtkPrinter          *printer);
+static GtkPrintCapabilities fallback_printer_get_capabilities      (GtkPrinter          *printer);
   
 static void
 gtk_print_backend_class_init (GtkPrintBackendClass *class)
@@ -308,6 +309,7 @@ gtk_print_backend_class_init (GtkPrintBa
   class->printer_mark_conflicts = fallback_printer_mark_conflicts;
   class->printer_get_hard_margins = fallback_printer_get_hard_margins;
   class->printer_list_papers = fallback_printer_list_papers;
+  class->printer_get_default_page_size = fallback_printer_get_default_page_size;
   class->printer_get_capabilities = fallback_printer_get_capabilities;
   
   g_type_class_add_private (class, sizeof (GtkPrintBackendPrivate));
@@ -419,6 +421,12 @@ fallback_printer_list_papers (GtkPrinter
   return NULL;
 }
 
+static GtkPageSetup *
+fallback_printer_get_default_page_size (GtkPrinter *printer)
+{
+  return NULL;
+}
+
 static GtkPrintCapabilities
 fallback_printer_get_capabilities (GtkPrinter *printer)
 {


Index: gtk2.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gtk2/F-9/gtk2.spec,v
retrieving revision 1.292
retrieving revision 1.293
diff -u -r1.292 -r1.293
--- gtk2.spec	12 Jun 2008 12:46:57 -0000	1.292
+++ gtk2.spec	13 Jun 2008 13:50:40 -0000	1.293
@@ -16,7 +16,7 @@
 Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
 Name: gtk2
 Version: %{base_version}
-Release: 3%{?dist}
+Release: 4%{?dist}
 License: LGPLv2+
 Group: System Environment/Libraries
 Source: http://download.gnome.org/sources/gtk+/2.12/gtk+-%{version}.tar.bz2
@@ -52,6 +52,9 @@
 # https://bugzilla.redhat.com/show_bug.cgi?id=248245
 Patch12: printer-hostname.patch
 
+# https://bugzilla.redhat.com/show_bug.cgi?id=204621
+Patch13: printer-paper-size.patch
+
 BuildRequires: atk-devel >= %{atk_version}
 BuildRequires: pango-devel >= %{pango_version}
 BuildRequires: glib2-devel >= %{glib2_version}
@@ -134,6 +137,7 @@
 %patch10 -p0 -b .printer-state
 %patch11 -p1 -b .geometry
 %patch12 -p0 -b .printer-hostname
+%patch13 -p0 -b .printer-paper-size
 
 for i in config.guess config.sub ; do
   test -f %{_datadir}/libtool/$i && cp %{_datadir}/libtool/$i .
@@ -326,6 +330,11 @@
 %{_datadir}/gtk-2.0
 
 %changelog
+* Fri Jun 13 2008 - Marek Kasik <mkasik at redhat.com> - 2.12.10-4
+- Sets default paper size according to default paper size of
+  selected printer and locale.
+- Resolves: #204621
+
 * Thu Jun 12 2008 - Marek Kasik <mkasik at redhat.com> - 2.12.10-3
 - Correction of hostname of printer which is the print job sent to.
 - Resolves: #248245




More information about the fedora-extras-commits mailing list