diff --git a/0001-Revert-iconview-layout-items-immediately-when-settin.patch b/0001-Revert-iconview-layout-items-immediately-when-settin.patch deleted file mode 100644 index 069a946..0000000 --- a/0001-Revert-iconview-layout-items-immediately-when-settin.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 5c3bb1839cac52828756f9ddb98f49d586853991 Mon Sep 17 00:00:00 2001 -From: Cosimo Cecchi -Date: Wed, 16 Nov 2011 17:38:45 -0500 -Subject: [PATCH 1/4] Revert "iconview: layout items immediately when setting - a GtkTreeModel" - -It makes GtkIconView segfault on GTK 2.24. - -gtk_icon_view_expose() calls gtk_icon_view_layout() first thing if -there's a layout queued anyway, so we wouldn't end up in the same -situation causing the crash the original patch is supposed to fix. - -This reverts commit 5a03f4a6a50237d86959f596dda143dfc2f040d1. - -https://bugzilla.gnome.org/show_bug.cgi?id=663138 ---- - gtk/gtkiconview.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c -index 62877fa..54b3f3b 100644 ---- a/gtk/gtkiconview.c -+++ b/gtk/gtkiconview.c -@@ -5423,7 +5423,7 @@ gtk_icon_view_set_model (GtkIconView *icon_view, - - gtk_icon_view_build_items (icon_view); - -- gtk_icon_view_layout (icon_view); -+ gtk_icon_view_queue_layout (icon_view); - } - - g_object_notify (G_OBJECT (icon_view), "model"); --- -1.7.7.1 - diff --git a/0001-printing-List-Avahi-printers.patch b/0001-printing-List-Avahi-printers.patch deleted file mode 100644 index 8000b28..0000000 --- a/0001-printing-List-Avahi-printers.patch +++ /dev/null @@ -1,1730 +0,0 @@ -From a057ed26dc623dff0fc0c62ef287f6583b2710d0 Mon Sep 17 00:00:00 2001 -From: Marek Kasik -Date: Tue, 25 Jun 2013 14:34:15 +0200 -Subject: [PATCH] printing: List Avahi printers - -Show printers advertised by avahi on local network. CUPS -backend now looks for _ipps._tcp and _ipp._tcp services -offered by avahi. If it finds such a service (printer) -it requests its attributes through IPP_GET_PRINTER_ATTRIBUTES -ipp request and adds it to the list of printers. Such printer -behaves like a remote printer then. -If an avahi printer is a default printer then it is considered -default by the backend only if there is no local or remote -default printer. -This functionality is enabled when building Gtk+ with CUPS 1.6 -or later because it replaces browsing protocol removed in CUPS 1.6. - -https://bugzilla.gnome.org/show_bug.cgi?id=702455 ---- - configure.ac | 2 +- - modules/printbackends/cups/gtkcupsutils.c | 22 + - modules/printbackends/cups/gtkcupsutils.h | 3 + - modules/printbackends/cups/gtkprintbackendcups.c | 1290 +++++++++++++++++++--- - modules/printbackends/cups/gtkprintercups.c | 29 +- - modules/printbackends/cups/gtkprintercups.h | 11 + - 6 files changed, 1205 insertions(+), 152 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 5f8a787..50e27b0 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1479,7 +1479,7 @@ else - $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 6; then - AC_DEFINE(HAVE_CUPS_API_1_6, 1, - [Define to 1 if CUPS 1.6 API is available]) -- -+ have_cups_api_1_6=yes - fi - - AC_SUBST(CUPS_API_MAJOR) -diff --git a/modules/printbackends/cups/gtkcupsutils.c b/modules/printbackends/cups/gtkcupsutils.c -index 4a3f0ad..6b10db3 100644 ---- a/modules/printbackends/cups/gtkcupsutils.c -+++ b/modules/printbackends/cups/gtkcupsutils.c -@@ -89,6 +89,20 @@ static GtkCupsRequestStateFunc get_states[] = { - #define ippSetState(ipp_request, ipp_state) ipp_request->state = ipp_state - #define ippGetString(attr, index, foo) attr->values[index].string.text - #define ippGetCount(attr) attr->num_values -+ -+int -+ippSetVersion (ipp_t *ipp, -+ int major, -+ int minor) -+{ -+ if (!ipp || major < 0 || minor < 0) -+ return 0; -+ -+ ipp->request.any.version[0] = major; -+ ipp->request.any.version[1] = minor; -+ -+ return 1; -+} - #endif - - static void -@@ -659,6 +673,14 @@ gtk_cups_request_encode_option (GtkCupsRequest *request, - } - - -+void -+gtk_cups_request_set_ipp_version (GtkCupsRequest *request, -+ gint major, -+ gint minor) -+{ -+ ippSetVersion (request->ipp_request, major, minor); -+} -+ - static void - _connect (GtkCupsRequest *request) - { -diff --git a/modules/printbackends/cups/gtkcupsutils.h b/modules/printbackends/cups/gtkcupsutils.h -index 2adfc16..53171ed 100644 ---- a/modules/printbackends/cups/gtkcupsutils.h -+++ b/modules/printbackends/cups/gtkcupsutils.h -@@ -182,6 +182,9 @@ gboolean gtk_cups_request_is_done (GtkCupsRequest * - void gtk_cups_request_encode_option (GtkCupsRequest *request, - const gchar *option, - const gchar *value); -+void gtk_cups_request_set_ipp_version (GtkCupsRequest *request, -+ gint major, -+ gint minor); - gboolean gtk_cups_result_is_error (GtkCupsResult *result); - ipp_t * gtk_cups_result_get_response (GtkCupsResult *result); - GtkCupsErrorType gtk_cups_result_get_error_type (GtkCupsResult *result); -diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c -index 79033dd..60c2f7e 100644 ---- a/modules/printbackends/cups/gtkprintbackendcups.c -+++ b/modules/printbackends/cups/gtkprintbackendcups.c -@@ -71,6 +71,17 @@ typedef struct _GtkPrintBackendCupsClass GtkPrintBackendCupsClass; - #define _CUPS_MAX_ATTEMPTS 10 - #define _CUPS_MAX_CHUNK_SIZE 8192 - -+#ifdef HAVE_CUPS_API_1_6 -+#define AVAHI_IF_UNSPEC -1 -+#define AVAHI_PROTO_INET 0 -+#define AVAHI_PROTO_INET6 1 -+#define AVAHI_PROTO_UNSPEC -1 -+ -+#define AVAHI_BUS "org.freedesktop.Avahi" -+#define AVAHI_SERVER_IFACE "org.freedesktop.Avahi.Server" -+#define AVAHI_SERVICE_BROWSER_IFACE "org.freedesktop.Avahi.ServiceBrowser" -+#endif -+ - /* define this to see warnings about ignored ppd options */ - #undef PRINT_IGNORED_OPTIONS - -@@ -133,6 +144,14 @@ struct _GtkPrintBackendCups - GHashTable *auth; - gchar *username; - gboolean authentication_lock; -+#ifdef HAVE_CUPS_API_1_6 -+ GDBusConnection *dbus_connection; -+ gchar *avahi_default_printer; -+ guint avahi_service_browser_subscription_id; -+ guint avahi_service_browser_subscription_ids[2]; -+ gchar *avahi_service_browser_paths[2]; -+ GCancellable *avahi_cancellable; -+#endif - }; - - static GObjectClass *backend_parent_class; -@@ -199,6 +218,10 @@ void overwrite_and_free (gpointer - static gboolean is_address_local (const gchar *address); - static gboolean request_auth_info (gpointer data); - -+#ifdef HAVE_CUPS_API_1_6 -+static void avahi_request_printer_list (GtkPrintBackendCups *cups_backend); -+#endif -+ - static void - gtk_print_backend_cups_register_type (GTypeModule *module) - { -@@ -257,6 +280,15 @@ pb_module_create (void) - #define ippGetName(attr) attr->name - #define ippGetCount(attr) attr->num_values - #define ippGetGroupTag(attr) attr->group_tag -+ -+static int -+ippGetRange (ipp_attribute_t *attr, -+ int element, -+ int *upper) -+{ -+ *upper = attr->values[element].range.upper; -+ return (attr->values[element].range.lower); -+} - #endif - /* - * GtkPrintBackendCups -@@ -580,7 +612,7 @@ gtk_print_backend_cups_print_stream (GtkPrintBackend *print_backend, - GtkPrinterCups *cups_printer; - CupsPrintStreamData *ps; - CupsOptionsData *options_data; -- GtkCupsRequest *request; -+ GtkCupsRequest *request = NULL; - GtkPrintSettings *settings; - const gchar *title; - char printer_absolute_uri[HTTP_MAX_URI]; -@@ -599,23 +631,82 @@ gtk_print_backend_cups_print_stream (GtkPrintBackend *print_backend, - cups_printer->device_uri, - GTK_PRINT_BACKEND_CUPS (print_backend)->username); - -+#ifdef HAVE_CUPS_API_1_6 -+ if (cups_printer->avahi_browsed) -+ { -+ http_t *http; -+ -+ http = httpConnect (cups_printer->hostname, cups_printer->port); -+ if (http) -+ { -+ request = gtk_cups_request_new_with_username (http, -+ GTK_CUPS_POST, -+ IPP_PRINT_JOB, -+ data_io, -+ cups_printer->hostname, -+ cups_printer->device_uri, -+ GTK_PRINT_BACKEND_CUPS (print_backend)->username); -+ g_snprintf (printer_absolute_uri, HTTP_MAX_URI, "%s", cups_printer->printer_uri); -+ } -+ else -+ { -+ GError *error = NULL; -+ -+ GTK_NOTE (PRINTING, -+ g_warning ("CUPS Backend: Error connecting to %s:%d", -+ cups_printer->hostname, -+ cups_printer->port)); -+ -+ error = g_error_new (gtk_print_error_quark (), -+ GTK_CUPS_ERROR_GENERAL, -+ "Error connecting to %s", -+ cups_printer->hostname); -+ -+ gtk_print_job_set_status (job, GTK_PRINT_STATUS_FINISHED_ABORTED); -+ -+ if (callback) -+ { -+ callback (job, user_data, error); -+ } -+ -+ g_clear_error (&error); -+ -+ return; -+ } -+ } -+ else -+#endif -+ { -+ request = gtk_cups_request_new_with_username (NULL, -+ GTK_CUPS_POST, -+ IPP_PRINT_JOB, -+ data_io, -+ NULL, -+ cups_printer->device_uri, -+ GTK_PRINT_BACKEND_CUPS (print_backend)->username); -+ - #if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 2) || CUPS_VERSION_MAJOR > 1 -- httpAssembleURIf (HTTP_URI_CODING_ALL, -- printer_absolute_uri, -- sizeof (printer_absolute_uri), -- "ipp", -- NULL, -- "localhost", -- ippPort (), -- "/printers/%s", -- gtk_printer_get_name (gtk_print_job_get_printer (job))); -+ httpAssembleURIf (HTTP_URI_CODING_ALL, -+ printer_absolute_uri, -+ sizeof (printer_absolute_uri), -+ "ipp", -+ NULL, -+ "localhost", -+ ippPort (), -+ "/printers/%s", -+ gtk_printer_get_name (gtk_print_job_get_printer (job))); - #else -- g_snprintf (printer_absolute_uri, -- sizeof (printer_absolute_uri), -- "ipp://localhost:%d/printers/%s", -- ippPort (), -- gtk_printer_get_name (gtk_print_job_get_printer (job))); -+ g_snprintf (printer_absolute_uri, -+ sizeof (printer_absolute_uri), -+ "ipp://localhost:%d/printers/%s", -+ ippPort (), -+ gtk_printer_get_name (gtk_print_job_get_printer (job))); - #endif -+ } -+ -+ gtk_cups_request_set_ipp_version (request, -+ cups_printer->ipp_version_major, -+ cups_printer->ipp_version_minor); - - gtk_cups_request_ipp_add_string (request, IPP_TAG_OPERATION, - IPP_TAG_URI, "printer-uri", -@@ -663,6 +754,10 @@ void overwrite_and_free (gpointer data) - static void - gtk_print_backend_cups_init (GtkPrintBackendCups *backend_cups) - { -+#ifdef HAVE_CUPS_API_1_6 -+ gint i; -+#endif -+ - backend_cups->list_printers_poll = FALSE; - backend_cups->got_default_printer = FALSE; - backend_cups->list_printers_pending = FALSE; -@@ -681,6 +776,17 @@ gtk_print_backend_cups_init (GtkPrintBackendCups *backend_cups) - - backend_cups->username = NULL; - -+#ifdef HAVE_CUPS_API_1_6 -+ backend_cups->dbus_connection = NULL; -+ backend_cups->avahi_default_printer = NULL; -+ backend_cups->avahi_service_browser_subscription_id = 0; -+ for (i = 0; i < 2; i++) -+ { -+ backend_cups->avahi_service_browser_paths[i] = NULL; -+ backend_cups->avahi_service_browser_subscription_ids[i] = 0; -+ } -+#endif -+ - cups_get_local_default_printer (backend_cups); - } - -@@ -707,6 +813,12 @@ gtk_print_backend_cups_finalize (GObject *object) - - g_free (backend_cups->username); - -+#ifdef HAVE_CUPS_API_1_6 -+ g_clear_object (&backend_cups->avahi_cancellable); -+ g_clear_pointer (&backend_cups->avahi_default_printer, g_free); -+ g_clear_object (&backend_cups->dbus_connection); -+#endif -+ - backend_parent_class->finalize (object); - } - -@@ -714,6 +826,9 @@ static void - gtk_print_backend_cups_dispose (GObject *object) - { - GtkPrintBackendCups *backend_cups; -+#ifdef HAVE_CUPS_API_1_6 -+ gint i; -+#endif - - GTK_NOTE (PRINTING, - g_print ("CUPS Backend: %s\n", G_STRFUNC)); -@@ -729,6 +844,44 @@ gtk_print_backend_cups_dispose (GObject *object) - g_source_remove (backend_cups->default_printer_poll); - backend_cups->default_printer_poll = 0; - -+#ifdef HAVE_CUPS_API_1_6 -+ g_cancellable_cancel (backend_cups->avahi_cancellable); -+ -+ for (i = 0; i < 2; i++) -+ { -+ if (backend_cups->avahi_service_browser_subscription_ids[i] > 0) -+ { -+ g_dbus_connection_signal_unsubscribe (backend_cups->dbus_connection, -+ backend_cups->avahi_service_browser_subscription_ids[i]); -+ backend_cups->avahi_service_browser_subscription_ids[i] = 0; -+ } -+ -+ if (backend_cups->avahi_service_browser_paths[i]) -+ { -+ g_dbus_connection_call (backend_cups->dbus_connection, -+ AVAHI_BUS, -+ backend_cups->avahi_service_browser_paths[i], -+ AVAHI_SERVICE_BROWSER_IFACE, -+ "Free", -+ NULL, -+ NULL, -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ NULL, -+ NULL, -+ NULL); -+ g_clear_pointer (&backend_cups->avahi_service_browser_paths[i], g_free); -+ } -+ } -+ -+ if (backend_cups->avahi_service_browser_subscription_id > 0) -+ { -+ g_dbus_connection_signal_unsubscribe (backend_cups->dbus_connection, -+ backend_cups->avahi_service_browser_subscription_id); -+ backend_cups->avahi_service_browser_subscription_id = 0; -+ } -+#endif -+ - backend_parent_class->dispose (object); - } - -@@ -1716,6 +1869,30 @@ static const char * printer_strings[] = - N_("There is a problem on printer '%s'.") - }; - -+/* Attributes we're interested in for printers */ -+static const char * const printer_attrs[] = -+ { -+ "printer-name", -+ "printer-uri-supported", -+ "member-uris", -+ "printer-location", -+ "printer-info", -+ "printer-state-message", -+ "printer-state-reasons", -+ "printer-state", -+ "queued-job-count", -+ "printer-is-accepting-jobs", -+ "job-sheets-supported", -+ "job-sheets-default", -+ "printer-type", -+ "auth-info-required", -+ "number-up-default", -+ "ipp-versions-supported", -+ "multiple-document-handling-supported", -+ "copies-supported", -+ "number-up-supported" -+ }; -+ - typedef enum - { - GTK_PRINTER_STATE_LEVEL_NONE = 0, -@@ -1743,10 +1920,88 @@ typedef struct - gboolean default_printer; - gboolean got_printer_type; - gboolean remote_printer; -+#ifdef HAVE_CUPS_API_1_6 -+ gboolean avahi_printer; -+#endif - gchar **auth_info_required; -+ guchar ipp_version_major; -+ guchar ipp_version_minor; -+ gboolean supports_copies; -+ gboolean supports_collate; -+ gboolean supports_number_up; - } PrinterSetupInfo; - - static void -+get_ipp_version (const char *ipp_version_string, -+ guchar *ipp_version_major, -+ guchar *ipp_version_minor) -+{ -+ gchar **ipp_version_strv; -+ gchar *endptr; -+ -+ *ipp_version_major = 1; -+ *ipp_version_minor = 1; -+ -+ if (ipp_version_string) -+ { -+ ipp_version_strv = g_strsplit (ipp_version_string, ".", 0); -+ -+ if (ipp_version_strv) -+ { -+ if (g_strv_length (ipp_version_strv) == 2) -+ { -+ *ipp_version_major = (guchar) g_ascii_strtoull (ipp_version_strv[0], &endptr, 10); -+ if (endptr == ipp_version_strv[0]) -+ *ipp_version_major = 1; -+ -+ *ipp_version_minor = (guchar) g_ascii_strtoull (ipp_version_strv[1], &endptr, 10); -+ if (endptr == ipp_version_strv[1]) -+ *ipp_version_minor = 1; -+ } -+ -+ g_strfreev (ipp_version_strv); -+ } -+ } -+} -+ -+static void -+get_server_ipp_version (guchar *ipp_version_major, -+ guchar *ipp_version_minor) -+{ -+ *ipp_version_major = 1; -+ *ipp_version_minor = 1; -+ -+ if (IPP_VERSION && strlen (IPP_VERSION) == 2) -+ { -+ *ipp_version_major = (unsigned char) IPP_VERSION[0]; -+ *ipp_version_minor = (unsigned char) IPP_VERSION[1]; -+ } -+} -+ -+static gint -+ipp_version_cmp (guchar ipp_version_major1, -+ guchar ipp_version_minor1, -+ guchar ipp_version_major2, -+ guchar ipp_version_minor2) -+{ -+ if (ipp_version_major1 == ipp_version_major2 && -+ ipp_version_minor1 == ipp_version_minor2) -+ { -+ return 0; -+ } -+ else if (ipp_version_major1 < ipp_version_major2 || -+ (ipp_version_major1 == ipp_version_major2 && -+ ipp_version_minor1 < ipp_version_minor2)) -+ { -+ return -1; -+ } -+ else -+ { -+ return 1; -+ } -+} -+ -+static void - cups_printer_handle_attribute (GtkPrintBackendCups *cups_backend, - ipp_attribute_t *attr, - PrinterSetupInfo *info) -@@ -1867,6 +2122,63 @@ cups_printer_handle_attribute (GtkPrintBackendCups *cups_backend, - info->auth_info_required[i] = g_strdup (ippGetString (attr, i, NULL)); - } - } -+ else if (g_strcmp0 (ippGetName (attr), "ipp-versions-supported") == 0) -+ { -+ guchar server_ipp_version_major; -+ guchar server_ipp_version_minor; -+ guchar ipp_version_major; -+ guchar ipp_version_minor; -+ -+ get_server_ipp_version (&server_ipp_version_major, -+ &server_ipp_version_minor); -+ -+ for (i = 0; i < ippGetCount (attr); i++) -+ { -+ get_ipp_version (ippGetString (attr, i, NULL), -+ &ipp_version_major, -+ &ipp_version_minor); -+ -+ if (ipp_version_cmp (ipp_version_major, -+ ipp_version_minor, -+ info->ipp_version_major, -+ info->ipp_version_minor) > 0 && -+ ipp_version_cmp (ipp_version_major, -+ ipp_version_minor, -+ server_ipp_version_major, -+ server_ipp_version_minor) <= 0) -+ { -+ info->ipp_version_major = ipp_version_major; -+ info->ipp_version_minor = ipp_version_minor; -+ } -+ } -+ } -+ else if (g_strcmp0 (ippGetName (attr), "number-up-supported") == 0) -+ { -+ if (ippGetCount (attr) == 6) -+ { -+ info->supports_number_up = TRUE; -+ } -+ } -+ else if (g_strcmp0 (ippGetName (attr), "copies-supported") == 0) -+ { -+ int upper = 1; -+ -+ ippGetRange (attr, 0, &upper); -+ if (upper > 1) -+ { -+ info->supports_copies = TRUE; -+ } -+ } -+ else if (g_strcmp0 (ippGetName (attr), "multiple-document-handling-supported") == 0) -+ { -+ for (i = 0; i < ippGetCount (attr); i++) -+ { -+ if (g_strcmp0 (ippGetString (attr, i, NULL), "separate-documents-collated-copies") == 0) -+ { -+ info->supports_collate = TRUE; -+ } -+ } -+ } - else - { - GTK_NOTE (PRINTING, -@@ -1955,22 +2267,722 @@ cups_create_printer (GtkPrintBackendCups *cups_backend, - - cups_printer->hostname = g_strdup (hostname); - cups_printer->port = port; -- -+ - cups_printer->auth_info_required = g_strdupv (info->auth_info_required); - g_strfreev (info->auth_info_required); - - printer = GTK_PRINTER (cups_printer); -- -+ - if (cups_backend->default_printer != NULL && - strcmp (cups_backend->default_printer, gtk_printer_get_name (printer)) == 0) - gtk_printer_set_is_default (printer, TRUE); - -- -+#ifdef HAVE_CUPS_API_1_6 -+ cups_printer->avahi_browsed = info->avahi_printer; -+#endif -+ - gtk_print_backend_add_printer (backend, printer); - return printer; - } - - static void -+set_printer_icon_name_from_info (GtkPrinter *printer, -+ PrinterSetupInfo *info) -+{ -+ /* Set printer icon according to importance -+ (none, report, warning, error - report is omitted). */ -+ if (info->reason_level == GTK_PRINTER_STATE_LEVEL_ERROR) -+ gtk_printer_set_icon_name (printer, "printer-error"); -+ else if (info->reason_level == GTK_PRINTER_STATE_LEVEL_WARNING) -+ gtk_printer_set_icon_name (printer, "printer-warning"); -+ else if (gtk_printer_is_paused (printer)) -+ gtk_printer_set_icon_name (printer, "printer-paused"); -+ else -+ gtk_printer_set_icon_name (printer, "printer"); -+} -+ -+static void -+set_info_state_message (PrinterSetupInfo *info) -+{ -+ gint i; -+ -+ if (info->state_msg && strlen (info->state_msg) == 0) -+ { -+ gchar *tmp_msg2 = NULL; -+ if (info->is_paused && !info->is_accepting_jobs) -+ /* Translators: this is a printer status. */ -+ tmp_msg2 = g_strdup ( _("Paused; Rejecting Jobs")); -+ if (info->is_paused && info->is_accepting_jobs) -+ /* Translators: this is a printer status. */ -+ tmp_msg2 = g_strdup ( _("Paused")); -+ if (!info->is_paused && !info->is_accepting_jobs) -+ /* Translators: this is a printer status. */ -+ tmp_msg2 = g_strdup ( _("Rejecting Jobs")); -+ -+ if (tmp_msg2 != NULL) -+ { -+ g_free (info->state_msg); -+ info->state_msg = tmp_msg2; -+ } -+ } -+ -+ /* Set description of the reason and combine it with printer-state-message. */ -+ if (info->reason_msg) -+ { -+ gchar *reason_msg_desc = NULL; -+ gboolean found = FALSE; -+ -+ for (i = 0; i < G_N_ELEMENTS (printer_messages); i++) -+ { -+ if (strncmp (info->reason_msg, printer_messages[i], -+ strlen (printer_messages[i])) == 0) -+ { -+ reason_msg_desc = g_strdup_printf (printer_strings[i], -+ info->printer_name); -+ found = TRUE; -+ break; -+ } -+ } -+ -+ if (!found) -+ info->reason_level = GTK_PRINTER_STATE_LEVEL_NONE; -+ -+ if (info->reason_level >= GTK_PRINTER_STATE_LEVEL_WARNING) -+ { -+ if (info->state_msg == NULL || info->state_msg[0] == '\0') -+ { -+ g_free (info->state_msg); -+ info->state_msg = reason_msg_desc; -+ reason_msg_desc = NULL; -+ } -+ else -+ { -+ gchar *tmp_msg = NULL; -+ /* Translators: this string connects multiple printer states together. */ -+ tmp_msg = g_strjoin ( _("; "), info->state_msg, -+ reason_msg_desc, NULL); -+ g_free (info->state_msg); -+ info->state_msg = tmp_msg; -+ } -+ } -+ -+ g_free (reason_msg_desc); -+ } -+} -+ -+static void -+set_default_printer (GtkPrintBackendCups *cups_backend, -+ const gchar *default_printer_name) -+{ -+ cups_backend->default_printer = g_strdup (default_printer_name); -+ cups_backend->got_default_printer = TRUE; -+ -+ if (cups_backend->default_printer != NULL) -+ { -+ GtkPrinter *default_printer = NULL; -+ default_printer = gtk_print_backend_find_printer (GTK_PRINT_BACKEND (cups_backend), -+ cups_backend->default_printer); -+ if (default_printer != NULL) -+ { -+ gtk_printer_set_is_default (default_printer, TRUE); -+ g_signal_emit_by_name (GTK_PRINT_BACKEND (cups_backend), -+ "printer-status-changed", default_printer); -+ } -+ } -+} -+ -+#ifdef HAVE_CUPS_API_1_6 -+typedef struct -+{ -+ gchar *name; -+ gchar *type; -+ gchar *domain; -+ gchar *host; -+ gint port; -+} AvahiService; -+ -+void -+avahi_service_free (AvahiService *service) -+{ -+ if (service) -+ { -+ g_free (service->name); -+ g_free (service->type); -+ g_free (service->domain); -+ g_free (service->host); -+ g_free (service); -+ } -+} -+ -+static void -+cups_request_avahi_printer_info_cb (GtkPrintBackendCups *cups_backend, -+ GtkCupsResult *result, -+ gpointer user_data) -+{ -+ PrinterSetupInfo *info = g_slice_new0 (PrinterSetupInfo); -+ GtkPrintBackend *backend = GTK_PRINT_BACKEND (cups_backend); -+ ipp_attribute_t *attr; -+ AvahiService *service = (AvahiService *) user_data; -+ GtkPrinter *printer; -+ gboolean list_has_changed = FALSE; -+ gboolean status_changed = FALSE; -+ ipp_t *response; -+ -+ gdk_threads_enter (); -+ -+ GTK_NOTE (PRINTING, -+ g_print ("CUPS Backend: %s\n", G_STRFUNC)); -+ -+ if (gtk_cups_result_is_error (result)) -+ { -+ GTK_NOTE (PRINTING, -+ g_warning ("CUPS Backend: Error getting printer info: %s %d %d", -+ gtk_cups_result_get_error_string (result), -+ gtk_cups_result_get_error_type (result), -+ gtk_cups_result_get_error_code (result))); -+ -+ goto done; -+ } -+ -+ response = gtk_cups_result_get_response (result); -+ attr = ippFirstAttribute (response); -+ while (attr && ippGetGroupTag (attr) != IPP_TAG_PRINTER) -+ attr = ippNextAttribute (response); -+ -+ if (attr) -+ { -+ while (attr && ippGetGroupTag (attr) == IPP_TAG_PRINTER) -+ { -+ cups_printer_handle_attribute (cups_backend, attr, info); -+ attr = ippNextAttribute (response); -+ } -+ -+ if (info->printer_name && info->printer_uri) -+ { -+ info->avahi_printer = TRUE; -+ -+ if (info->got_printer_type && -+ info->default_printer && -+ cups_backend->avahi_default_printer == NULL) -+ cups_backend->avahi_default_printer = g_strdup (info->printer_name); -+ -+ set_info_state_message (info); -+ -+ printer = gtk_print_backend_find_printer (backend, info->printer_name); -+ if (!printer) -+ { -+ printer = cups_create_printer (cups_backend, info); -+ list_has_changed = TRUE; -+ } -+ else -+ { -+ g_object_ref (printer); -+ } -+ -+ gtk_printer_set_is_paused (printer, info->is_paused); -+ gtk_printer_set_is_accepting_jobs (printer, info->is_accepting_jobs); -+ -+ if (!gtk_printer_is_active (printer)) -+ { -+ gtk_printer_set_is_active (printer, TRUE); -+ gtk_printer_set_is_new (printer, TRUE); -+ list_has_changed = TRUE; -+ } -+ -+ GTK_PRINTER_CUPS (printer)->remote = info->remote_printer; -+ GTK_PRINTER_CUPS (printer)->avahi_name = g_strdup (service->name); -+ GTK_PRINTER_CUPS (printer)->avahi_type = g_strdup (service->type); -+ GTK_PRINTER_CUPS (printer)->avahi_domain = g_strdup (service->domain); -+ GTK_PRINTER_CUPS (printer)->hostname = g_strdup (service->host); -+ GTK_PRINTER_CUPS (printer)->port = service->port; -+ GTK_PRINTER_CUPS (printer)->state = info->state; -+ GTK_PRINTER_CUPS (printer)->ipp_version_major = info->ipp_version_major; -+ GTK_PRINTER_CUPS (printer)->ipp_version_minor = info->ipp_version_minor; -+ GTK_PRINTER_CUPS (printer)->supports_copies = info->supports_copies; -+ GTK_PRINTER_CUPS (printer)->supports_collate = info->supports_collate; -+ GTK_PRINTER_CUPS (printer)->supports_number_up = info->supports_number_up; -+ status_changed = gtk_printer_set_job_count (printer, info->job_count); -+ status_changed |= gtk_printer_set_location (printer, info->location); -+ status_changed |= gtk_printer_set_description (printer, info->description); -+ status_changed |= gtk_printer_set_state_message (printer, info->state_msg); -+ status_changed |= gtk_printer_set_is_accepting_jobs (printer, info->is_accepting_jobs); -+ -+ set_printer_icon_name_from_info (printer, info); -+ -+ if (gtk_printer_is_new (printer)) -+ { -+ g_signal_emit_by_name (backend, "printer-added", printer); -+ gtk_printer_set_is_new (printer, FALSE); -+ } -+ -+ 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); -+ } -+ } -+ -+done: -+ if (list_has_changed) -+ g_signal_emit_by_name (backend, "printer-list-changed"); -+ -+ if (!cups_backend->got_default_printer && -+ gtk_print_backend_printer_list_is_done (backend) && -+ cups_backend->avahi_default_printer != NULL) -+ { -+ set_default_printer (cups_backend, cups_backend->avahi_default_printer); -+ } -+ -+ g_slice_free (PrinterSetupInfo, info); -+ -+ gdk_threads_leave (); -+} -+ -+static void -+cups_request_avahi_printer_info (const gchar *printer_uri, -+ const gchar *host, -+ gint port, -+ const gchar *name, -+ const gchar *type, -+ const gchar *domain, -+ GtkPrintBackendCups *backend) -+{ -+ GtkCupsRequest *request; -+ AvahiService *service; -+ http_t *http; -+ -+ http = httpConnect (host, port); -+ if (http) -+ { -+ service = (AvahiService *) g_new0 (AvahiService, 1); -+ service->name = g_strdup (name); -+ service->type = g_strdup (type); -+ service->domain = g_strdup (domain); -+ service->host = g_strdup (host); -+ service->port = port; -+ -+ request = gtk_cups_request_new_with_username (http, -+ GTK_CUPS_POST, -+ IPP_GET_PRINTER_ATTRIBUTES, -+ NULL, -+ NULL, -+ NULL, -+ backend->username); -+ -+ gtk_cups_request_set_ipp_version (request, 1, 1); -+ -+ gtk_cups_request_ipp_add_string (request, IPP_TAG_OPERATION, IPP_TAG_URI, -+ "printer-uri", NULL, printer_uri); -+ -+ gtk_cups_request_ipp_add_strings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, -+ "requested-attributes", G_N_ELEMENTS (printer_attrs), -+ NULL, printer_attrs); -+ -+ cups_request_execute (backend, -+ request, -+ (GtkPrintCupsResponseCallbackFunc) cups_request_avahi_printer_info_cb, -+ service, -+ (GDestroyNotify) avahi_service_free); -+ } -+} -+ -+typedef struct -+{ -+ gchar *printer_uri; -+ gchar *host; -+ gint port; -+ gchar *name; -+ gchar *type; -+ gchar *domain; -+ GtkPrintBackendCups *backend; -+} AvahiConnectionTestData; -+ -+static void -+avahi_connection_test_cb (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ AvahiConnectionTestData *data = (AvahiConnectionTestData *) user_data; -+ GSocketConnection *connection; -+ -+ connection = g_socket_client_connect_to_host_finish (G_SOCKET_CLIENT (source_object), -+ res, -+ NULL); -+ g_object_unref (source_object); -+ -+ if (connection != NULL) -+ { -+ g_io_stream_close (G_IO_STREAM (connection), NULL, NULL); -+ g_object_unref (connection); -+ -+ cups_request_avahi_printer_info (data->printer_uri, -+ data->host, -+ data->port, -+ data->name, -+ data->type, -+ data->domain, -+ data->backend); -+ } -+ -+ g_free (data->printer_uri); -+ g_free (data->host); -+ g_free (data->name); -+ g_free (data->type); -+ g_free (data->domain); -+ g_free (data); -+} -+ -+static void -+avahi_service_resolver_cb (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ AvahiConnectionTestData *data; -+ GtkPrintBackendCups *backend; -+ const gchar *name; -+ const gchar *host; -+ const gchar *type; -+ const gchar *domain; -+ const gchar *address; -+ const gchar *protocol_string; -+ GVariant *output; -+ GVariant *txt; -+ GVariant *child; -+ guint32 flags; -+ guint16 port; -+ GError *error = NULL; -+ gchar *suffix = NULL; -+ gchar *tmp; -+ gint interface; -+ gint protocol; -+ gint aprotocol; -+ gint i, j; -+ -+ output = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), -+ res, -+ &error); -+ if (output) -+ { -+ backend = GTK_PRINT_BACKEND_CUPS (user_data); -+ -+ g_variant_get (output, "(ii&s&s&s&si&sq@aayu)", -+ &interface, -+ &protocol, -+ &name, -+ &type, -+ &domain, -+ &host, -+ &aprotocol, -+ &address, -+ &port, -+ &txt, -+ &flags); -+ -+ for (i = 0; i < g_variant_n_children (txt); i++) -+ { -+ child = g_variant_get_child_value (txt, i); -+ -+ tmp = g_new0 (gchar, g_variant_n_children (child) + 1); -+ for (j = 0; j < g_variant_n_children (child); j++) -+ { -+ tmp[j] = g_variant_get_byte (g_variant_get_child_value (child, j)); -+ } -+ -+ if (g_str_has_prefix (tmp, "rp=")) -+ { -+ suffix = g_strdup (tmp + 3); -+ g_free (tmp); -+ break; -+ } -+ -+ g_free (tmp); -+ } -+ -+ if (suffix) -+ { -+ if (g_strcmp0 (type, "_ipp._tcp") == 0) -+ protocol_string = "ipp"; -+ else -+ protocol_string = "ipps"; -+ -+ data = g_new0 (AvahiConnectionTestData, 1); -+ -+ if (aprotocol == AVAHI_PROTO_INET6) -+ data->printer_uri = g_strdup_printf ("%s://[%s]:%u/%s", protocol_string, address, port, suffix); -+ else -+ data->printer_uri = g_strdup_printf ("%s://%s:%u/%s", protocol_string, address, port, suffix); -+ -+ data->host = g_strdup (address); -+ data->port = port; -+ data->name = g_strdup (name); -+ data->type = g_strdup (type); -+ data->domain = g_strdup (domain); -+ data->backend = backend; -+ -+ /* It can happen that the address is not reachable */ -+ g_socket_client_connect_to_host_async (g_socket_client_new (), -+ address, -+ port, -+ backend->avahi_cancellable, -+ avahi_connection_test_cb, -+ data); -+ g_free (suffix); -+ } -+ -+ g_variant_unref (output); -+ } -+ else -+ { -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ g_warning ("%s", error->message); -+ g_error_free (error); -+ } -+} -+ -+static void -+avahi_service_browser_signal_handler (GDBusConnection *connection, -+ const gchar *sender_name, -+ const gchar *object_path, -+ const gchar *interface_name, -+ const gchar *signal_name, -+ GVariant *parameters, -+ gpointer user_data) -+{ -+ GtkPrintBackendCups *backend = GTK_PRINT_BACKEND_CUPS (user_data); -+ gchar *name; -+ gchar *type; -+ gchar *domain; -+ guint flags; -+ gint interface; -+ gint protocol; -+ -+ if (g_strcmp0 (signal_name, "ItemNew") == 0) -+ { -+ g_variant_get (parameters, "(ii&s&s&su)", -+ &interface, -+ &protocol, -+ &name, -+ &type, -+ &domain, -+ &flags); -+ -+ if (g_strcmp0 (type, "_ipp._tcp") == 0 || -+ g_strcmp0 (type, "_ipps._tcp") == 0) -+ { -+ g_dbus_connection_call (backend->dbus_connection, -+ AVAHI_BUS, -+ "/", -+ AVAHI_SERVER_IFACE, -+ "ResolveService", -+ g_variant_new ("(iisssiu)", -+ interface, -+ protocol, -+ name, -+ type, -+ domain, -+ AVAHI_PROTO_UNSPEC, -+ 0), -+ G_VARIANT_TYPE ("(iissssisqaayu)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ backend->avahi_cancellable, -+ avahi_service_resolver_cb, -+ user_data); -+ } -+ } -+ else if (g_strcmp0 (signal_name, "ItemRemove") == 0) -+ { -+ GtkPrinterCups *printer; -+ GList *list; -+ GList *iter; -+ -+ g_variant_get (parameters, "(ii&s&s&su)", -+ &interface, -+ &protocol, -+ &name, -+ &type, -+ &domain, -+ &flags); -+ -+ if (g_strcmp0 (type, "_ipp._tcp") == 0 || -+ g_strcmp0 (type, "_ipps._tcp") == 0) -+ { -+ list = gtk_print_backend_get_printer_list (GTK_PRINT_BACKEND (backend)); -+ for (iter = list; iter; iter = iter->next) -+ { -+ printer = GTK_PRINTER_CUPS (iter->data); -+ if (g_strcmp0 (printer->avahi_name, name) == 0 && -+ g_strcmp0 (printer->avahi_type, type) == 0 && -+ g_strcmp0 (printer->avahi_domain, domain) == 0) -+ { -+ if (g_strcmp0 (gtk_printer_get_name (GTK_PRINTER (printer)), -+ backend->avahi_default_printer) == 0) -+ g_clear_pointer (&backend->avahi_default_printer, g_free); -+ -+ g_signal_emit_by_name (backend, "printer-removed", printer); -+ gtk_print_backend_remove_printer (GTK_PRINT_BACKEND (backend), -+ GTK_PRINTER (printer)); -+ g_signal_emit_by_name (backend, "printer-list-changed"); -+ break; -+ } -+ } -+ } -+ -+ g_list_free (list); -+ } -+} -+ -+static void -+avahi_service_browser_new_cb (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ GtkPrintBackendCups *cups_backend; -+ GVariant *output; -+ GError *error = NULL; -+ gint i; -+ -+ output = g_dbus_connection_call_finish (G_DBUS_CONNECTION (source_object), -+ res, -+ &error); -+ if (output) -+ { -+ cups_backend = GTK_PRINT_BACKEND_CUPS (user_data); -+ i = cups_backend->avahi_service_browser_paths[0] ? 1 : 0; -+ -+ g_variant_get (output, "(o)", &cups_backend->avahi_service_browser_paths[i]); -+ -+ cups_backend->avahi_service_browser_subscription_ids[i] = -+ g_dbus_connection_signal_subscribe (cups_backend->dbus_connection, -+ NULL, -+ AVAHI_SERVICE_BROWSER_IFACE, -+ NULL, -+ cups_backend->avahi_service_browser_paths[i], -+ NULL, -+ G_DBUS_SIGNAL_FLAGS_NONE, -+ avahi_service_browser_signal_handler, -+ user_data, -+ NULL); -+ -+ /* -+ * The general subscription for all service browsers is not needed -+ * now because we are already subscribed to service browsers -+ * specific to _ipp._tcp and _ipps._tcp services. -+ */ -+ if (cups_backend->avahi_service_browser_paths[0] && -+ cups_backend->avahi_service_browser_paths[1] && -+ cups_backend->avahi_service_browser_subscription_id > 0) -+ { -+ g_dbus_connection_signal_unsubscribe (cups_backend->dbus_connection, -+ cups_backend->avahi_service_browser_subscription_id); -+ cups_backend->avahi_service_browser_subscription_id = 0; -+ } -+ -+ g_variant_unref (output); -+ } -+ else -+ { -+ /* -+ * The creation of ServiceBrowser fails with G_IO_ERROR_DBUS_ERROR -+ * if Avahi is disabled. -+ */ -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_DBUS_ERROR) && -+ !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ g_warning ("%s", error->message); -+ g_error_free (error); -+ } -+} -+ -+static void -+avahi_create_browsers (GObject *source_object, -+ GAsyncResult *res, -+ gpointer user_data) -+{ -+ GDBusConnection *dbus_connection; -+ GtkPrintBackendCups *cups_backend; -+ GError *error = NULL; -+ -+ dbus_connection = g_bus_get_finish (res, &error); -+ if (!dbus_connection) -+ { -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ g_warning ("Couldn't connect to D-Bus system bus, %s", error->message); -+ -+ g_error_free (error); -+ return; -+ } -+ -+ cups_backend = GTK_PRINT_BACKEND_CUPS (user_data); -+ cups_backend->dbus_connection = dbus_connection; -+ -+ /* -+ * We need to subscribe to signals of service browser before -+ * we actually create it because it starts to emit them right -+ * after its creation. -+ */ -+ cups_backend->avahi_service_browser_subscription_id = -+ g_dbus_connection_signal_subscribe (cups_backend->dbus_connection, -+ NULL, -+ AVAHI_SERVICE_BROWSER_IFACE, -+ NULL, -+ NULL, -+ NULL, -+ G_DBUS_SIGNAL_FLAGS_NONE, -+ avahi_service_browser_signal_handler, -+ cups_backend, -+ NULL); -+ -+ /* -+ * Create service browsers for _ipp._tcp and _ipps._tcp services. -+ */ -+ g_dbus_connection_call (cups_backend->dbus_connection, -+ AVAHI_BUS, -+ "/", -+ AVAHI_SERVER_IFACE, -+ "ServiceBrowserNew", -+ g_variant_new ("(iissu)", -+ AVAHI_IF_UNSPEC, -+ AVAHI_PROTO_UNSPEC, -+ "_ipp._tcp", -+ "", -+ 0), -+ G_VARIANT_TYPE ("(o)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cups_backend->avahi_cancellable, -+ avahi_service_browser_new_cb, -+ cups_backend); -+ -+ g_dbus_connection_call (cups_backend->dbus_connection, -+ AVAHI_BUS, -+ "/", -+ AVAHI_SERVER_IFACE, -+ "ServiceBrowserNew", -+ g_variant_new ("(iissu)", -+ AVAHI_IF_UNSPEC, -+ AVAHI_PROTO_UNSPEC, -+ "_ipps._tcp", -+ "", -+ 0), -+ G_VARIANT_TYPE ("(o)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cups_backend->avahi_cancellable, -+ avahi_service_browser_new_cb, -+ cups_backend); -+} -+ -+static void -+avahi_request_printer_list (GtkPrintBackendCups *cups_backend) -+{ -+ cups_backend->avahi_cancellable = g_cancellable_new (); -+ g_bus_get (G_BUS_TYPE_SYSTEM, cups_backend->avahi_cancellable, avahi_create_browsers, cups_backend); -+} -+#endif -+ -+static void - cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, - GtkCupsResult *result, - gpointer user_data) -@@ -1981,6 +2993,7 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, - gboolean list_has_changed; - GList *removed_printer_checklist; - gchar *remote_default_printer = NULL; -+ GList *iter; - - GDK_THREADS_ENTER (); - -@@ -2025,7 +3038,6 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, - GtkPrinter *printer; - gboolean status_changed = FALSE; - GList *node; -- gint i; - PrinterSetupInfo *info = g_slice_new0 (PrinterSetupInfo); - - /* Skip leading attributes until we hit a printer... -@@ -2046,7 +3058,6 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, - GtkPrinter *printer; - gboolean status_changed = FALSE; - GList *node; -- gint i; - PrinterSetupInfo *info = g_slice_new0 (PrinterSetupInfo); - - /* Skip leading attributes until we hit a printer... -@@ -2137,88 +3148,22 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, - #endif - - GTK_PRINTER_CUPS (printer)->state = info->state; -+ GTK_PRINTER_CUPS (printer)->ipp_version_major = info->ipp_version_major; -+ GTK_PRINTER_CUPS (printer)->ipp_version_minor = info->ipp_version_minor; -+ GTK_PRINTER_CUPS (printer)->supports_copies = info->supports_copies; -+ GTK_PRINTER_CUPS (printer)->supports_collate = info->supports_collate; -+ GTK_PRINTER_CUPS (printer)->supports_number_up = info->supports_number_up; - status_changed = gtk_printer_set_job_count (printer, info->job_count); - status_changed |= gtk_printer_set_location (printer, info->location); - status_changed |= gtk_printer_set_description (printer, - info->description); - -- if (info->state_msg != NULL && strlen (info->state_msg) == 0) -- { -- gchar *tmp_msg2 = NULL; -- if (info->is_paused && !info->is_accepting_jobs) -- /* Translators: this is a printer status. */ -- tmp_msg2 = g_strdup ( N_("Paused ; Rejecting Jobs")); -- if (info->is_paused && info->is_accepting_jobs) -- /* Translators: this is a printer status. */ -- tmp_msg2 = g_strdup ( N_("Paused")); -- if (!info->is_paused && !info->is_accepting_jobs) -- /* Translators: this is a printer status. */ -- tmp_msg2 = g_strdup ( N_("Rejecting Jobs")); -- -- if (tmp_msg2 != NULL) -- { -- g_free (info->state_msg); -- info->state_msg = tmp_msg2; -- } -- } -- -- /* Set description of the reason and combine it with printer-state-message. */ -- if ( (info->reason_msg != NULL)) -- { -- gchar *reason_msg_desc = NULL; -- gboolean found = FALSE; -- -- for (i = 0; i < G_N_ELEMENTS (printer_messages); i++) -- { -- if (strncmp (info->reason_msg, printer_messages[i], -- strlen (printer_messages[i])) == 0) -- { -- reason_msg_desc = g_strdup_printf (printer_strings[i], -- info->printer_name); -- found = TRUE; -- break; -- } -- } -- -- if (!found) -- info->reason_level = GTK_PRINTER_STATE_LEVEL_NONE; -- -- if (info->reason_level >= GTK_PRINTER_STATE_LEVEL_WARNING) -- { -- if (strlen (info->state_msg) == 0) -- { -- g_free (info->state_msg); -- info->state_msg = reason_msg_desc; -- reason_msg_desc = NULL; -- } -- else -- { -- gchar *tmp_msg = NULL; -- tmp_msg = g_strjoin (" ; ", info->state_msg, -- reason_msg_desc, NULL); -- g_free (info->state_msg); -- info->state_msg = tmp_msg; -- } -- } -- if (reason_msg_desc != NULL) -- g_free (reason_msg_desc); -- } -+ set_info_state_message (info); - - status_changed |= gtk_printer_set_state_message (printer, info->state_msg); - status_changed |= gtk_printer_set_is_accepting_jobs (printer, info->is_accepting_jobs); - -- -- -- /* Set printer icon according to importance -- (none, report, warning, error - report is omitted). */ -- if (info->reason_level == 3) -- gtk_printer_set_icon_name (printer, "gtk-print-error"); -- else if (info->reason_level == 2) -- gtk_printer_set_icon_name (printer, "gtk-print-warning"); -- else if (gtk_printer_is_paused (printer)) -- gtk_printer_set_icon_name (printer, "gtk-print-paused"); -- else -- gtk_printer_set_icon_name (printer, "gtk-print"); -+ set_printer_icon_name_from_info (printer, info); - - if (status_changed) - g_signal_emit_by_name (GTK_PRINT_BACKEND (backend), -@@ -2237,9 +3182,18 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, - as inactive if it is in the list, emitting a printer_removed signal */ - if (removed_printer_checklist != NULL) - { -- g_list_foreach (removed_printer_checklist, (GFunc) mark_printer_inactive, backend); -+ for (iter = removed_printer_checklist; iter; iter = iter->next) -+ { -+#ifdef HAVE_CUPS_API_1_6 -+ if (!GTK_PRINTER_CUPS (iter->data)->avahi_browsed) -+#endif -+ { -+ mark_printer_inactive (GTK_PRINTER (iter->data), backend); -+ list_has_changed = TRUE; -+ } -+ } -+ - g_list_free (removed_printer_checklist); -- list_has_changed = TRUE; - } - - done: -@@ -2250,23 +3204,16 @@ done: - - if (!cups_backend->got_default_printer && remote_default_printer != NULL) - { -- cups_backend->default_printer = g_strdup (remote_default_printer); -- cups_backend->got_default_printer = TRUE; -+ set_default_printer (cups_backend, remote_default_printer); - g_free (remote_default_printer); -+ } - -- if (cups_backend->default_printer != NULL) -- { -- GtkPrinter *default_printer = NULL; -- default_printer = gtk_print_backend_find_printer (GTK_PRINT_BACKEND (cups_backend), -- cups_backend->default_printer); -- if (default_printer != NULL) -- { -- gtk_printer_set_is_default (default_printer, TRUE); -- g_signal_emit_by_name (GTK_PRINT_BACKEND (cups_backend), -- "printer-status-changed", default_printer); -- } -- } -+#ifdef HAVE_CUPS_API_1_6 -+ if (!cups_backend->got_default_printer && cups_backend->avahi_default_printer != NULL) -+ { -+ set_default_printer (cups_backend, cups_backend->avahi_default_printer); - } -+#endif - - GDK_THREADS_LEAVE (); - } -@@ -2292,23 +3239,6 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend) - { - GtkCupsConnectionState state; - GtkCupsRequest *request; -- static const char * const pattrs[] = /* Attributes we're interested in */ -- { -- "printer-name", -- "printer-uri-supported", -- "member-uris", -- "printer-location", -- "printer-info", -- "printer-state-message", -- "printer-state-reasons", -- "printer-state", -- "queued-job-count", -- "printer-is-accepting-jobs", -- "job-sheets-supported", -- "job-sheets-default", -- "printer-type", -- "auth-info-required" -- }; - - if (cups_backend->reading_ppds > 0 || cups_backend->list_printers_pending) - return TRUE; -@@ -2345,8 +3275,8 @@ cups_request_printer_list (GtkPrintBackendCups *cups_backend) - cups_backend->username); - - gtk_cups_request_ipp_add_strings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, -- "requested-attributes", G_N_ELEMENTS (pattrs), -- NULL, pattrs); -+ "requested-attributes", G_N_ELEMENTS (printer_attrs), -+ NULL, printer_attrs); - - cups_request_execute (cups_backend, - request, -@@ -2373,6 +3303,10 @@ cups_get_printer_list (GtkPrintBackend *backend) - cups_backend->list_printers_poll = gdk_threads_add_timeout (50, - (GSourceFunc) cups_request_printer_list, - backend); -+ -+#ifdef HAVE_CUPS_API_1_6 -+ avahi_request_printer_list (cups_backend); -+#endif - } - } - -@@ -2414,10 +3348,15 @@ cups_request_ppd_cb (GtkPrintBackendCups *print_backend, - { - gboolean success = FALSE; - -- /* if we get a 404 then it is just a raw printer without a ppd -- and not an error */ -- if ((gtk_cups_result_get_error_type (result) == GTK_CUPS_ERROR_HTTP) && -- (gtk_cups_result_get_error_status (result) == HTTP_NOT_FOUND)) -+ /* If we get a 404 then it is just a raw printer without a ppd -+ and not an error. Standalone Avahi printers also don't have -+ PPD files. */ -+ if (((gtk_cups_result_get_error_type (result) == GTK_CUPS_ERROR_HTTP) && -+ (gtk_cups_result_get_error_status (result) == HTTP_NOT_FOUND)) -+#ifdef HAVE_CUPS_API_1_6 -+ || GTK_PRINTER_CUPS (printer)->avahi_browsed -+#endif -+ ) - { - gtk_printer_set_has_details (printer, TRUE); - success = TRUE; -@@ -2550,6 +3489,10 @@ cups_request_ppd (GtkPrinter *printer) - resource, - GTK_PRINT_BACKEND_CUPS (print_backend)->username); - -+ gtk_cups_request_set_ipp_version (request, -+ cups_printer->ipp_version_major, -+ cups_printer->ipp_version_minor); -+ - GTK_NOTE (PRINTING, - g_print ("CUPS Backend: Requesting resource %s to be written to temp file %s\n", resource, ppd_filename)); - -@@ -4501,11 +5444,10 @@ cups_printer_get_settings_from_options (GtkPrinter *printer, - data.settings = settings; - data.ppd_file = gtk_printer_cups_get_ppd (GTK_PRINTER_CUPS (printer)); - -+ gtk_printer_option_set_foreach (options, foreach_option_get_settings, &data); - if (data.ppd_file != NULL) - { - GtkPrinterOption *cover_before, *cover_after; -- -- gtk_printer_option_set_foreach (options, foreach_option_get_settings, &data); - - cover_before = gtk_printer_option_set_lookup (options, "gtk-cover-before"); - cover_after = gtk_printer_option_set_lookup (options, "gtk-cover-after"); -@@ -4548,7 +5490,9 @@ cups_printer_prepare_for_print (GtkPrinter *printer, - GtkPaperSize *paper_size; - const char *ppd_paper_name; - double scale; -+ GtkPrintCapabilities capabilities; - -+ capabilities = cups_printer_get_capabilities (printer); - print_job->print_pages = gtk_print_settings_get_print_pages (settings); - print_job->page_ranges = NULL; - print_job->num_page_ranges = 0; -@@ -4558,18 +5502,39 @@ cups_printer_prepare_for_print (GtkPrinter *printer, - gtk_print_settings_get_page_ranges (settings, - &print_job->num_page_ranges); - -- if (gtk_print_settings_get_collate (settings)) -- gtk_print_settings_set (settings, "cups-Collate", "True"); -- print_job->collate = FALSE; -+ if (capabilities & GTK_PRINT_CAPABILITY_COLLATE) -+ { -+ if (gtk_print_settings_get_collate (settings)) -+ gtk_print_settings_set (settings, "cups-Collate", "True"); -+ print_job->collate = FALSE; -+ } -+ else -+ { -+ print_job->collate = gtk_print_settings_get_collate (settings); -+ } - -- if (gtk_print_settings_get_reverse (settings)) -- gtk_print_settings_set (settings, "cups-OutputOrder", "Reverse"); -- print_job->reverse = FALSE; -+ if (capabilities & GTK_PRINT_CAPABILITY_REVERSE) -+ { -+ if (gtk_print_settings_get_reverse (settings)) -+ gtk_print_settings_set (settings, "cups-OutputOrder", "Reverse"); -+ print_job->reverse = FALSE; -+ } -+ else -+ { -+ print_job->reverse = gtk_print_settings_get_reverse (settings); -+ } - -- if (gtk_print_settings_get_n_copies (settings) > 1) -- gtk_print_settings_set_int (settings, "cups-copies", -- gtk_print_settings_get_n_copies (settings)); -- print_job->num_copies = 1; -+ if (capabilities & GTK_PRINT_CAPABILITY_COPIES) -+ { -+ if (gtk_print_settings_get_n_copies (settings) > 1) -+ gtk_print_settings_set_int (settings, "cups-copies", -+ gtk_print_settings_get_n_copies (settings)); -+ print_job->num_copies = 1; -+ } -+ else -+ { -+ print_job->num_copies = gtk_print_settings_get_n_copies (settings); -+ } - - scale = gtk_print_settings_get_scale (settings); - print_job->scale = 1.0; -@@ -4631,6 +5596,12 @@ cups_printer_prepare_for_print (GtkPrinter *printer, - enum_value = g_enum_get_value (enum_class, layout); - gtk_print_settings_set (settings, "cups-number-up-layout", enum_value->value_nick); - g_type_class_unref (enum_class); -+ -+ if (!(capabilities & GTK_PRINT_CAPABILITY_NUMBER_UP)) -+ { -+ print_job->number_up = gtk_print_settings_get_number_up (settings); -+ print_job->number_up_layout = gtk_print_settings_get_number_up_layout (settings); -+ } - } - - print_job->rotate_to_orientation = TRUE; -@@ -4750,12 +5721,31 @@ cups_printer_get_hard_margins (GtkPrinter *printer, - static GtkPrintCapabilities - cups_printer_get_capabilities (GtkPrinter *printer) - { -- return -- GTK_PRINT_CAPABILITY_COPIES | -- GTK_PRINT_CAPABILITY_COLLATE | -- GTK_PRINT_CAPABILITY_REVERSE | -+ GtkPrintCapabilities capabilities = 0; -+ GtkPrinterCups *cups_printer = GTK_PRINTER_CUPS (printer); -+ -+ if (gtk_printer_cups_get_ppd (cups_printer)) -+ { -+ capabilities = GTK_PRINT_CAPABILITY_REVERSE; -+ } -+ -+ if (cups_printer->supports_copies) -+ { -+ capabilities |= GTK_PRINT_CAPABILITY_COPIES; -+ } -+ -+ if (cups_printer->supports_collate) -+ { -+ capabilities |= GTK_PRINT_CAPABILITY_COLLATE; -+ } -+ -+ if (cups_printer->supports_number_up) -+ { -+ capabilities |= GTK_PRINT_CAPABILITY_NUMBER_UP; - #if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 1 && CUPS_VERSION_PATCH >= 15) || (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR > 1) || CUPS_VERSION_MAJOR > 1 -- GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT | -+ capabilities |= GTK_PRINT_CAPABILITY_NUMBER_UP_LAYOUT; - #endif -- GTK_PRINT_CAPABILITY_NUMBER_UP; -+ } -+ -+ return capabilities; - } -diff --git a/modules/printbackends/cups/gtkprintercups.c b/modules/printbackends/cups/gtkprintercups.c -index 8b3f85c..f957558 100644 ---- a/modules/printbackends/cups/gtkprintercups.c -+++ b/modules/printbackends/cups/gtkprintercups.c -@@ -82,6 +82,17 @@ gtk_printer_cups_init (GtkPrinterCups *printer) - printer->get_remote_ppd_attempts = 0; - printer->remote_cups_connection_test = NULL; - printer->auth_info_required = NULL; -+#ifdef HAVE_CUPS_API_1_6 -+ printer->avahi_browsed = FALSE; -+ printer->avahi_name = NULL; -+ printer->avahi_type = NULL; -+ printer->avahi_domain = NULL; -+#endif -+ printer->ipp_version_major = 1; -+ printer->ipp_version_minor = 1; -+ printer->supports_copies = FALSE; -+ printer->supports_collate = FALSE; -+ printer->supports_number_up = FALSE; - } - - static void -@@ -101,6 +112,12 @@ gtk_printer_cups_finalize (GObject *object) - g_free (printer->default_cover_after); - g_strfreev (printer->auth_info_required); - -+#ifdef HAVE_CUPS_API_1_6 -+ g_free (printer->avahi_name); -+ g_free (printer->avahi_type); -+ g_free (printer->avahi_domain); -+#endif -+ - if (printer->ppd_file) - ppdClose (printer->ppd_file); - -@@ -128,6 +145,7 @@ gtk_printer_cups_new (const char *name, - { - GObject *result; - gboolean accepts_pdf; -+ GtkPrinterCups *printer; - - #if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 2) || CUPS_VERSION_MAJOR > 1 - accepts_pdf = TRUE; -@@ -142,7 +160,16 @@ gtk_printer_cups_new (const char *name, - "accepts-pdf", accepts_pdf, - NULL); - -- return (GtkPrinterCups *) result; -+ printer = GTK_PRINTER_CUPS (result); -+ -+ /* -+ * IPP version 1.1 has to be supported -+ * by all implementations according to rfc 2911 -+ */ -+ printer->ipp_version_major = 1; -+ printer->ipp_version_minor = 1; -+ -+ return printer; - } - - ppd_file_t * -diff --git a/modules/printbackends/cups/gtkprintercups.h b/modules/printbackends/cups/gtkprintercups.h -index 6868232..d10bd7e 100644 ---- a/modules/printbackends/cups/gtkprintercups.h -+++ b/modules/printbackends/cups/gtkprintercups.h -@@ -62,6 +62,17 @@ struct _GtkPrinterCups - guint get_remote_ppd_poll; - gint get_remote_ppd_attempts; - GtkCupsConnectionTest *remote_cups_connection_test; -+#ifdef HAVE_CUPS_API_1_6 -+ gboolean avahi_browsed; -+ gchar *avahi_name; -+ gchar *avahi_type; -+ gchar *avahi_domain; -+#endif -+ guchar ipp_version_major; -+ guchar ipp_version_minor; -+ gboolean supports_copies; -+ gboolean supports_collate; -+ gboolean supports_number_up; - }; - - struct _GtkPrinterCupsClass --- -1.8.2.1 - diff --git a/0a0fd5af99f2ae9b0f8cc6b943b98b7be43ed723.patch b/0a0fd5af99f2ae9b0f8cc6b943b98b7be43ed723.patch deleted file mode 100644 index b5351c6..0000000 --- a/0a0fd5af99f2ae9b0f8cc6b943b98b7be43ed723.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 0a0fd5af99f2ae9b0f8cc6b943b98b7be43ed723 Mon Sep 17 00:00:00 2001 -From: Michael Natterer -Date: Wed, 02 Nov 2011 19:27:39 +0000 -Subject: Bug 662633 - Scheduled transaction editor crashes with gtk+-2.24.7 - -Fix commit a516d2359c9eac84bfa4682a70a62315adedb1d6: check if -priv->arrow_button exists in forall(). ---- -diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c -index edeab88..b2c4b15 100644 ---- a/gtk/gtktoolbar.c -+++ b/gtk/gtktoolbar.c -@@ -2532,7 +2532,7 @@ gtk_toolbar_forall (GtkContainer *container, - list = next; - } - -- if (include_internals) -+ if (include_internals && priv->arrow_button) - callback (priv->arrow_button, callback_data); - } - --- -cgit v0.9.0.2 diff --git a/allow-fallback-for-immodules.patch b/allow-fallback-for-immodules.patch deleted file mode 100644 index 147975e..0000000 --- a/allow-fallback-for-immodules.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 0b59fbfb9d677b77b392c0c6d327ddecd7978d89 Mon Sep 17 00:00:00 2001 -From: Matthias Clasen -Date: Tue, 5 Jun 2012 17:03:42 -0400 -Subject: [PATCH] Allow fallback for input method modules - -Accept a :-separated list of module names in GTK_IM_MODULE and -the corresponding setting, to deal a bit better with broken -situations. - -https://bugzilla.gnome.org/show_bug.cgi?id=603559 - -Patch by Akira Tagoh, backported from GTK+ 3. The backport -is required because GTK+ 2 and 3 are listening to the same env -vars and settings for immodules. ---- - docs/reference/gtk/running.sgml | 2 ++ - gtk/gtkimmodule.c | 49 +++++++++++++++++++++++++++------------ - gtk/gtksettings.c | 2 ++ - 3 files changed, 38 insertions(+), 15 deletions(-) - -diff --git a/docs/reference/gtk/running.sgml b/docs/reference/gtk/running.sgml -index 8371832..11fa0d1 100644 ---- a/docs/reference/gtk/running.sgml -+++ b/docs/reference/gtk/running.sgml -@@ -264,6 +264,8 @@ additional environment variables. - that enables XSETTINGS and has a value in - Gtk/IMModule, that will be used for the default - IM module. -+ This also can be a colon-separated list of input-methods, which -+ GTK+ will try in turn until it finds one available on the system. - - - -diff --git a/gtk/gtkimmodule.c b/gtk/gtkimmodule.c -index f1da875..f7baa03 100644 ---- a/gtk/gtkimmodule.c -+++ b/gtk/gtkimmodule.c -@@ -650,6 +650,26 @@ match_locale (const gchar *locale, - return 0; - } - -+static const gchar * -+lookup_immodule (gchar **immodules_list) -+{ -+ while (immodules_list && *immodules_list) -+ { -+ if (g_strcmp0 (*immodules_list, SIMPLE_ID) == 0) -+ return SIMPLE_ID; -+ else -+ { -+ GtkIMModule *module; -+ module = g_hash_table_lookup (contexts_hash, *immodules_list); -+ if (module) -+ return module->contexts[0]->context_id; -+ } -+ immodules_list++; -+ } -+ -+ return NULL; -+} -+ - /** - * _gtk_im_module_get_default_context_id: - * @client_window: a window -@@ -666,7 +686,7 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window) - const gchar *context_id = NULL; - gint best_goodness = 0; - gint i; -- gchar *tmp_locale, *tmp; -+ gchar *tmp_locale, *tmp, **immodules; - const gchar *envvar; - GdkScreen *screen; - GtkSettings *settings; -@@ -674,11 +694,16 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window) - if (!contexts_hash) - gtk_im_module_initialize (); - -- envvar = g_getenv ("GTK_IM_MODULE"); -- if (envvar && -- (strcmp (envvar, SIMPLE_ID) == 0 || -- g_hash_table_lookup (contexts_hash, envvar))) -- return envvar; -+ envvar = g_getenv("GTK_IM_MODULE"); -+ if (envvar) -+ { -+ immodules = g_strsplit(envvar, ":", 0); -+ context_id = lookup_immodule(immodules); -+ g_strfreev(immodules); -+ -+ if (context_id) -+ return context_id; -+ } - - /* Check if the certain immodule is set in XSETTINGS. - */ -@@ -689,15 +714,9 @@ _gtk_im_module_get_default_context_id (GdkWindow *client_window) - g_object_get (G_OBJECT (settings), "gtk-im-module", &tmp, NULL); - if (tmp) - { -- if (strcmp (tmp, SIMPLE_ID) == 0) -- context_id = SIMPLE_ID; -- else -- { -- GtkIMModule *module; -- module = g_hash_table_lookup (contexts_hash, tmp); -- if (module) -- context_id = module->contexts[0]->context_id; -- } -+ immodules = g_strsplit(tmp, ":", 0); -+ context_id = lookup_immodule(immodules); -+ g_strfreev(immodules); - g_free (tmp); - - if (context_id) -diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c -index f83a54b..c5f77fe 100644 ---- a/gtk/gtksettings.c -+++ b/gtk/gtksettings.c -@@ -850,6 +850,8 @@ gtk_settings_class_init (GtkSettingsClass *class) - * Which IM (input method) module should be used by default. This is the - * input method that will be used if the user has not explicitly chosen - * another input method from the IM context menu. -+ * This also can be a colon-separated list of input methods, which GTK+ -+ * will try in turn until it finds one available on the system. - * - * See #GtkIMContext and see the #GtkSettings:gtk-show-input-method-menu property. - */ --- -1.7.10.2 - diff --git a/compose-sequences.patch b/compose-sequences.patch deleted file mode 100644 index dffd1c9..0000000 --- a/compose-sequences.patch +++ /dev/null @@ -1,271 +0,0 @@ -From 4eb82ed9624da58cff9dd6c348b12d35967ae3c3 Mon Sep 17 00:00:00 2001 -From: Peter Hutterer -Date: Thu, 22 Oct 2009 15:25:19 +1000 -Subject: [PATCH] Update compose sequences - -Signed-off-by: Peter Hutterer ---- - gtk/gtkimcontextsimple.c | 2 +- - gtk/gtkimcontextsimpleseqs.h | 91 +++++++++++++++++++++++++++-------------- - 2 files changed, 61 insertions(+), 32 deletions(-) - -diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c -index 62bab7c..f36dcf5 100644 ---- a/gtk/gtkimcontextsimple.c -+++ b/gtk/gtkimcontextsimple.c -@@ -61,7 +61,7 @@ struct _GtkComposeTableCompact - static const GtkComposeTableCompact gtk_compose_table_compact = { - gtk_compose_seqs_compact, - 5, -- 23, -+ 24, - 6 - }; - -diff --git a/gtk/gtkimcontextsimpleseqs.h b/gtk/gtkimcontextsimpleseqs.h -index 9e3fc29..131b3db 100644 ---- a/gtk/gtkimcontextsimpleseqs.h -+++ b/gtk/gtkimcontextsimpleseqs.h -@@ -18,10 +18,9 @@ - */ - - /* -- * File auto-generated from script found at gtk/compose-parse.py, with the --gtk parameter, -+ * File auto-generated from script found at http://bugzilla.gnome.org/show_bug.cgi?id=321896 - * using the input files - * Input : http://gitweb.freedesktop.org/?p=xorg/lib/libX11.git;a=blob_plain;f=nls/en_US.UTF-8/Compose.pre -- * Input : http://svn.gnome.org/viewcvs/gtk%2B/trunk/gtk/gtk-compose-lookaside.txt - * Input : http://www.cl.cam.ac.uk/~mgk25/ucs/keysyms.txt - * Input : http://www.unicode.org/Public/UNIDATA/UnicodeData.txt - * -@@ -68,29 +67,30 @@ - */ - - static const guint16 gtk_compose_seqs_compact[] = { --GDK_dead_stroke, 138, 226, 235, 235, 235, --GDK_Greek_accentdieresis, 235, 239, 239, 239, 239, --GDK_dead_grave, 239, 299, 386, 598, 598, --GDK_dead_acute, 598, 664, 760, 1036, 1036, --GDK_dead_circumflex, 1036, 1176, 1176, 1376, 1376, --GDK_dead_tilde, 1376, 1458, 1521, 1661, 1661, --GDK_dead_macron, 1661, 1707, 1707, 1779, 1779, --GDK_dead_breve, 1779, 1833, 1833, 1857, 1857, --GDK_dead_abovedot, 1857, 1887, 1890, 1922, 1922, --GDK_dead_diaeresis, 1922, 2010, 2019, 2043, 2043, --GDK_dead_abovering, 2043, 2053, 2053, 2053, 2053, --GDK_dead_doubleacute, 2053, 2063, 2063, 2063, 2063, --GDK_dead_caron, 2063, 2089, 2089, 2097, 2097, --GDK_dead_cedilla, 2097, 2111, 2111, 2111, 2111, --GDK_dead_ogonek, 2111, 2121, 2121, 2121, 2121, --GDK_dead_iota, 2121, 2143, 2242, 2674, 3334, --GDK_dead_voiced_sound, 3334, 3380, 3380, 3380, 3380, --GDK_dead_semivoiced_sound, 3380, 3390, 3390, 3390, 3390, --GDK_dead_belowdot, 3390, 3400, 3400, 3416, 3416, --GDK_dead_hook, 3416, 3494, 3494, 3550, 3550, --GDK_dead_psili, 3550, 3578, 3578, 3578, 3578, --GDK_dead_dasia, 3578, 3610, 3610, 3610, 3610, --GDK_Multi_key, 3610, 3610, 9589, 13297, 15157, -+GDK_dead_stroke, 144, 232, 241, 241, 241, -+GDK_Greek_accentdieresis, 241, 245, 245, 245, 245, -+GDK_dead_grave, 245, 307, 394, 606, 606, -+GDK_dead_acute, 606, 674, 770, 1046, 1046, -+GDK_dead_circumflex, 1046, 1186, 1186, 1386, 1386, -+GDK_dead_tilde, 1386, 1470, 1533, 1673, 1673, -+GDK_dead_macron, 1673, 1719, 1719, 1791, 1791, -+GDK_dead_breve, 1791, 1845, 1845, 1869, 1869, -+GDK_dead_abovedot, 1869, 1899, 1902, 1934, 1934, -+GDK_dead_diaeresis, 1934, 2022, 2031, 2055, 2055, -+GDK_dead_abovering, 2055, 2065, 2065, 2065, 2065, -+GDK_dead_doubleacute, 2065, 2075, 2075, 2075, 2075, -+GDK_dead_caron, 2075, 2121, 2121, 2129, 2129, -+GDK_dead_cedilla, 2129, 2143, 2143, 2143, 2143, -+GDK_dead_ogonek, 2143, 2153, 2153, 2153, 2153, -+GDK_dead_iota, 2153, 2175, 2274, 2706, 3366, -+GDK_dead_voiced_sound, 3366, 3412, 3412, 3412, 3412, -+GDK_dead_semivoiced_sound, 3412, 3422, 3422, 3422, 3422, -+GDK_dead_belowdot, 3422, 3438, 3438, 3454, 3454, -+GDK_dead_hook, 3454, 3532, 3532, 3588, 3588, -+GDK_dead_horn, 3588, 3598, 3598, 3598, 3598, -+GDK_dead_psili, 3598, 3626, 3626, 3626, 3626, -+GDK_dead_dasia, 3626, 3658, 3658, 3658, 3658, -+GDK_Multi_key, 3658, 3658, 9658, 13366, 15231, - GDK_space, 0x002F, - GDK_2, 0x01BB, - GDK_A, 0x023A, -@@ -143,6 +143,7 @@ GDK_Greek_upsilon, 0x03B0, - GDK_space, 0x0060, - GDK_V, 0x01DB, - GDK_v, 0x01DC, -+GDK_nobreakspace, 0x0300, - GDK_Abreve, 0x1EB0, - GDK_abreve, 0x1EB1, - GDK_Emacron, 0x1E14, -@@ -255,6 +256,7 @@ GDK_Multi_key, GDK_macron, GDK_o, 0x1E51, - GDK_space, 0x0027, - GDK_V, 0x01D7, - GDK_v, 0x01D8, -+GDK_nobreakspace, 0x0301, - GDK_Abreve, 0x1EAE, - GDK_abreve, 0x1EAF, - GDK_Emacron, 0x1E16, -@@ -510,6 +512,7 @@ GDK_space, 0x007E, - GDK_less, 0x2272, - GDK_equal, 0x2243, - GDK_greater, 0x2273, -+GDK_nobreakspace, 0x0303, - GDK_Oacute, 0x1E4C, - GDK_Odiaeresis, 0x1E4E, - GDK_Uacute, 0x1E78, -@@ -769,6 +772,16 @@ GDK_parenleft, 0x208D, - GDK_parenright, 0x208E, - GDK_plus, 0x208A, - GDK_minus, 0x208B, -+GDK_0, 0x2080, -+GDK_1, 0x2081, -+GDK_2, 0x2082, -+GDK_3, 0x2083, -+GDK_4, 0x2084, -+GDK_5, 0x2085, -+GDK_6, 0x2086, -+GDK_7, 0x2087, -+GDK_8, 0x2088, -+GDK_9, 0x2088, - GDK_equal, 0x208C, - GDK_V, 0x01D9, - GDK_v, 0x01DA, -@@ -1103,11 +1116,14 @@ GDK_kana_HI, 0x30D4, - GDK_kana_FU, 0x30D7, - GDK_kana_HE, 0x30DA, - GDK_kana_HO, 0x30DD, -+GDK_space, 0x0323, - GDK_plus, 0x2A25, - GDK_minus, 0x2A2A, - GDK_equal, 0x2A66, -+GDK_nobreakspace, 0x0323, - GDK_Abreve, 0x1EB6, - GDK_abreve, 0x1EB7, -+GDK_dead_belowdot, 0x0323, - GDK_Multi_key, GDK_plus, GDK_O, 0x1EE2, - GDK_Multi_key, GDK_plus, GDK_U, 0x1EF0, - GDK_Multi_key, GDK_plus, GDK_o, 0x1EE3, -@@ -1165,6 +1181,11 @@ GDK_Multi_key, GDK_asciicircum, GDK_e, 0x1EC3, - GDK_Multi_key, GDK_asciicircum, GDK_o, 0x1ED5, - GDK_Multi_key, GDK_b, GDK_A, 0x1EB2, - GDK_Multi_key, GDK_b, GDK_a, 0x1EB3, -+GDK_space, 0x031B, -+GDK_nobreakspace, 0x031B, -+GDK_Utilde, 0x1EEE, -+GDK_utilde, 0x1EEF, -+GDK_dead_horn, 0x031B, - GDK_Greek_ALPHA, 0x1F08, - GDK_Greek_EPSILON, 0x1F18, - GDK_Greek_ETA, 0x1F28, -@@ -1368,7 +1389,7 @@ GDK_apostrophe, GDK_Idiaeresis, 0x1E2E, - GDK_apostrophe, GDK_Ocircumflex, 0x1ED0, - GDK_apostrophe, GDK_Otilde, 0x1E4C, - GDK_apostrophe, GDK_Ooblique, 0x01FE, --GDK_apostrophe, 0x00DC, 0x01D7, -+GDK_apostrophe, GDK_Udiaeresis, 0x01D7, - GDK_apostrophe, GDK_acircumflex, 0x1EA5, - GDK_apostrophe, GDK_aring, 0x01FB, - GDK_apostrophe, GDK_ae, 0x01FD, -@@ -1529,6 +1550,7 @@ GDK_minus, GDK_parenright, 0x007D, - GDK_minus, GDK_plus, 0x00B1, - GDK_minus, GDK_comma, 0x00AC, - GDK_minus, GDK_colon, 0x00F7, -+GDK_minus, GDK_greater, 0x2192, - GDK_minus, GDK_A, 0x00C3, - GDK_minus, GDK_D, 0x0110, - GDK_minus, GDK_E, 0x0112, -@@ -1603,6 +1625,7 @@ GDK_period, 0x1E62, 0x1E68, - GDK_period, 0x1E63, 0x1E69, - GDK_slash, GDK_slash, 0x005C, - GDK_slash, GDK_less, 0x005C, -+GDK_slash, GDK_equal, 0x2260, - GDK_slash, GDK_C, 0x00A2, - GDK_slash, GDK_D, 0x0110, - GDK_slash, GDK_G, 0x01E4, -@@ -1682,8 +1705,11 @@ GDK_semicolon, GDK_u, 0x0173, - GDK_less, GDK_space, 0x02C7, - GDK_less, GDK_quotedbl, 0x201C, - GDK_less, GDK_apostrophe, 0x2018, -+GDK_less, GDK_minus, 0x2190, - GDK_less, GDK_slash, 0x005C, -+GDK_less, GDK_3, 0x2665, - GDK_less, GDK_less, 0x00AB, -+GDK_less, GDK_equal, 0x2264, - GDK_less, GDK_C, 0x010C, - GDK_less, GDK_D, 0x010E, - GDK_less, GDK_E, 0x011A, -@@ -1703,6 +1729,7 @@ GDK_less, GDK_s, 0x0161, - GDK_less, GDK_t, 0x0165, - GDK_less, GDK_z, 0x017E, - GDK_less, 0x0338, 0x226E, -+GDK_equal, GDK_slash, 0x2260, - GDK_equal, GDK_C, 0x20AC, - GDK_equal, GDK_E, 0x20AC, - GDK_equal, GDK_L, 0x00A3, -@@ -1725,6 +1752,7 @@ GDK_equal, GDK_Cyrillic_U, 0x04F2, - GDK_greater, GDK_space, 0x005E, - GDK_greater, GDK_quotedbl, 0x201D, - GDK_greater, GDK_apostrophe, 0x2019, -+GDK_greater, GDK_equal, 0x2265, - GDK_greater, GDK_greater, 0x00BB, - GDK_greater, GDK_A, 0x00C2, - GDK_greater, GDK_E, 0x00CA, -@@ -2068,7 +2096,7 @@ GDK_underscore, GDK_Adiaeresis, 0x01DE, - GDK_underscore, GDK_AE, 0x01E2, - GDK_underscore, GDK_Otilde, 0x022C, - GDK_underscore, GDK_Odiaeresis, 0x022A, --GDK_underscore, 0x00DC, 0x01D5, -+GDK_underscore, GDK_Udiaeresis, 0x01D5, - GDK_underscore, GDK_adiaeresis, 0x01DF, - GDK_underscore, GDK_ae, 0x01E3, - GDK_underscore, GDK_otilde, 0x022D, -@@ -2128,7 +2156,7 @@ GDK_grave, GDK_y, 0x1EF3, - GDK_grave, GDK_Acircumflex, 0x1EA6, - GDK_grave, GDK_Ecircumflex, 0x1EC0, - GDK_grave, GDK_Ocircumflex, 0x1ED2, --GDK_grave, 0x00DC, 0x01DB, -+GDK_grave, GDK_Udiaeresis, 0x01DB, - GDK_grave, GDK_acircumflex, 0x1EA7, - GDK_grave, GDK_ecircumflex, 0x1EC1, - GDK_grave, GDK_ocircumflex, 0x1ED3, -@@ -2279,7 +2307,7 @@ GDK_c, GDK_t, 0x0165, - GDK_c, GDK_u, 0x01D4, - GDK_c, GDK_z, 0x017E, - GDK_c, GDK_bar, 0x00A2, --GDK_c, 0x00DC, 0x01D9, -+GDK_c, GDK_Udiaeresis, 0x01D9, - GDK_c, GDK_udiaeresis, 0x01DA, - GDK_c, 0x01B7, 0x01EE, - GDK_c, 0x0292, 0x01EF, -@@ -2517,7 +2545,7 @@ GDK_macron, GDK_Adiaeresis, 0x01DE, - GDK_macron, GDK_AE, 0x01E2, - GDK_macron, GDK_Otilde, 0x022C, - GDK_macron, GDK_Odiaeresis, 0x022A, --GDK_macron, 0x00DC, 0x01D5, -+GDK_macron, GDK_Udiaeresis, 0x01D5, - GDK_macron, GDK_adiaeresis, 0x01DF, - GDK_macron, GDK_ae, 0x01E3, - GDK_macron, GDK_otilde, 0x022D, -@@ -2586,7 +2614,7 @@ GDK_acute, GDK_Idiaeresis, 0x1E2E, - GDK_acute, GDK_Ocircumflex, 0x1ED0, - GDK_acute, GDK_Otilde, 0x1E4C, - GDK_acute, GDK_Ooblique, 0x01FE, --GDK_acute, 0x00DC, 0x01D7, -+GDK_acute, GDK_Udiaeresis, 0x01D7, - GDK_acute, GDK_acircumflex, 0x1EA5, - GDK_acute, GDK_aring, 0x01FB, - GDK_acute, GDK_ae, 0x01FD, -@@ -4320,6 +4348,7 @@ GDK_parenleft, GDK_KP_4, GDK_KP_7, GDK_parenright, 0x32BC, - GDK_parenleft, GDK_KP_4, GDK_KP_8, GDK_parenright, 0x32BD, - GDK_parenleft, GDK_KP_4, GDK_KP_9, GDK_parenright, 0x32BE, - GDK_parenleft, GDK_KP_5, GDK_KP_0, GDK_parenright, 0x32BF, -+GDK_C, GDK_C, GDK_C, GDK_P, 0x262D, - GDK_Greek_iota, GDK_apostrophe, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8D, - GDK_Greek_iota, GDK_apostrophe, GDK_parenleft, GDK_Greek_ETA, 0x1F9D, - GDK_Greek_iota, GDK_apostrophe, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAD, --- -1.6.5.rc2 - diff --git a/default_printer.patch b/default_printer.patch deleted file mode 100644 index a74d415..0000000 --- a/default_printer.patch +++ /dev/null @@ -1,76 +0,0 @@ ---- modules/printbackends/cups/gtkprintbackendcups.c 2009-01-01 20:41:58.000000000 +0100 -+++ modules/printbackends/cups/gtkprintbackendcups.c 2009-01-21 13:54:39.000000000 +0100 -@@ -1103,6 +1103,7 @@ cups_request_printer_list_cb (GtkPrintBa - ipp_t *response; - gboolean list_has_changed; - GList *removed_printer_checklist; -+ gchar *remote_default_printer = NULL; - - GDK_THREADS_ENTER (); - -@@ -1190,6 +1191,7 @@ cups_request_printer_list_cb (GtkPrintBa - gboolean is_accepting_jobs = TRUE; - gboolean default_printer = FALSE; - gboolean got_printer_type = FALSE; -+ gboolean remote_printer = FALSE; - - /* Skip leading attributes until we hit a printer... - */ -@@ -1307,6 +1309,11 @@ cups_request_printer_list_cb (GtkPrintBa - default_printer = TRUE; - else - default_printer = FALSE; -+ -+ if (attr->values[0].integer & 0x00000002) -+ remote_printer = TRUE; -+ else -+ remote_printer = FALSE; - } - else - { -@@ -1330,8 +1337,16 @@ cups_request_printer_list_cb (GtkPrintBa - { - if (default_printer && !cups_backend->got_default_printer) - { -- cups_backend->got_default_printer = TRUE; -- cups_backend->default_printer = g_strdup (printer_name); -+ if (!remote_printer) -+ { -+ cups_backend->got_default_printer = TRUE; -+ cups_backend->default_printer = g_strdup (printer_name); -+ } -+ else -+ { -+ if (remote_default_printer == NULL) -+ remote_default_printer = g_strdup (printer_name); -+ } - } - } - else -@@ -1552,6 +1567,26 @@ done: - - gtk_print_backend_set_list_done (backend); - -+ if (!cups_backend->got_default_printer && remote_default_printer != NULL) -+ { -+ cups_backend->default_printer = g_strdup (remote_default_printer); -+ cups_backend->got_default_printer = TRUE; -+ g_free (remote_default_printer); -+ -+ if (cups_backend->default_printer != NULL) -+ { -+ GtkPrinter *default_printer = NULL; -+ default_printer = gtk_print_backend_find_printer (GTK_PRINT_BACKEND (cups_backend), -+ cups_backend->default_printer); -+ if (default_printer != NULL) -+ { -+ gtk_printer_set_is_default (default_printer, TRUE); -+ g_signal_emit_by_name (GTK_PRINT_BACKEND (cups_backend), -+ "printer-status-changed", default_printer); -+ } -+ } -+ } -+ - GDK_THREADS_LEAVE (); - } - diff --git a/fresh-tooltips.patch b/fresh-tooltips.patch deleted file mode 100644 index dfdfb88..0000000 --- a/fresh-tooltips.patch +++ /dev/null @@ -1,339 +0,0 @@ -diff -up gtk+-2.21.1/gtk/gtktooltip.c.fresh-tooltips gtk+-2.21.1/gtk/gtktooltip.c ---- gtk+-2.21.1/gtk/gtktooltip.c.fresh-tooltips 2010-05-30 02:52:44.000000000 -0400 -+++ gtk+-2.21.1/gtk/gtktooltip.c 2010-05-30 19:23:06.464923263 -0400 -@@ -33,6 +33,10 @@ - #include "gtkhbox.h" - #include "gtkalignment.h" - -+#ifdef GDK_WINDOWING_X11 -+#include "gdk/x11/gdkx.h" -+#endif -+ - #include "gtkalias.h" - - #undef DEBUG_TOOLTIP -@@ -97,6 +101,7 @@ static void gtk_tooltip_display_cl - GtkTooltip *tooltip); - static void gtk_tooltip_set_last_window (GtkTooltip *tooltip, - GdkWindow *window); -+static void update_shape (GtkTooltip *tooltip); - - - G_DEFINE_TYPE (GtkTooltip, gtk_tooltip, G_TYPE_OBJECT); -@@ -112,8 +117,43 @@ gtk_tooltip_class_init (GtkTooltipClass - } - - static void -+on_composited_changed (GtkWidget *window, -+ GtkTooltip *tooltip) -+{ -+ update_shape (tooltip); -+} -+ -+static void -+on_screen_changed (GtkWidget *window, -+ GdkScreen *previous, -+ GtkTooltip *tooltip) -+{ -+ GdkScreen *screen; -+ GdkColormap *cmap; -+ -+ screen = gtk_widget_get_screen (window); -+ -+ cmap = NULL; -+ if (gdk_screen_is_composited (screen)) -+ cmap = gdk_screen_get_rgba_colormap (screen); -+ if (cmap == NULL) -+ cmap = gdk_screen_get_rgb_colormap (screen); -+ -+ gtk_widget_set_colormap (window, cmap); -+} -+ -+static void -+on_realized (GtkWidget *window, -+ GtkTooltip *tooltip) -+{ -+ update_shape (tooltip); -+} -+ -+static void - gtk_tooltip_init (GtkTooltip *tooltip) - { -+ GdkScreen *screen; -+ - tooltip->timeout_id = 0; - tooltip->browse_mode_timeout_id = 0; - -@@ -129,8 +169,12 @@ gtk_tooltip_init (GtkTooltip *tooltip) - tooltip->last_window = NULL; - - tooltip->window = g_object_ref (gtk_window_new (GTK_WINDOW_POPUP)); -+ -+ on_screen_changed (tooltip->window, NULL, tooltip); -+ - gtk_window_set_type_hint (GTK_WINDOW (tooltip->window), - GDK_WINDOW_TYPE_HINT_TOOLTIP); -+ - gtk_widget_set_app_paintable (tooltip->window, TRUE); - gtk_window_set_resizable (GTK_WINDOW (tooltip->window), FALSE); - gtk_widget_set_name (tooltip->window, "gtk-tooltip"); -@@ -147,7 +191,7 @@ gtk_tooltip_init (GtkTooltip *tooltip) - gtk_widget_show (tooltip->alignment); - - g_signal_connect_swapped (tooltip->window, "style-set", -- G_CALLBACK (gtk_tooltip_window_style_set), tooltip); -+ G_CALLBACK (gtk_tooltip_window_style_set), tooltip); - g_signal_connect_swapped (tooltip->window, "expose-event", - G_CALLBACK (gtk_tooltip_paint_window), tooltip); - -@@ -164,6 +208,13 @@ gtk_tooltip_init (GtkTooltip *tooltip) - gtk_box_pack_start (GTK_BOX (tooltip->box), tooltip->label, - FALSE, FALSE, 0); - -+ g_signal_connect (tooltip->window, "composited-changed", -+ G_CALLBACK (on_composited_changed), tooltip); -+ g_signal_connect (tooltip->window, "screen-changed", -+ G_CALLBACK (on_screen_changed), tooltip); -+ g_signal_connect (tooltip->window, "realize", -+ G_CALLBACK (on_realized), tooltip); -+ - tooltip->custom_widget = NULL; - } - -@@ -510,19 +561,208 @@ gtk_tooltip_window_style_set (GtkTooltip - gtk_widget_queue_draw (tooltip->window); - } - -+static void -+draw_round_rect (cairo_t *cr, -+ gdouble aspect, -+ gdouble x, -+ gdouble y, -+ gdouble corner_radius, -+ gdouble width, -+ gdouble height) -+{ -+ gdouble radius = corner_radius / aspect; -+ -+ cairo_move_to (cr, x + radius, y); -+ -+ /* top-right, left of the corner */ -+ cairo_line_to (cr, x + width - radius, y); -+ -+ /* top-right, below the corner */ -+ cairo_arc (cr, -+ x + width - radius, y + radius, radius, -+ -90.0f * G_PI / 180.0f, 0.0f * G_PI / 180.0f); -+ -+ /* bottom-right, above the corner */ -+ cairo_line_to (cr, x + width, y + height - radius); -+ -+ /* bottom-right, left of the corner */ -+ cairo_arc (cr, -+ x + width - radius, y + height - radius, radius, -+ 0.0f * G_PI / 180.0f, 90.0f * G_PI / 180.0f); -+ -+ /* bottom-left, right of the corner */ -+ cairo_line_to (cr, x + radius, y + height); -+ -+ /* bottom-left, above the corner */ -+ cairo_arc (cr, -+ x + radius, y + height - radius, radius, -+ 90.0f * G_PI / 180.0f, 180.0f * G_PI / 180.0f); -+ -+ /* top-left, below the corner */ -+ cairo_line_to (cr, x, y + radius); -+ -+ /* top-left, right of the corner */ -+ cairo_arc (cr, -+ x + radius, y + radius, radius, -+ 180.0f * G_PI / 180.0f, 270.0f * G_PI / 180.0f); -+ -+ cairo_close_path (cr); -+} -+ -+static void -+fill_background (GtkWidget *widget, -+ cairo_t *cr) -+{ -+ GdkColor color; -+ gdouble r, g, b; -+ gint radius; -+ gdouble background_alpha; -+ -+ if (gdk_screen_is_composited (gtk_widget_get_screen (widget))) -+ background_alpha = 0.90; -+ else -+ background_alpha = 1.0; -+ -+ radius = MIN (widget->style->xthickness, widget->style->ythickness); -+ radius = MAX (radius, 1); -+ -+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); -+ cairo_paint (cr); -+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER); -+ -+ draw_round_rect (cr, -+ 1.0, 0.5, 0.5, radius, -+ widget->allocation.width - 1, -+ widget->allocation.height - 1); -+ -+ color = widget->style->bg [GTK_STATE_NORMAL]; -+ r = (float)color.red / 65535.0; -+ g = (float)color.green / 65535.0; -+ b = (float)color.blue / 65535.0; -+ cairo_set_source_rgba (cr, r, g, b, background_alpha); -+ cairo_fill_preserve (cr); -+ -+ color = widget->style->bg [GTK_STATE_SELECTED]; -+ r = (float) color.red / 65535.0; -+ g = (float) color.green / 65535.0; -+ b = (float) color.blue / 65535.0; -+ -+ cairo_set_source_rgba (cr, r, g, b, background_alpha); -+ cairo_set_line_width (cr, 1.0); -+ cairo_stroke (cr); -+} -+ -+static void -+update_shape (GtkTooltip *tooltip) -+{ -+ GdkScreen *screen; -+ GdkBitmap *mask; -+ cairo_t *cr; -+ gint width, height; -+ gboolean new_style; -+ gint radius; -+ -+ gtk_widget_style_get (tooltip->window, "new-tooltip-style", &new_style, NULL); -+ -+ if (!new_style) -+ { -+ gtk_widget_shape_combine_mask (tooltip->window, NULL, 0, 0); -+ return; -+ } -+ -+ screen = gtk_widget_get_screen (tooltip->window); -+ -+ gtk_window_get_size (GTK_WINDOW (tooltip->window), &width, &height); -+ -+ if (gdk_screen_is_composited (screen)) -+ { -+ GdkRectangle rect; -+ GdkRegion *region; -+ const char *wm; -+ -+ gtk_widget_shape_combine_mask (tooltip->window, NULL, 0, 0); -+#ifdef GDK_WINDOWING_X11 -+ /* This is a hack to keep the Metacity compositor from slapping a -+ * non-shaped shadow around the shaped tooltip -+ */ -+ if (!gtk_widget_get_mapped (tooltip->window)) -+ { -+ wm = gdk_x11_screen_get_window_manager_name (screen); -+ if (g_strcmp0 (wm, "Metacity") == 0) -+ gtk_window_set_type_hint (GTK_WINDOW (tooltip->window), -+ GDK_WINDOW_TYPE_HINT_DND); -+ } -+#endif -+ return; -+ } -+ -+ radius = MIN (tooltip->window->style->xthickness, -+ tooltip->window->style->ythickness); -+ radius = MAX (radius, 1); -+ mask = (GdkBitmap *) gdk_pixmap_new (NULL, width, height, 1); -+ cr = gdk_cairo_create (mask); -+ if (cairo_status (cr) == CAIRO_STATUS_SUCCESS) -+ { -+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); -+ cairo_paint (cr); -+ -+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER); -+ cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); -+ draw_round_rect (cr, 1.0, 0, 0, radius + 1, width, height); -+ cairo_fill (cr); -+ -+ gtk_widget_shape_combine_mask (tooltip->window, mask, 0, 0); -+ } -+ cairo_destroy (cr); -+ -+ g_object_unref (mask); -+} -+ - static gboolean - gtk_tooltip_paint_window (GtkTooltip *tooltip) - { -- gtk_paint_flat_box (tooltip->window->style, -- tooltip->window->window, -- GTK_STATE_NORMAL, -- GTK_SHADOW_OUT, -- NULL, -- tooltip->window, -- "tooltip", -- 0, 0, -- tooltip->window->allocation.width, -- tooltip->window->allocation.height); -+ gboolean new_style; -+ -+ gtk_widget_style_get (tooltip->window, "new-tooltip-style", &new_style, NULL); -+ -+ if (new_style) -+ { -+ cairo_t *context; -+ cairo_surface_t *surface; -+ cairo_t *cr; -+ -+ context = gdk_cairo_create (tooltip->window->window); -+ -+ cairo_set_operator (context, CAIRO_OPERATOR_SOURCE); -+ surface = cairo_surface_create_similar (cairo_get_target (context), -+ CAIRO_CONTENT_COLOR_ALPHA, -+ tooltip->window->allocation.width, -+ tooltip->window->allocation.height); -+ cr = cairo_create (surface); -+ -+ fill_background (tooltip->window, cr); -+ -+ cairo_destroy (cr); -+ cairo_set_source_surface (context, surface, 0, 0); -+ cairo_paint (context); -+ cairo_surface_destroy (surface); -+ cairo_destroy (context); -+ -+ update_shape (tooltip); -+ } -+ else -+ { -+ gtk_paint_flat_box (tooltip->window->style, -+ tooltip->window->window, -+ GTK_STATE_NORMAL, -+ GTK_SHADOW_OUT, -+ NULL, -+ tooltip->window, -+ "tooltip", -+ 0, 0, -+ tooltip->window->allocation.width, -+ tooltip->window->allocation.height); -+ } - - return FALSE; - } -diff -up gtk+-2.21.1/gtk/gtkwidget.c.fresh-tooltips gtk+-2.21.1/gtk/gtkwidget.c ---- gtk+-2.21.1/gtk/gtkwidget.c.fresh-tooltips 2010-05-30 02:52:44.000000000 -0400 -+++ gtk+-2.21.1/gtk/gtkwidget.c 2010-05-30 19:23:06.475923752 -0400 -@@ -2561,6 +2561,14 @@ gtk_widget_class_init (GtkWidgetClass *k - P_("The length of vertical scroll arrows"), - 1, G_MAXINT, 16, - GTK_PARAM_READABLE)); -+ -+ gtk_widget_class_install_style_property (klass, -+ g_param_spec_boolean ("new-tooltip-style", -+ NULL, -+ NULL, -+ FALSE, -+ GTK_PARAM_READABLE)); -+ - } - - static void diff --git a/gtk-lib64.patch b/gtk-lib64.patch deleted file mode 100644 index 75f5252..0000000 --- a/gtk-lib64.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -up gtk+-2.19.1/gtk/gtkrc.c.lib64 gtk+-2.19.1/gtk/gtkrc.c ---- gtk+-2.19.1/gtk/gtkrc.c.lib64 2009-11-26 01:35:50.000000000 -0500 -+++ gtk+-2.19.1/gtk/gtkrc.c 2009-11-30 20:54:21.844826383 -0500 -@@ -450,7 +450,17 @@ gtk_rc_get_im_module_file (void) - if (im_module_file) - result = g_strdup (im_module_file); - else -- result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", "gtk.immodules", NULL); -+ { -+ result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", GTK_HOST, -+ "gtk.immodules", NULL); -+ if (!g_file_test (result, G_FILE_TEST_EXISTS)) -+ { -+ g_free (result); -+ -+ result = g_build_filename (GTK_SYSCONFDIR, "gtk-2.0", -+ "gtk.immodules", NULL); -+ } -+ } - } - - return result; diff --git a/gtk2-landscape-pdf-print.patch b/gtk2-landscape-pdf-print.patch deleted file mode 100644 index 6c3f0f2..0000000 --- a/gtk2-landscape-pdf-print.patch +++ /dev/null @@ -1,186 +0,0 @@ ---- gtk+-2.18.3/gtk/gtkprintcontext.c 2009-10-09 07:00:44.000000000 +0200 -+++ gtk+-2.18.3/gtk/gtkprintcontext.c 2009-11-05 11:57:31.000000000 +0100 -@@ -155,7 +155,6 @@ gtk_print_context_set_cairo_context (Gtk - context->pixels_per_unit_y); - } - -- - void - _gtk_print_context_rotate_according_to_orientation (GtkPrintContext *context) - { -@@ -204,6 +203,36 @@ _gtk_print_context_rotate_according_to_o - } - - void -+_gtk_print_context_reverse_according_to_orientation (GtkPrintContext *context) -+{ -+ cairo_t *cr = context->cr; -+ cairo_matrix_t matrix; -+ gdouble width, height; -+ -+ width = gtk_page_setup_get_paper_width (context->page_setup, GTK_UNIT_INCH); -+ width = width * context->surface_dpi_x / context->pixels_per_unit_x; -+ height = gtk_page_setup_get_paper_height (context->page_setup, GTK_UNIT_INCH); -+ height = height * context->surface_dpi_y / context->pixels_per_unit_y; -+ -+ switch (gtk_page_setup_get_orientation (context->page_setup)) -+ { -+ default: -+ case GTK_PAGE_ORIENTATION_PORTRAIT: -+ case GTK_PAGE_ORIENTATION_LANDSCAPE: -+ break; -+ case GTK_PAGE_ORIENTATION_REVERSE_PORTRAIT: -+ case GTK_PAGE_ORIENTATION_REVERSE_LANDSCAPE: -+ cairo_translate (cr, width, height); -+ cairo_matrix_init (&matrix, -+ -1, 0, -+ 0, -1, -+ 0, 0); -+ cairo_transform (cr, &matrix); -+ break; -+ } -+} -+ -+void - _gtk_print_context_translate_into_margin (GtkPrintContext *context) - { - GtkPrintOperationPrivate *priv; ---- gtk+-2.18.3/gtk/gtkprintoperation.c 2009-11-05 12:02:52.000000000 +0100 -+++ gtk+-2.18.3/gtk/gtkprintoperation.c 2009-11-05 12:01:40.000000000 +0100 -@@ -1960,14 +1960,11 @@ pdf_start_page (GtkPrintOperation *op, - GtkPrintContext *print_context, - GtkPageSetup *page_setup) - { -- GtkPaperSize *paper_size; - cairo_surface_t *surface = op->priv->platform_data; - gdouble w, h; - -- paper_size = gtk_page_setup_get_paper_size (page_setup); -- -- w = gtk_paper_size_get_width (paper_size, GTK_UNIT_POINTS); -- h = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS); -+ w = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS); -+ h = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS); - - cairo_pdf_surface_set_size (surface, w, h); - } -@@ -2056,7 +2053,7 @@ run_pdf (GtkPrintOperation *op, - priv->manual_reverse = FALSE; - priv->manual_page_set = GTK_PAGE_SET_ALL; - priv->manual_scale = 1.0; -- priv->manual_orientation = TRUE; -+ priv->manual_orientation = FALSE; - priv->manual_number_up = 1; - priv->manual_number_up_layout = GTK_NUMBER_UP_LAYOUT_LEFT_TO_RIGHT_TOP_TO_BOTTOM; - -@@ -2400,6 +2397,8 @@ common_render_page (GtkPrintOperation *o - - if (priv->manual_orientation) - _gtk_print_context_rotate_according_to_orientation (print_context); -+ else -+ _gtk_print_context_reverse_according_to_orientation (print_context); - - if (priv->manual_number_up > 1) - { -@@ -2934,7 +2933,7 @@ print_pages (GtkPrintOperation *op - priv->manual_reverse = gtk_print_settings_get_reverse (priv->print_settings); - priv->manual_page_set = gtk_print_settings_get_page_set (priv->print_settings); - priv->manual_scale = gtk_print_settings_get_scale (priv->print_settings) / 100.0; -- priv->manual_orientation = TRUE; -+ priv->manual_orientation = FALSE; - priv->manual_number_up = gtk_print_settings_get_number_up (priv->print_settings); - priv->manual_number_up_layout = gtk_print_settings_get_number_up_layout (priv->print_settings); - } ---- gtk+-2.18.3/gtk/gtkprintoperation-private.h 2009-10-09 07:00:44.000000000 +0200 -+++ gtk+-2.18.3/gtk/gtkprintoperation-private.h 2009-11-05 11:58:07.000000000 +0100 -@@ -135,11 +135,12 @@ void _gtk_print_operation_set_status (Gt - - /* GtkPrintContext private functions: */ - --GtkPrintContext *_gtk_print_context_new (GtkPrintOperation *op); --void _gtk_print_context_set_page_setup (GtkPrintContext *context, -- GtkPageSetup *page_setup); --void _gtk_print_context_translate_into_margin (GtkPrintContext *context); --void _gtk_print_context_rotate_according_to_orientation (GtkPrintContext *context); -+GtkPrintContext *_gtk_print_context_new (GtkPrintOperation *op); -+void _gtk_print_context_set_page_setup (GtkPrintContext *context, -+ GtkPageSetup *page_setup); -+void _gtk_print_context_translate_into_margin (GtkPrintContext *context); -+void _gtk_print_context_rotate_according_to_orientation (GtkPrintContext *context); -+void _gtk_print_context_reverse_according_to_orientation (GtkPrintContext *context); - - G_END_DECLS - ---- gtk+-2.18.3/gtk/gtkprintoperation-unix.c 2009-11-05 12:02:52.000000000 +0100 -+++ gtk+-2.18.3/gtk/gtkprintoperation-unix.c 2009-11-05 12:00:08.000000000 +0100 -@@ -109,6 +109,8 @@ unix_start_page (GtkPrintOperation *op, - } - else if (type == CAIRO_SURFACE_TYPE_PDF) - { -+ w = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS); -+ h = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS); - cairo_pdf_surface_set_size (op_unix->surface, w, h); - } - } -@@ -771,7 +773,6 @@ _gtk_print_operation_platform_backend_cr - { - gchar *filename; - gint fd; -- GtkPaperSize *paper_size; - gdouble w, h; - cairo_surface_t *surface; - static cairo_user_data_key_t key; -@@ -787,9 +788,8 @@ _gtk_print_operation_platform_backend_cr - - *target = filename; - -- paper_size = gtk_page_setup_get_paper_size (page_setup); -- w = gtk_paper_size_get_width (paper_size, GTK_UNIT_POINTS); -- h = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS); -+ w = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS); -+ h = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS); - - *dpi_x = *dpi_y = 72; - surface = cairo_pdf_surface_create_for_stream (write_preview, GINT_TO_POINTER (fd), w, h); -@@ -822,9 +822,8 @@ _gtk_print_operation_platform_backend_re - GtkPaperSize *paper_size; - gdouble w, h; - -- paper_size = gtk_page_setup_get_paper_size (page_setup); -- w = gtk_paper_size_get_width (paper_size, GTK_UNIT_POINTS); -- h = gtk_paper_size_get_height (paper_size, GTK_UNIT_POINTS); -+ w = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS); -+ h = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS); - cairo_pdf_surface_set_size (surface, w, h); - } - ---- gtk+-2.18.3/modules/printbackends/file/gtkprintbackendfile.c 2009-10-09 07:00:45.000000000 +0200 -+++ gtk+-2.18.3/modules/printbackends/file/gtkprintbackendfile.c 2009-11-05 12:02:32.000000000 +0100 -@@ -698,6 +698,7 @@ file_printer_prepare_for_print (GtkPrint - GtkPageSetup *page_setup) - { - gdouble scale; -+ OutputFormat format; - - print_job->print_pages = gtk_print_settings_get_print_pages (settings); - print_job->page_ranges = NULL; -@@ -719,7 +720,18 @@ file_printer_prepare_for_print (GtkPrint - print_job->scale = scale/100.0; - - print_job->page_set = gtk_print_settings_get_page_set (settings); -- print_job->rotate_to_orientation = TRUE; -+ -+ format = format_from_settings (settings); -+ switch (format) -+ { -+ case FORMAT_PDF: -+ print_job->rotate_to_orientation = FALSE; -+ break; -+ case FORMAT_PS: -+ case FORMAT_SVG: -+ print_job->rotate_to_orientation = TRUE; -+ break; -+ } - } - - static GList * diff --git a/gtk2-schar.patch b/gtk2-schar.patch deleted file mode 100644 index 1846ce8..0000000 --- a/gtk2-schar.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -up gtk+-2.24.7/gdk/gdkmarshalers.c.schar gtk+-2.24.7/gdk/gdkmarshalers.c ---- gtk+-2.24.7/gdk/gdkmarshalers.c.schar 2011-10-17 18:05:32.000000000 -0400 -+++ gtk+-2.24.7/gdk/gdkmarshalers.c 2011-10-17 20:07:54.859431530 -0400 -@@ -5,7 +5,7 @@ - - #ifdef G_ENABLE_DEBUG - #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) --#define g_marshal_value_peek_char(v) g_value_get_schar (v) -+#define g_marshal_value_peek_char(v) g_value_get_char (v) - #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) - #define g_marshal_value_peek_int(v) g_value_get_int (v) - #define g_marshal_value_peek_uint(v) g_value_get_uint (v) -diff -up gtk+-2.24.7/gtk/gtkmarshal.c.schar gtk+-2.24.7/gtk/gtkmarshal.c ---- gtk+-2.24.7/gtk/gtkmarshal.c.schar 2011-10-17 20:10:48.682425316 -0400 -+++ gtk+-2.24.7/gtk/gtkmarshal.c 2011-10-17 20:10:56.723425027 -0400 -@@ -6,7 +6,7 @@ - - #ifdef G_ENABLE_DEBUG - #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) --#define g_marshal_value_peek_char(v) g_value_get_schar (v) -+#define g_marshal_value_peek_char(v) g_value_get_char (v) - #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) - #define g_marshal_value_peek_int(v) g_value_get_int (v) - #define g_marshal_value_peek_uint(v) g_value_get_uint (v) -diff -up gtk+-2.24.7/gtk/gtkmarshalers.c.schar gtk+-2.24.7/gtk/gtkmarshalers.c ---- gtk+-2.24.7/gtk/gtkmarshalers.c.schar 2011-10-17 18:05:54.000000000 -0400 -+++ gtk+-2.24.7/gtk/gtkmarshalers.c 2011-10-17 20:07:54.860431529 -0400 -@@ -6,7 +6,7 @@ - - #ifdef G_ENABLE_DEBUG - #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) --#define g_marshal_value_peek_char(v) g_value_get_schar (v) -+#define g_marshal_value_peek_char(v) g_value_get_char (v) - #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) - #define g_marshal_value_peek_int(v) g_value_get_int (v) - #define g_marshal_value_peek_uint(v) g_value_get_uint (v) diff --git a/lower-gi-deps.patch b/lower-gi-deps.patch deleted file mode 100644 index 8adb28f..0000000 --- a/lower-gi-deps.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 62c2b4f529334b57323287c8bd04022eaf963ce6 Mon Sep 17 00:00:00 2001 -From: Colin Walters -Date: Wed, 15 Sep 2010 19:13:05 +0000 -Subject: introspection: Only use 0.9.3 API - ---- -diff --git a/configure.in b/configure.in -index 63331c4..bf109d9 100644 ---- a/configure.in -+++ b/configure.in -@@ -1565,7 +1565,7 @@ fi - # GObject introspection - ################################################## - --GOBJECT_INTROSPECTION_CHECK([0.9.5]) -+GOBJECT_INTROSPECTION_CHECK([0.9.3]) - - ################################################## - # Checks for gtk-doc and docbook-tools -diff --git a/gdk/Makefile.am b/gdk/Makefile.am -index c8b2102..06de1a4 100644 ---- a/gdk/Makefile.am -+++ b/gdk/Makefile.am -@@ -238,7 +238,7 @@ x11_introspection_files = \ - x11/gdkx.h - - GdkX11-2.0.gir: $(gdktargetlib) Gdk-2.0.gir Makefile --GdkX11_2_0_gir_SCANNERFLAGS = --warn-all --identifier-prefix=Gdk --symbol-prefix=gdk -+GdkX11_2_0_gir_SCANNERFLAGS = --warn-all --strip-prefix=Gdk - GdkX11_2_0_gir_INCLUDES = Gio-2.0 Gdk-2.0 GdkPixbuf-2.0 Pango-1.0 xlib-2.0 - GdkX11_2_0_gir_LIBS = $(gdktargetlib) - GdkX11_2_0_gir_FILES = $(x11_introspection_files) --- -cgit v0.8.3.1