summaryrefslogtreecommitdiff
path: root/modules/printbackends/cups
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2008-07-15 17:34:34 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-07-15 17:34:34 +0000
commit1eb96eadfc3349534617082f3bb5dd8be2f3a99a (patch)
tree403051291907f22e24287d20189bd7ed8eb68002 /modules/printbackends/cups
parent1ea43444be78b1c281dd888ff86eca838ec3c7c2 (diff)
downloadgtk+-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.c41
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 ||