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
This commit is contained in:
John Palmieri 2006-07-06 17:55:32 +00:00
parent 0407469ce1
commit 828014328c
5 changed files with 75 additions and 7 deletions

View File

@ -1,3 +1,15 @@
2006-07-06 John (J5) Palmieri <johnp@redhat.com>
* 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 <mitch@imendio.com>
* gtk/gtkrc.c: added a bunch of utility functions to copy

View File

@ -1,3 +1,15 @@
2006-07-06 John (J5) Palmieri <johnp@redhat.com>
* 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 <mitch@imendio.com>
* gtk/gtkrc.c: added a bunch of utility functions to copy

View File

@ -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,

View File

@ -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;
}

View File

@ -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