summaryrefslogtreecommitdiff
path: root/extra/gtk2/cups-custom-print.patch
diff options
context:
space:
mode:
authorMichał Masłowski <mtjm@mtjm.eu>2012-01-30 12:51:06 +0100
committerMichał Masłowski <mtjm@mtjm.eu>2012-01-30 12:51:06 +0100
commite8a18157bce8e0b0cbde5bd52aaf5ae0940297d3 (patch)
tree89fc1343a6302c7ee5d72774fde0f5b67d0b1927 /extra/gtk2/cups-custom-print.patch
parent6d4537b67f90b1decadcf8434e1a5bdcb6694f7f (diff)
parent39711f3264d3b9de2ff6392649274d6333932457 (diff)
Merge branch 'master' of ssh://parabolagnulinux.org:1863/home/parabola/abslibre-pre-mips64el
Conflicts: community/arpack/PKGBUILD extra/gtk2/PKGBUILD extra/kdeadmin/PKGBUILD extra/kdelibs/PKGBUILD extra/kdeplasma-addons/PKGBUILD staging/digikam/PKGBUILD testing/curl/PKGBUILD
Diffstat (limited to 'extra/gtk2/cups-custom-print.patch')
-rw-r--r--extra/gtk2/cups-custom-print.patch104
1 files changed, 104 insertions, 0 deletions
diff --git a/extra/gtk2/cups-custom-print.patch b/extra/gtk2/cups-custom-print.patch
new file mode 100644
index 000000000..ffc89aa32
--- /dev/null
+++ b/extra/gtk2/cups-custom-print.patch
@@ -0,0 +1,104 @@
+From 8170436e61ea68c713d75ad374d22c3261be9203 Mon Sep 17 00:00:00 2001
+From: Benjamin Berg <benjamin@sipsolutions.net>
+Date: Sat, 24 Dec 2011 16:26:32 +0000
+Subject: Set cups Custom print options correctly (bug #543520, patch by Marek Kašík)
+
+This patch fixes the cups print backend to pass Custom options with
+the "Custom." prefix to cups if neccessary.
+---
+diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c
+index 14a1b5d..2751ee4 100644
+--- a/modules/printbackends/cups/gtkprintbackendcups.c
++++ b/modules/printbackends/cups/gtkprintbackendcups.c
+@@ -483,22 +483,44 @@ cups_print_cb (GtkPrintBackendCups *print_backend,
+ GDK_THREADS_LEAVE ();
+ }
+
++typedef struct {
++ GtkCupsRequest *request;
++ GtkPrinterOptionSet *options;
++} CupsOptionsData;
++
+ static void
+ add_cups_options (const gchar *key,
+ const gchar *value,
+ gpointer user_data)
+ {
+- GtkCupsRequest *request = user_data;
++ CupsOptionsData *data = (CupsOptionsData *) user_data;
++ GtkCupsRequest *request = data->request;
++ GtkPrinterOptionSet *options = data->options;
++ GtkPrinterOption *option = NULL;
++ gchar *new_value = NULL;
+
+ if (!g_str_has_prefix (key, "cups-"))
+ return;
+
+ if (strcmp (value, "gtk-ignore-value") == 0)
+ return;
++
++ option = gtk_printer_option_set_lookup (options, key);
+
+ key = key + strlen ("cups-");
+
+- gtk_cups_request_encode_option (request, key, value);
++ /* Add "Custom." prefix to custom values */
++ if (value && option &&
++ !gtk_printer_option_has_choice (option, value))
++ new_value = g_strdup_printf ("Custom.%s", value);
++
++ if (new_value)
++ {
++ gtk_cups_request_encode_option (request, key, new_value);
++ g_free (new_value);
++ }
++ else
++ gtk_cups_request_encode_option (request, key, value);
+ }
+
+ static void
+@@ -511,8 +533,12 @@ gtk_print_backend_cups_print_stream (GtkPrintBackend *print_backend,
+ {
+ GtkPrinterCups *cups_printer;
+ CupsPrintStreamData *ps;
++ CupsOptionsData *options_data;
+ GtkCupsRequest *request;
+ GtkPrintSettings *settings;
++ GtkPrinterOptionSet *options;
++ GtkPrintCapabilities capabilities;
++ GtkPageSetup *page_setup;
+ const gchar *title;
+ char printer_absolute_uri[HTTP_MAX_URI];
+
+@@ -521,6 +547,8 @@ gtk_print_backend_cups_print_stream (GtkPrintBackend *print_backend,
+
+ cups_printer = GTK_PRINTER_CUPS (gtk_print_job_get_printer (job));
+ settings = gtk_print_job_get_settings (job);
++ capabilities = cups_printer_get_capabilities (GTK_PRINTER (cups_printer));
++ page_setup = gtk_printer_get_default_page_size (GTK_PRINTER (cups_printer));
+
+ request = gtk_cups_request_new_with_username (NULL,
+ GTK_CUPS_POST,
+@@ -558,8 +586,18 @@ gtk_print_backend_cups_print_stream (GtkPrintBackend *print_backend,
+ IPP_TAG_NAME, "job-name",
+ NULL, title);
+
+- gtk_print_settings_foreach (settings, add_cups_options, request);
+-
++ options = cups_printer_get_options (GTK_PRINTER (cups_printer), settings, page_setup, capabilities);
++
++ options_data = g_new0 (CupsOptionsData, 1);
++ options_data->request = request;
++ options_data->options = options;
++
++ gtk_print_settings_foreach (settings, add_cups_options, options_data);
++
++ g_object_unref (page_setup);
++ g_object_unref (options);
++ g_free (options_data);
++
+ ps = g_new0 (CupsPrintStreamData, 1);
+ ps->callback = callback;
+ ps->user_data = user_data;
+--
+cgit v0.9.0.2