From 828014328c583c0470f9f29efd27e81021129c10 Mon Sep 17 00:00:00 2001 From: John Palmieri Date: Thu, 6 Jul 2006 17:55:32 +0000 Subject: [PATCH] Get the name of the first printer in a class to use when requesting a PPD * modules/printbackends/cups/gtkprintbackendcups.c: (cups_request_printer_list_cb): Get the name of the first printer in a class to use when requesting a PPD (cups_request_ppd_cb, cups_request_ppd): Fix the parameters of the "details-acquired" signal emittion (cups_request_ppd): get the ppd name from the cups printer * modules/printbackends/cups/gtkprintercups.c (gtk_printer_cups_get_ppd_name): New method for getting the name of the ppd we should request --- ChangeLog | 12 ++++++ ChangeLog.pre-2-10 | 12 ++++++ .../printbackends/cups/gtkprintbackendcups.c | 38 ++++++++++++++++--- modules/printbackends/cups/gtkprintercups.c | 16 ++++++++ modules/printbackends/cups/gtkprintercups.h | 4 +- 5 files changed, 75 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0b5885008..210645905 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-07-06 John (J5) Palmieri + + * modules/printbackends/cups/gtkprintbackendcups.c: + (cups_request_printer_list_cb): Get the name of the first printer + in a class to use when requesting a PPD + (cups_request_ppd_cb, cups_request_ppd): Fix the parameters of + the "details-acquired" signal emittion + (cups_request_ppd): get the ppd name from the cups printer + + * modules/printbackends/cups/gtkprintercups.c (gtk_printer_cups_get_ppd_name): + New method for getting the name of the ppd we should request + 2006-07-06 Michael Natterer * gtk/gtkrc.c: added a bunch of utility functions to copy diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 0b5885008..210645905 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,15 @@ +2006-07-06 John (J5) Palmieri + + * modules/printbackends/cups/gtkprintbackendcups.c: + (cups_request_printer_list_cb): Get the name of the first printer + in a class to use when requesting a PPD + (cups_request_ppd_cb, cups_request_ppd): Fix the parameters of + the "details-acquired" signal emittion + (cups_request_ppd): get the ppd name from the cups printer + + * modules/printbackends/cups/gtkprintercups.c (gtk_printer_cups_get_ppd_name): + New method for getting the name of the ppd we should request + 2006-07-06 Michael Natterer * gtk/gtkrc.c: added a bunch of utility functions to copy diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c index d484991c7..add72fb7f 100644 --- a/modules/printbackends/cups/gtkprintbackendcups.c +++ b/modules/printbackends/cups/gtkprintbackendcups.c @@ -956,6 +956,9 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, list_has_changed = FALSE; + GTK_NOTE (PRINTING, + g_print ("CUPS Backend: %s\n", G_STRFUNC)); + cups_backend->list_printers_pending = FALSE; if (gtk_cups_result_is_error (result)) @@ -1001,6 +1004,11 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, else if (!strcmp (attr->name, "member-uris") && attr->value_tag == IPP_TAG_URI) member_uris = attr->values[0].string.text; + else + { + GTK_NOTE (PRINTING, + g_print ("CUPS Backend: Attribute %s ignored", attr->name)); + } attr = attr->next; } @@ -1034,10 +1042,20 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, cups_printer->device_uri = g_strdup_printf ("/printers/%s", printer_name); + /* Check to see if we are looking at a class */ if (member_uris) - cups_printer->printer_uri = g_strdup (member_uris); + { + cups_printer->printer_uri = g_strdup (member_uris); + /* TODO if member_uris is a class we need to recursivly find a printer */ + GTK_NOTE (PRINTING, + g_print ("CUPS Backend: Found class with printer %s\n", member_uris)); + } else - cups_printer->printer_uri = g_strdup (printer_uri); + { + cups_printer->printer_uri = g_strdup (printer_uri); + GTK_NOTE (PRINTING, + g_print ("CUPS Backend: Found printer %s\n", printer_uri)); + } #if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 2) || CUPS_VERSION_MAJOR > 1 httpSeparateURI (HTTP_URI_CODING_ALL, cups_printer->printer_uri, @@ -1056,6 +1074,13 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, resource); #endif + if (member_uris && !strncmp (resource, "/printers/", 10)) + { + cups_printer->ppd_name = g_strdup (resource + 10); + GTK_NOTE (PRINTING, + g_print ("CUPS Backend: Setting ppd name '%s' for printer class '%s'\n", cups_printer->ppd_name, printer_name)); + } + gethostname (uri, sizeof(uri)); if (strcasecmp (uri, hostname) == 0) strcpy (hostname, "localhost"); @@ -1198,7 +1223,7 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend, if (gtk_cups_result_is_error (result)) { - g_signal_emit_by_name (printer, "details-acquired", printer, FALSE); + g_signal_emit_by_name (printer, "details-acquired", FALSE); return; } @@ -1209,7 +1234,7 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend, data->printer->ppd_file = ppdOpenFd (dup (g_io_channel_unix_get_fd (data->ppd_io))); gtk_printer_set_has_details (printer, TRUE); - g_signal_emit_by_name (printer, "details-acquired", printer, TRUE); + g_signal_emit_by_name (printer, "details-acquired", TRUE); } static void @@ -1259,7 +1284,7 @@ cups_request_ppd (GtkPrinter *printer) g_free (ppd_filename); g_free (data); - g_signal_emit_by_name (printer, "details-acquired", printer, FALSE); + g_signal_emit_by_name (printer, "details-acquired", FALSE); return; } @@ -1270,7 +1295,8 @@ cups_request_ppd (GtkPrinter *printer) data->printer = g_object_ref (printer); - resource = g_strdup_printf ("/printers/%s.ppd", gtk_printer_get_name (printer)); + resource = g_strdup_printf ("/printers/%s.ppd", + gtk_printer_cups_get_ppd_name (GTK_PRINTER_CUPS(printer))); request = gtk_cups_request_new (http, GTK_CUPS_GET, 0, diff --git a/modules/printbackends/cups/gtkprintercups.c b/modules/printbackends/cups/gtkprintercups.c index 2a8a5355f..21ae2c683 100644 --- a/modules/printbackends/cups/gtkprintercups.c +++ b/modules/printbackends/cups/gtkprintercups.c @@ -73,6 +73,7 @@ gtk_printer_cups_init (GtkPrinterCups *printer) printer->state = 0; printer->hostname = NULL; printer->port = 0; + printer->ppd_name = NULL; printer->ppd_file = NULL; } @@ -88,6 +89,7 @@ gtk_printer_cups_finalize (GObject *object) g_free (printer->device_uri); g_free (printer->printer_uri); g_free (printer->hostname); + g_free (printer->ppd_name); if (printer->ppd_file) ppdClose (printer->ppd_file); @@ -124,3 +126,17 @@ gtk_printer_cups_get_ppd (GtkPrinterCups *printer) { return printer->ppd_file; } + +char * +gtk_printer_cups_get_ppd_name (GtkPrinterCups *printer) +{ + gchar *result; + + result = printer->ppd_name; + + if (result == NULL) + result = gtk_printer_get_name (GTK_PRINTER (printer)); + + return result; +} + diff --git a/modules/printbackends/cups/gtkprintercups.h b/modules/printbackends/cups/gtkprintercups.h index 510050918..d33a5ab5e 100644 --- a/modules/printbackends/cups/gtkprintercups.h +++ b/modules/printbackends/cups/gtkprintercups.h @@ -50,6 +50,7 @@ struct _GtkPrinterCups ipp_pstate_t state; gboolean reading_ppd; + gchar *ppd_name; ppd_file_t *ppd_file; }; @@ -63,7 +64,8 @@ GType gtk_printer_cups_get_type (void) G_GNUC_CONST; void gtk_printer_cups_register_type (GTypeModule *module); GtkPrinterCups *gtk_printer_cups_new (const char *name, GtkPrintBackend *backend); -ppd_file_t * gtk_printer_cups_get_ppd (GtkPrinterCups *printer); +ppd_file_t *gtk_printer_cups_get_ppd (GtkPrinterCups *printer); +char *gtk_printer_cups_get_ppd_name (GtkPrinterCups *printer); G_END_DECLS -- 2.43.2