diff options
author | Marek Kasik <mkasik@redhat.com> | 2009-08-18 13:22:23 +0200 |
---|---|---|
committer | Marek Kasik <mkasik@redhat.com> | 2009-08-18 13:22:23 +0200 |
commit | 3dc377a2ca46531acc864c18c516c7d81f0c25e0 (patch) | |
tree | b469d5d2fffebabcb3fdf0ea0bd5b9d4fa1fab9e /modules | |
parent | 9c151ba3e1d9f2fcf3f8aa5ab0d46ef4c9642ed8 (diff) | |
download | gtk+-3dc377a2ca46531acc864c18c516c7d81f0c25e0.tar.gz |
Correctly select default printer when there is more than one (CUPS)
Select a local default printer if there is one instead of a remote
default printer (specified by the "printer-type" CUPS attribute)
(#591549).
Diffstat (limited to 'modules')
-rw-r--r-- | modules/printbackends/cups/gtkprintbackendcups.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c index f29d63756d..f84c920c17 100644 --- a/modules/printbackends/cups/gtkprintbackendcups.c +++ b/modules/printbackends/cups/gtkprintbackendcups.c @@ -1326,6 +1326,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, ipp_t *response; gboolean list_has_changed; GList *removed_printer_checklist; + gchar *remote_default_printer = NULL; GDK_THREADS_ENTER (); @@ -1426,6 +1427,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, gboolean got_printer_type = FALSE; gchar *default_cover_before = NULL; gchar *default_cover_after = NULL; + gboolean remote_printer = FALSE; /* Skip leading attributes until we hit a printer... */ @@ -1538,6 +1540,11 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, default_printer = TRUE; else default_printer = FALSE; + + if (attr->values[0].integer & 0x00000002) + remote_printer = TRUE; + else + remote_printer = FALSE; } else { @@ -1561,8 +1568,16 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, { if (default_printer && !cups_backend->got_default_printer) { - cups_backend->got_default_printer = TRUE; - cups_backend->default_printer = g_strdup (printer_name); + if (!remote_printer) + { + cups_backend->got_default_printer = TRUE; + cups_backend->default_printer = g_strdup (printer_name); + } + else + { + if (remote_default_printer == NULL) + remote_default_printer = g_strdup (printer_name); + } } } else @@ -1786,6 +1801,26 @@ done: gtk_print_backend_set_list_done (backend); + if (!cups_backend->got_default_printer && remote_default_printer != NULL) + { + cups_backend->default_printer = g_strdup (remote_default_printer); + cups_backend->got_default_printer = TRUE; + g_free (remote_default_printer); + + if (cups_backend->default_printer != NULL) + { + GtkPrinter *default_printer = NULL; + default_printer = gtk_print_backend_find_printer (GTK_PRINT_BACKEND (cups_backend), + cups_backend->default_printer); + if (default_printer != NULL) + { + gtk_printer_set_is_default (default_printer, TRUE); + g_signal_emit_by_name (GTK_PRINT_BACKEND (cups_backend), + "printer-status-changed", default_printer); + } + } + } + GDK_THREADS_LEAVE (); } |