diff options
author | Matthias Clasen <mclasen@redhat.com> | 2007-04-30 17:39:40 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-04-30 17:39:40 +0000 |
commit | f38ff3c52b5a5ea1ad2c9ad5366b384a57d08de0 (patch) | |
tree | 62fd6c474da930863c1fc5fd741df950e110e2fa /modules | |
parent | 7c4d71177754eedfaebe386e28b692728b68f65d (diff) | |
download | gdk-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.c | 50 |
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 || |