RH bug 204621 - "GtkPrint" asks for "Letter" size paper when "A4" size

was chosen

        Patch by Marek Kasik.

        * gtk/gtk.symbols:
        * gtk/gtkprinter.[hc]: Add gtk_printer_get_default_page_size.

        * gtk/gtkprintbackend.[hc]: Add fallback implementation.

        * modules/printbackends/file/gtkprintbackendfile.c:
        * modules/printbackends/cups/gtkprintbackendcups.c: Implement
        get_default_page_size.

        * gtk/gtkpagesetupunixdialog.c: When selecting a different printer,
        select its default paper size.

        * gtk/gtkprintunixdialog.c: If no explicit page setup has been set,
        use the printer default.

        * gtk/gtkprintoperation-unix.c: Don't create an empty page setup
        if we don't have a default page setup.

svn path=/trunk/; revision=20120
This commit is contained in:
Matthias Clasen
2008-05-21 02:17:30 +00:00
parent 75a9722aa1
commit 59ae44d00e
13 changed files with 201 additions and 73 deletions

View File

@ -133,6 +133,7 @@ struct GtkPrintUnixDialogPrivate
GtkTreeModelFilter *printer_list_filter;
GtkPageSetup *page_setup;
gboolean page_setup_set;
GtkWidget *all_pages_radio;
GtkWidget *current_page_radio;
@ -407,6 +408,7 @@ gtk_print_unix_dialog_init (GtkPrintUnixDialog *dialog)
priv->current_page = -1;
priv->page_setup = gtk_page_setup_new ();
priv->page_setup_set = FALSE;
g_signal_connect (dialog,
"destroy",
@ -1440,6 +1442,20 @@ selected_printer_changed (GtkTreeSelection *selection,
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,
@ -2650,6 +2666,8 @@ gtk_print_unix_dialog_set_page_setup (GtkPrintUnixDialog *dialog,
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");
}
}