summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorMarek Kasik <mkasik@redhat.com>2009-08-18 13:22:23 +0200
committerMarek Kasik <mkasik@redhat.com>2009-08-18 13:22:23 +0200
commit3dc377a2ca46531acc864c18c516c7d81f0c25e0 (patch)
treeb469d5d2fffebabcb3fdf0ea0bd5b9d4fa1fab9e /modules
parent9c151ba3e1d9f2fcf3f8aa5ab0d46ef4c9642ed8 (diff)
downloadgdk-pixbuf-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.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c
index f29d63756..f84c920c1 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 ();
}