summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2007-04-30 17:39:40 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-04-30 17:39:40 +0000
commitf38ff3c52b5a5ea1ad2c9ad5366b384a57d08de0 (patch)
tree62fd6c474da930863c1fc5fd741df950e110e2fa /modules
parent7c4d71177754eedfaebe386e28b692728b68f65d (diff)
downloadgdk-pixbuf-f38ff3c52b5a5ea1ad2c9ad5366b384a57d08de0.tar.gz
Get all the printer attributes when getting the list of printers, not via
2007-04-30 Matthias Clasen <mclasen@redhat.com> * modules/printbackends/cups/gtkprintbackendcups.c: Get all the printer attributes when getting the list of printers, not via separate requests. (#387889, Krishan Purahoo) svn path=/trunk/; revision=17741
Diffstat (limited to 'modules')
-rw-r--r--modules/printbackends/cups/gtkprintbackendcups.c50
1 files changed, 42 insertions, 8 deletions
diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c
index f5d068ce7..fe8f8652e 100644
--- a/modules/printbackends/cups/gtkprintbackendcups.c
+++ b/modules/printbackends/cups/gtkprintbackendcups.c
@@ -660,6 +660,7 @@ cups_request_execute (GtkPrintBackendCups *print_backend,
g_source_unref ((GSource *) dispatch);
}
+#if 0
static void
cups_request_printer_info_cb (GtkPrintBackendCups *backend,
GtkCupsResult *result,
@@ -780,7 +781,7 @@ cups_request_printer_info (GtkPrintBackendCups *print_backend,
g_strdup (printer_name),
(GDestroyNotify) g_free);
}
-
+#endif
typedef struct {
GtkPrintBackendCups *print_backend;
@@ -993,9 +994,15 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
for (attr = response->attrs; attr != NULL; attr = attr->next)
{
GtkPrinter *printer;
- const gchar *printer_name;
- const gchar *printer_uri;
- const gchar *member_uris;
+ const gchar *printer_name = NULL;
+ const gchar *printer_uri = NULL;
+ const gchar *member_uris = NULL;
+ const gchar *location = NULL;
+ const gchar *description = NULL;
+ const gchar *state_msg = NULL;
+ gint state = 0;
+ gint job_count = 0;
+ gboolean status_changed = FALSE;
GList *node;
/* Skip leading attributes until we hit a printer...
@@ -1006,9 +1013,6 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
if (attr == NULL)
break;
- printer_name = NULL;
- printer_uri = NULL;
- member_uris = NULL;
while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
{
if (strcmp (attr->name, "printer-name") == 0 &&
@@ -1020,6 +1024,16 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
else if (strcmp (attr->name, "member-uris") == 0 &&
attr->value_tag == IPP_TAG_URI)
member_uris = attr->values[0].string.text;
+ else if (strcmp (attr->name, "printer-location") == 0)
+ location = attr->values[0].string.text;
+ else if (strcmp (attr->name, "printer-info") == 0)
+ description = attr->values[0].string.text;
+ else if (strcmp (attr->name, "printer-state-message") == 0)
+ state_msg = attr->values[0].string.text;
+ else if (strcmp (attr->name, "printer-state") == 0)
+ state = attr->values[0].integer;
+ else if (strcmp (attr->name, "queued-job-count") == 0)
+ job_count = attr->values[0].integer;
else
{
GTK_NOTE (PRINTING,
@@ -1130,7 +1144,22 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend,
gtk_printer_set_is_new (printer, FALSE);
}
+#if 0
+ /* Getting printer info with separate requests overwhelms cups
+ * when the printer list has more than a handful of printers.
+ */
cups_request_printer_info (cups_backend, gtk_printer_get_name (printer));
+#endif
+
+ GTK_PRINTER_CUPS (printer)->state = state;
+ status_changed = gtk_printer_set_job_count (printer, job_count);
+ status_changed |= gtk_printer_set_location (printer, location);
+ status_changed |= gtk_printer_set_description (printer, description);
+ status_changed |= gtk_printer_set_state_message (printer, state_msg);
+
+ if (status_changed)
+ g_signal_emit_by_name (GTK_PRINT_BACKEND (backend),
+ "printer-status-changed", printer);
/* The ref is held by GtkPrintBackend, in add_printer() */
g_object_unref (printer);
@@ -1163,7 +1192,12 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend)
{
"printer-name",
"printer-uri-supported",
- "member-uris"
+ "member-uris",
+ "printer-location",
+ "printer-info",
+ "printer-state-message",
+ "printer-state",
+ "queued-job-count"
};
if (cups_backend->list_printers_pending ||