diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2008-07-15 17:34:34 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2008-07-15 17:34:34 +0000 |
commit | 1eb96eadfc3349534617082f3bb5dd8be2f3a99a (patch) | |
tree | 403051291907f22e24287d20189bd7ed8eb68002 /modules/printbackends/cups | |
parent | 1ea43444be78b1c281dd888ff86eca838ec3c7c2 (diff) | |
download | gtk+-1eb96eadfc3349534617082f3bb5dd8be2f3a99a.tar.gz |
Bug 384940 – handle rejecting jobs and authentication meaningfully
Patch by Marek Kasik, icons by Mike Langlie:
* gtk/gtk.symbols:
* gtk/gtkprintbackend.h:
* gtk/gtkprinter.[hc]: Add new paused and accepting-jobs properties
and getters/setters.
* gtk/gtkstock.h:
* gtk/gtkiconfactory.c:
* gtk/Makefile.am:
* gtk/stock-icons/{16,24}/gtk-print-paused.{png,svg}: New icon.
* modules/printbackends/cups/gtkprintbackendcups.c:
* gtk/gtkprintunixdialog.c: Handle paused and job-rejecting
printers.
svn path=/trunk/; revision=20838
Diffstat (limited to 'modules/printbackends/cups')
-rw-r--r-- | modules/printbackends/cups/gtkprintbackendcups.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c index 0aaf83e535..7be6434cde 100644 --- a/modules/printbackends/cups/gtkprintbackendcups.c +++ b/modules/printbackends/cups/gtkprintbackendcups.c @@ -1058,6 +1058,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, const gchar *reason_msg = NULL; gchar *reason_msg_desc = NULL; gchar *tmp_msg = NULL; + gchar *tmp_msg2 = NULL; gint printer_state_reason_level = 0; /* 0 - none, 1 - report, 2 - warning, 3 - error */ gboolean interested_in = FALSE; gboolean found = FALSE; @@ -1093,6 +1094,8 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, N_("Printer '%s' may not be connected."), N_("There is a problem on printer '%s'.") }; + gboolean is_paused = FALSE; + gboolean is_accepting_jobs = TRUE; /* Skip leading attributes until we hit a printer... */ @@ -1127,6 +1130,12 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, { if (strcmp (attr->values[i].string.text, "none") != 0) { + /* Sets is_paused flag for paused printer. */ + if (strcmp (attr->values[i].string.text, "paused") == 0) + { + is_paused = TRUE; + } + interested_in = FALSE; for (j = 0; j < G_N_ELEMENTS (reasons); j++) if (strncmp (attr->values[i].string.text, reasons[j], strlen (reasons[j])) == 0) @@ -1166,6 +1175,13 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, state = attr->values[0].integer; else if (strcmp (attr->name, "queued-job-count") == 0) job_count = attr->values[0].integer; + else if (strcmp (attr->name, "printer-is-accepting-jobs") == 0) + { + if (attr->values[0].boolean == 1) + is_accepting_jobs = TRUE; + else + is_accepting_jobs = FALSE; + } else { GTK_NOTE (PRINTING, @@ -1262,6 +1278,9 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, else g_object_ref (printer); + gtk_printer_set_is_paused (printer, is_paused); + gtk_printer_set_is_accepting_jobs (printer, is_accepting_jobs); + if (!gtk_printer_is_active (printer)) { gtk_printer_set_is_active (printer, TRUE); @@ -1288,6 +1307,19 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, status_changed |= gtk_printer_set_location (printer, location); status_changed |= gtk_printer_set_description (printer, description); + if (state_msg != NULL && strlen (state_msg) == 0) + { + if (is_paused && !is_accepting_jobs) + tmp_msg2 = g_strdup ( N_("Paused ; Rejecting Jobs")); + if (is_paused && is_accepting_jobs) + tmp_msg2 = g_strdup ( N_("Paused")); + if (!is_paused && !is_accepting_jobs) + tmp_msg2 = g_strdup ( N_("Rejecting Jobs")); + + if (tmp_msg2 != NULL) + state_msg = tmp_msg2; + } + /* Set description of the reason and combine it with printer-state-message. */ if ( (reason_msg != NULL)) { @@ -1317,10 +1349,14 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, } status_changed |= gtk_printer_set_state_message (printer, state_msg); + status_changed |= gtk_printer_set_is_accepting_jobs (printer, is_accepting_jobs); if (tmp_msg != NULL) g_free (tmp_msg); + if (tmp_msg2 != NULL) + g_free (tmp_msg2); + if (reason_msg_desc != NULL) g_free (reason_msg_desc); @@ -1330,6 +1366,8 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, gtk_printer_set_icon_name (printer, "gtk-print-error"); else if (printer_state_reason_level == 2) gtk_printer_set_icon_name (printer, "gtk-print-warning"); + else if (gtk_printer_is_paused (printer)) + gtk_printer_set_icon_name (printer, "gtk-print-paused"); else gtk_printer_set_icon_name (printer, "gtk-print"); @@ -1376,7 +1414,8 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend) "printer-state-message", "printer-state-reasons", "printer-state", - "queued-job-count" + "queued-job-count", + "printer-is-accepting-jobs" }; if (cups_backend->list_printers_pending || |