Branch: refs/heads/master Author: Jiří Techet techet@gmail.com Committer: Jiří Techet techet@gmail.com Date: Fri, 29 Oct 2021 20:13:18 UTC Commit: cabab45d898b08058a8a773a3ed73842d13d60f7 https://github.com/geany/geany-osx/commit/cabab45d898b08058a8a773a3ed73842d1...
Log Message: ----------- Add the "patches" directory from gtk-osx
Modified Paths: -------------- README.md patches/0001-Add-G_GNUC_PRINTF-on-all-functions-with-format-strin.patch patches/0001-Bug-571582-GtkSelection-implementation-for-quartz.patch patches/0001-Bug-667759-gtkdnd-quartz.c-is-missing-annotations-fo.patch patches/0001-Bug-670373-gtk2-modules-printing-cups-gtkprintbackendcups.patch patches/0001-Bug-670373-gtk3-modules-printing-cups-gtkprintbackendcups.patch patches/0001-Bug-702516-Make-Werror-format-nonliteral-happy.patch patches/0001-Bug-707945-GTK2-Quartz-typeahead-find-in-GtkTreeView.patch patches/0001-Bug-708998-Avoid-infinite-loop.patch patches/0001-Bug-709939-quartz-window-pos.patch patches/0001-Enable-use-of-XDG_DATA_DIRS-for-locating-iso-code-fi.patch patches/0001-Fix-DnD-Introspection-on-Quartz-Backend.patch patches/0001-Fix-relative-module-paths.patch patches/0001-Make-ATSUI-backend-compile-again.patch patches/0001-Patch-Orbit-2.14.19-to-master-for-current-GLib.patch patches/0001-Prevent-WebKitWebProcess-from-being-in-the-dock-or-p.patch patches/0001-Restore-gl_GLIBC21-to-configure-needed-for-libcharse.patch patches/0001-quartz-Fix-the-32-bits-build-on-MacOSX-10.7.patch patches/0001-scanner-split-CC-environment-variable.patch patches/0002-gtk2-Extract-reasons-and-reasons_desc-arrays-to-file-leve.patch patches/0002-gtk3-Extract-reasons-and-reasons_desc-arrays-to-file-leve.patch patches/0003-Fix-double-free-introduced-in-f86dc163.patch patches/0003-gtk2-Create-enum-PrinterStateLevel.patch patches/0003-gtk3-Create-enum-PrinterStateLevel.patch patches/0003-quartz-NULL-check-on-default-keymap.patch patches/0004-Bug-571582-GtkSelection-implementation-for-quartz.patch patches/0004-Ensure-src-and-dest-are-GdkWindows-in-_gdk_sythesize.patch patches/0004-gtk2-Extract-printer-setup-variables-into-a-struct.patch patches/0004-gtk3-Extract-printer-setup-variables-into-a-struct.patch patches/0005-gtk2-Extract-function-cups_printer_handle_attribute.patch patches/0005-gtk3-Extract-function-cups_printer_handle_attribute.patch patches/0006-Bug-658722-Drag-and-Drop-sometimes-stops-working.patch patches/0006-gtk2-Extract-Function-cups_create_printer.patch patches/0006-gtk3-Extract-Function-cups_create_printer.patch patches/0007-gtk2-Move-some-variable-declarations-into-the-scopes-in-w.patch patches/0007-gtk3-Move-some-variable-declarations-into-the-scopes-in-w.patch patches/0008-Bug-670373-gtk2-modules-printing-cups-gtkprintbackendcups.patch patches/0008-Bug-670373-gtk3-modules-printing-cups-gtkprintbackendcups.patch patches/0008-Implement-GtkDragSourceOwner-pasteboardChangedOwner.patch patches/0009-Bug-670373-gtk2-modules-printing-cups-gtkprintbackendcups.patch patches/0009-Bug-670373-gtk3-modules-printing-cups-gtkprintbackendcups.patch patches/Bug-555525-plug-ins-twain-tw_mac.c.patch patches/Bug-673403-replace-values_h.patch patches/Cairo-44584-llvm-no-flto.patch patches/Cairo-quartz-surface-create-internal.patch patches/GConf-characters.patch patches/Glade-3-8-Bug-663492-Update-Mac-integration-bindings-to-.patch patches/Glade-3-8-Mac-Integration-Fix-up-menu-accelerators-for-Mac.patch patches/Glade-master-Bug-663492-Update-Mac-integration-bindings-to-.patch patches/Glade-master-Mac-Integration-Fix-up-menu-accelerators-for-Mac.patch patches/Gtk3-24-1-Handle-NULL-NSGraphicsContext-currentContext.patch patches/Gtk3-24-1-Update-GDK_OSX-versions-to-current-MacOS-release.patch patches/Gtk3-24-1-Use-NSGraphicsContext-CGContext-instead-of-graphicsP.patch patches/Gtk3-24-1-quartz-do-not-cache-the-screen-in-the-gdkmonitor.patch patches/Python3.6-stack-size-flag.patch patches/Quartz-version-detection-for-macOS-12.patch patches/WebKit-2.16.1-Bug-167343-wtf-unicode-UTF8.h.patch patches/WebKit-2.4.11-fixups.patch patches/WebKit2Gtk3-2.30.0-cumulative.patch patches/WebKit2Gtk3-2.30.1-Disable-AUDIT_TOKEN-for-Gtk-builds.patch patches/WebKit2Gtk3-2.30.1-Disable-WebKitGenericCueAPIEnabled.patch patches/WebKit2Gtk3-2.30.1-Extend-UNIX_DOMAIN_SOCKETS-precedence-over-Mac-and-Win.patch patches/WebKit2Gtk3-2.30.1-Fix-Socket-signal-defines-for-Darwin-and-maybe-BSD.patch patches/WebKit2Gtk3-2.30.1-Force-FindICU-instead-of-inserting-heade.patch patches/WebKit2Gtk3-2.30.2-GUniquePtrGtk.patch patches/WebKit2Gtk3-2.30.2-Prevent-WebKitWebProcess-from-being-in-.patch patches/WebKit2Gtk3-2.32.0-color-components-correct-math-header.patch patches/WebKit2Gtk3-2.32.0-cumulative.patch patches/Webkit-2.16-Fix-some-includes.patch patches/Webkit-2.16-build-without-OpenGL.patch patches/amtk-build-on-macOS.patch patches/bug-92264-webkit-bison-2.6.patch patches/cairo-freetype-font-variations.patch patches/cairo-image-refcount.patch patches/cairomm-Bug-100894-Cairomm-compile-failure-if-no-cairo-ft.patch patches/cmake-libnetwork.patch patches/delete-gnetworking.h.patch patches/devhelp-3-build-on-macOS.patch patches/devhelp-646962-variable-name.patch patches/devhelp-663789-gtkosxapplication.patch patches/enchant-env.patch patches/enchant-gsize.patch patches/faad2-2.7-ac-config-headers.patch patches/firefox78-rust-manifest-and-max-sdk.patch patches/freetype-2.5.3-ccexe_cflags.patch patches/freetype-install-name.patch patches/frodo-getopt-autotools.patch patches/gdk-pixbuf-loader-name.patch patches/gi_cairo_library_path.patch patches/girscanner-objc.patch patches/gjs-remove-js::CodeCoverage.patch patches/glade-1-18.patch patches/glade-3.22.1-xslproc.patch patches/glib-2.52-Fallback-to-CFStringGetCSTring-if-CFStringGetC.patch patches/glib-gint64-long-long.patch patches/glib-iconv.patch patches/glibmm-Bug-781947-Build-fails-on-MacOS-because-glib-doesn-t.patch patches/gnutls-yes-weak-imports.patch patches/gobject-introspection-625195-Fix-non-libtool-linker-flags-on-Darwin.patch patches/graphviz-remove-rpath.patch patches/gtk+-2-m4-creation.patch patches/gtk+-Bug-655065-Better-Fix.patch patches/gtk+-scale-absolute-value.patch patches/gtk-3.14-GDesktopAppInfo-not-implemented-on-Mac.patch patches/gtk-3.14-stylecontext-unnecessary-assert.patch patches/gtk-gimp-dnd-bug767091.patch patches/gtk-mac-integration-work-around-svg-locale-bug.patch patches/gtk-quartz-fix-pixelated-image-surfaces-in-retina-hidpi-.patch patches/gtk3-14-get-scale-factor.patch patches/gtk3-14-gtkdesktop.patch patches/gtk3-quartz-3-24-7-fixes.patch patches/gtkmm-3-bad-const-property-background.patch patches/gtksourceview-664511-gtkosxapplication.patch patches/gtksourceview3-664511-gtkosxapplication.patch patches/gtksourceview3-664679-backends.patch patches/gtkspell-3-install.sh-wrong-sh-path.patch patches/guild-shell.patch patches/guile-clocktime.patch patches/guile20-align-fix.patch patches/harfbuzz-kCTTypesetterOptionForcedEmbeddingLevel-Leopard.patch patches/itstool-config-python.patch patches/itstool-memory-management.patch patches/libgcrypt-cflags-for-cc-for-build.patch patches/libglade-gmodule.patch patches/libgpg-error-cflags-for-cc-for-build.patch patches/libnettle-cc-for-build-needs-cflags.patch patches/libnettle-cc-for-build-return.patch patches/liboil-use-ac-config-headers-macro.patch patches/libsoup-python.patch patches/libtasn1-inline-fix.patch patches/libunique-663913-sockaddr-un.patch patches/libxml2.9.10-conditional-parentheses.patch patches/p11-kit-dirfd.patch patches/patch status patches/patch-bundle-link-webcore.diff patches/patch-webkit2gtk-2282-os-log-availability.diff patches/patch-webkit2gtk-2282-unprotected-egl-changes.diff patches/patch-webkit2gtk-272-macports.diff patches/patch-webkit2gtk-macports.diff patches/py2cairo-python2.6-Dont-try-to-guess-arch.patch patches/pygobject-gdesktopappinfo-missing.patch patches/pygtk-libtool.patch patches/pygtk-pango-decls.patch patches/pygtk-pango1.4x.patch patches/python-issue27806_v3.patch patches/python-ldflags.patch patches/python2-linkflags.patch patches/python2-test_grammar.py-typo.patch patches/python2-xcode-stubs.patch patches/ragel-6.9-setiosflags.patch patches/ragel-configure.in.patch patches/tiff-nohtml.patch patches/vasnprintf.patch patches/webkit-133293-cfi-clang-failure.patch patches/webkit-140167-disable-netscape-api.patch patches/webkit-2.16-No-stringview-lifetime.patch patches/webkit-2.16-main-thread.patch patches/webkit-clang-fixes.patch patches/webkit-disable-apple-icu.patch patches/xmlto-allow-net-access.patch
Modified: README.md 10 lines changed, 5 insertions(+), 5 deletions(-) =================================================================== @@ -29,11 +29,11 @@ A brief description of the contents of the project directory: * *Papirus, Papirus-Dark*: Papirus GTK 3 icon theme with lots of unneeded icons removed to save space. * *iconbuilder.iconset*: source Geany icons for the bundle. -* *modulesets-stable*: copy of the modulesets-stable directory from - the [gtk-osx](https://gitlab.gnome.org/GNOME/gtk-osx/) project containing - dependency specifications. Since the upstram project is in a constant - state of flux and fails to build frequently, this allows us to make - a snapshot of a working configuration for our build. +* *modulesets-stable, patches*: copy of the modulesets-stable and patches + directory from the [gtk-osx](https://gitlab.gnome.org/GNOME/gtk-osx/) + project containing dependency specifications. Since the upstram project + is sometimes in an unstable state, this allows us to make a snapshot of + a working configuration for our build. * *geany_patches*: various patches fixing dependencies to enable bundling. * *utils*: various utility scripts.
Modified: patches/0001-Add-G_GNUC_PRINTF-on-all-functions-with-format-strin.patch 387 lines changed, 387 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,387 @@ +From 0955160e15ec303d4d3f6a56bd424c68a41b0a54 Mon Sep 17 00:00:00 2001 +From: Henrique Dante de Almeida hdante@gmail.com +Date: Sun, 13 Jan 2013 14:05:14 -0200 +Subject: [PATCH] Add G_GNUC_PRINTF on all functions with format strings + +This allows compilation with clang wihtout errors, even +when -Wformat-nonliteral is active (as long as there are +no real cases of non literal formatting). + +https://bugzilla.gnome.org/show_bug.cgi?id=691608 +--- + gio/gdbusauth.c | 1 + + gio/gdbusauthmechanismsha1.c | 1 + + gio/gdbusdaemon.c | 1 + + gio/gdbuserror.h | 4 ++-- + gio/gdbusmessage.c | 1 + + gio/gdbusmethodinvocation.h | 5 +++-- + gio/gsimpleasyncresult.h | 5 +++-- + gio/gtask.h | 2 +- + glib/gerror.c | 1 + + glib/gerror.h | 2 +- + glib/gmarkup.c | 2 ++ + glib/gmarkup.h | 2 +- + glib/gmessages.h | 4 ++-- + glib/gprintf.h | 8 ++++---- + glib/gstrfuncs.h | 3 ++- + glib/gstring.h | 6 ++++-- + glib/gutils.h | 3 ++- + glib/gvariant-parser.c | 4 ++++ + glib/tests/markup-escape.c | 1 + + glib/tests/string.c | 1 + + glib/tests/test-printf.c | 1 + + 21 files changed, 39 insertions(+), 19 deletions(-) + +diff --git a/gio/gdbusauth.c b/gio/gdbusauth.c +index 962a218..dd4cc2c 100644 +--- a/gio/gdbusauth.c ++++ b/gio/gdbusauth.c +@@ -46,6 +46,7 @@ + + #include "glibintl.h" + ++G_GNUC_PRINTF(1, 2) + static void + debug_print (const gchar *message, ...) + { +diff --git a/gio/gdbusauthmechanismsha1.c b/gio/gdbusauthmechanismsha1.c +index 4729208..5e8b6c0 100644 +--- a/gio/gdbusauthmechanismsha1.c ++++ b/gio/gdbusauthmechanismsha1.c +@@ -469,6 +469,7 @@ keyring_lookup_entry (const gchar *cookie_context, + } + + /* function for logging important events that the system administrator should take notice of */ ++G_GNUC_PRINTF(1, 2) + static void + _log (const gchar *message, + ...) +diff --git a/gio/gdbusdaemon.c b/gio/gdbusdaemon.c +index 35a724c..2393771 100644 +--- a/gio/gdbusdaemon.c ++++ b/gio/gdbusdaemon.c +@@ -1346,6 +1346,7 @@ handle_start_service_by_name (_GFreedesktopDBus *object, + return TRUE; + } + ++G_GNUC_PRINTF(5, 6) + static void + return_error (Client *client, GDBusMessage *message, + GQuark domain, +diff --git a/gio/gdbuserror.h b/gio/gdbuserror.h +index d32b928..c1d3e9c 100644 +--- a/gio/gdbuserror.h ++++ b/gio/gdbuserror.h +@@ -87,12 +87,12 @@ void g_dbus_error_set_dbus_error (GError **error, + const gchar *dbus_error_name, + const gchar *dbus_error_message, + const gchar *format, +- ...); ++ ...) G_GNUC_PRINTF(4, 5); + void g_dbus_error_set_dbus_error_valist (GError **error, + const gchar *dbus_error_name, + const gchar *dbus_error_message, + const gchar *format, +- va_list var_args); ++ va_list var_args) G_GNUC_PRINTF(4, 0); + gchar *g_dbus_error_encode_gerror (const GError *error); + + G_END_DECLS +diff --git a/gio/gdbusmessage.c b/gio/gdbusmessage.c +index ecbc033..9181029 100644 +--- a/gio/gdbusmessage.c ++++ b/gio/gdbusmessage.c +@@ -827,6 +827,7 @@ g_dbus_message_new_method_error_literal (GDBusMessage *method_call_message, + * + * Since: 2.26 + */ ++G_GNUC_PRINTF(3, 0) + GDBusMessage * + g_dbus_message_new_method_error_valist (GDBusMessage *method_call_message, + const gchar *error_name, +diff --git a/gio/gdbusmethodinvocation.h b/gio/gdbusmethodinvocation.h +index 9146b21..29cfe63 100644 +--- a/gio/gdbusmethodinvocation.h ++++ b/gio/gdbusmethodinvocation.h +@@ -55,12 +55,13 @@ void g_dbus_method_invocation_return_error (GDBusMetho + GQuark domain, + gint code, + const gchar *format, +- ...); ++ ...) G_GNUC_PRINTF(4, 5); + void g_dbus_method_invocation_return_error_valist (GDBusMethodInvocation *invocation, + GQuark domain, + gint code, + const gchar *format, +- va_list var_args); ++ va_list var_args) ++ G_GNUC_PRINTF(4, 0); + void g_dbus_method_invocation_return_error_literal (GDBusMethodInvocation *invocation, + GQuark domain, + gint code, +diff --git a/gio/gsimpleasyncresult.h b/gio/gsimpleasyncresult.h +index 6233369..1ea98f4 100644 +--- a/gio/gsimpleasyncresult.h ++++ b/gio/gsimpleasyncresult.h +@@ -110,7 +110,8 @@ void g_simple_async_result_set_error_va (GSimpleAsyncResult + GQuark domain, + gint code, + const char *format, +- va_list args); ++ va_list args) ++ G_GNUC_PRINTF(4, 0); + gboolean g_simple_async_result_is_valid (GAsyncResult *result, + GObject *source, + gpointer source_tag); +@@ -121,7 +122,7 @@ void g_simple_async_report_error_in_idle (GObject *object, + GQuark domain, + gint code, + const char *format, +- ...); ++ ...) G_GNUC_PRINTF(6, 7); + void g_simple_async_report_gerror_in_idle (GObject *object, + GAsyncReadyCallback callback, + gpointer user_data, +diff --git a/gio/gtask.h b/gio/gtask.h +index bb03226..d5a2d77 100644 +--- a/gio/gtask.h ++++ b/gio/gtask.h +@@ -61,7 +61,7 @@ void g_task_report_new_error (gpointer source_object, + GQuark domain, + gint code, + const char *format, +- ...); ++ ...) G_GNUC_PRINTF(7, 8); + + GLIB_AVAILABLE_IN_2_36 + void g_task_set_task_data (GTask *task, +diff --git a/glib/gerror.c b/glib/gerror.c +index e6ce3c0..2adbdf8 100644 +--- a/glib/gerror.c ++++ b/glib/gerror.c +@@ -645,6 +645,7 @@ g_clear_error (GError **err) + } + } + ++G_GNUC_PRINTF(2, 0) + static void + g_error_add_prefix (gchar **string, + const gchar *format, +diff --git a/glib/gerror.h b/glib/gerror.h +index f9020d6..8b5de28 100644 +--- a/glib/gerror.h ++++ b/glib/gerror.h +@@ -60,7 +60,7 @@ GError* g_error_new_literal (GQuark domain, + GError* g_error_new_valist (GQuark domain, + gint code, + const gchar *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(3, 0); + + void g_error_free (GError *error); + GError* g_error_copy (const GError *error); +diff --git a/glib/gmarkup.c b/glib/gmarkup.c +index 11f68de..bf7c008 100644 +--- a/glib/gmarkup.c ++++ b/glib/gmarkup.c +@@ -403,6 +403,7 @@ set_error_literal (GMarkupParseContext *context, + g_propagate_error (error, tmp_error); + } + ++G_GNUC_PRINTF(4, 5) + static void + set_error (GMarkupParseContext *context, + GError **error, +@@ -564,6 +565,7 @@ utf8_str (const gchar *utf8, + return buf; + } + ++G_GNUC_PRINTF(5, 6) + static void + set_unescape_error (GMarkupParseContext *context, + GError **error, +diff --git a/glib/gmarkup.h b/glib/gmarkup.h +index d26c2ad..d0eda4f 100644 +--- a/glib/gmarkup.h ++++ b/glib/gmarkup.h +@@ -214,7 +214,7 @@ gchar* g_markup_escape_text (const gchar *text, + gchar *g_markup_printf_escaped (const char *format, + ...) G_GNUC_PRINTF (1, 2); + gchar *g_markup_vprintf_escaped (const char *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(1, 0); + + typedef enum + { +diff --git a/glib/gmessages.h b/glib/gmessages.h +index 777cda2..d0c1930 100644 +--- a/glib/gmessages.h ++++ b/glib/gmessages.h +@@ -46,7 +46,7 @@ G_BEGIN_DECLS + /* calculate a string size, guaranteed to fit format + args. + */ + gsize g_printf_string_upper_bound (const gchar* format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(1, 0); + + /* Log level shift offset for user defined + * log levels (0-7 are used by GLib). +@@ -101,7 +101,7 @@ void g_log (const gchar *log_domain, + void g_logv (const gchar *log_domain, + GLogLevelFlags log_level, + const gchar *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(3, 0); + GLogLevelFlags g_log_set_fatal_mask (const gchar *log_domain, + GLogLevelFlags fatal_mask); + GLogLevelFlags g_log_set_always_fatal (GLogLevelFlags fatal_mask); +diff --git a/glib/gprintf.h b/glib/gprintf.h +index d96870f..2ed5ecc 100644 +--- a/glib/gprintf.h ++++ b/glib/gprintf.h +@@ -36,16 +36,16 @@ gint g_sprintf (gchar *string, + ...) G_GNUC_PRINTF (2, 3); + + gint g_vprintf (gchar const *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(1, 0); + gint g_vfprintf (FILE *file, + gchar const *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(2, 0); + gint g_vsprintf (gchar *string, + gchar const *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(2, 0); + gint g_vasprintf (gchar **string, + gchar const *format, +- va_list args); ++ va_list args) G_GNUC_PRINTF(2, 0); + + G_END_DECLS + +diff --git a/glib/gstrfuncs.h b/glib/gstrfuncs.h +index 3142485..e0752d3 100644 +--- a/glib/gstrfuncs.h ++++ b/glib/gstrfuncs.h +@@ -188,7 +188,8 @@ gchar* g_strdup (const gchar *str) G_GNUC_MALLOC; + gchar* g_strdup_printf (const gchar *format, + ...) G_GNUC_PRINTF (1, 2) G_GNUC_MALLOC; + gchar* g_strdup_vprintf (const gchar *format, +- va_list args) G_GNUC_MALLOC; ++ va_list args) G_GNUC_PRINTF(1, 0) ++ G_GNUC_MALLOC; + gchar* g_strndup (const gchar *str, + gsize n) G_GNUC_MALLOC; + gchar* g_strnfill (gsize length, +diff --git a/glib/gstring.h b/glib/gstring.h +index a97aa4e..c6a11ae 100644 +--- a/glib/gstring.h ++++ b/glib/gstring.h +@@ -109,13 +109,15 @@ GString* g_string_ascii_down (GString *string); + GString* g_string_ascii_up (GString *string); + void g_string_vprintf (GString *string, + const gchar *format, +- va_list args); ++ va_list args) ++ G_GNUC_PRINTF(2, 0); + void g_string_printf (GString *string, + const gchar *format, + ...) G_GNUC_PRINTF (2, 3); + void g_string_append_vprintf (GString *string, + const gchar *format, +- va_list args); ++ va_list args) ++ G_GNUC_PRINTF(2, 0); + void g_string_append_printf (GString *string, + const gchar *format, + ...) G_GNUC_PRINTF (2, 3); +diff --git a/glib/gutils.h b/glib/gutils.h +index 8102f53..6c21bf7 100644 +--- a/glib/gutils.h ++++ b/glib/gutils.h +@@ -187,7 +187,8 @@ gint g_snprintf (gchar *string, + gint g_vsnprintf (gchar *string, + gulong n, + gchar const *format, +- va_list args); ++ va_list args) ++ G_GNUC_PRINTF(3, 0); + + void g_nullify_pointer (gpointer *nullify_location); + +diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c +index e2e85ab..d5c036a 100644 +--- a/glib/gvariant-parser.c ++++ b/glib/gvariant-parser.c +@@ -78,6 +78,7 @@ typedef struct + gint start, end; + } SourceRef; + ++G_GNUC_PRINTF(5, 0) + static void + parser_set_error_va (GError **error, + SourceRef *location, +@@ -105,6 +106,7 @@ parser_set_error_va (GError **error, + g_string_free (msg, TRUE); + } + ++G_GNUC_PRINTF(5, 6) + static void + parser_set_error (GError **error, + SourceRef *location, +@@ -130,6 +132,7 @@ typedef struct + } TokenStream; + + ++G_GNUC_PRINTF(5, 6) + static void + token_stream_set_error (TokenStream *stream, + GError **error, +@@ -525,6 +528,7 @@ ast_free (AST *ast) + ast->class->free (ast); + } + ++G_GNUC_PRINTF(5, 6) + static void + ast_set_error (AST *ast, + GError **error, +diff --git a/glib/tests/markup-escape.c b/glib/tests/markup-escape.c +index 0cd90ef..b2de289 100644 +--- a/glib/tests/markup-escape.c ++++ b/glib/tests/markup-escape.c +@@ -96,6 +96,7 @@ unichar_test (gconstpointer d) + escape_test (&t); + } + ++G_GNUC_PRINTF(1, 3) + static void + test_format (const gchar *format, + const gchar *expected, +diff --git a/glib/tests/string.c b/glib/tests/string.c +index 454574b..ba55d3d 100644 +--- a/glib/tests/string.c ++++ b/glib/tests/string.c +@@ -106,6 +106,7 @@ test_string_new (void) + g_string_free (string2, TRUE); + } + ++G_GNUC_PRINTF(2, 3) + static void + my_string_printf (GString *string, + const gchar *format, +diff --git a/glib/tests/test-printf.c b/glib/tests/test-printf.c +index 10d0a1d..dbfc8fc 100644 +--- a/glib/tests/test-printf.c ++++ b/glib/tests/test-printf.c +@@ -942,6 +942,7 @@ _Pragma ("GCC diagnostic pop") + #endif + } + ++G_GNUC_PRINTF(1, 2) + static gsize + upper_bound (const gchar *format, ...) + { +-- +1.7.10.4 +
Modified: patches/0001-Bug-571582-GtkSelection-implementation-for-quartz.patch 875 lines changed, 875 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,875 @@ +From 7385087cae85e14bce61f8effba0f04aab070592 Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Sun, 11 Sep 2011 16:08:22 -0700 +Subject: [PATCH] Bug 571582: GtkSelection implementation for quartz. + +--- + gdk/quartz/gdkselection-quartz.c | 22 +- + gtk/Makefile.am | 4 +- + gtk/gtkselection-quartz.c | 674 ++++++++++++++++++++++++++++++++++++++ + gtk/gtkselection.c | 14 +- + 4 files changed, 701 insertions(+), 13 deletions(-) + create mode 100644 gtk/gtkselection-quartz.c + +diff --git a/gdk/quartz/gdkselection-quartz.c b/gdk/quartz/gdkselection-quartz.c +index 3accf32..f6048c8 100644 +--- a/gdk/quartz/gdkselection-quartz.c ++++ b/gdk/quartz/gdkselection-quartz.c +@@ -32,7 +32,8 @@ _gdk_quartz_display_set_selection_owner (GdkDisplay *display, + guint32 time, + gint send_event) + { +- /* FIXME: Implement */ ++ g_warning ("Not a valid interface on Quartz. Use GtkSelection.\n"); ++ g_return_val_if_reached(TRUE); + return TRUE; + } + +@@ -40,7 +41,7 @@ GdkWindow* + _gdk_quartz_display_get_selection_owner (GdkDisplay *display, + GdkAtom selection) + { +- /* FIXME: Implement */ ++ /* Quartz doesn't have an X-selection, so it doesn't have a gdk_selection. */ + return NULL; + } + +@@ -51,7 +52,9 @@ _gdk_quartz_display_convert_selection (GdkDisplay *display, + GdkAtom target, + guint32 time) + { +- /* FIXME: Implement */ ++ g_warning ("Not a valid interface on Quartz. Use GtkSelection.\n"); ++ g_return_if_reached(); ++ + } + + gint +@@ -61,7 +64,8 @@ _gdk_quartz_display_get_selection_property (GdkDisplay *display, + GdkAtom *ret_type, + gint *ret_format) + { +- /* FIXME: Implement */ ++ g_warning ("Quartz windows do not support properties.\n"); ++ g_return_val_if_reached (-1); + return 0; + } + +@@ -69,8 +73,8 @@ gchar * + _gdk_quartz_display_utf8_to_string_target (GdkDisplay *display, + const gchar *str) + { +- /* FIXME: Implement */ +- return NULL; ++ /* UTF8 is the standard string on OSX */ ++ return g_strdup (str); + } + + static gint +@@ -90,7 +94,7 @@ make_list (const gchar *text, + while (p < text + length) + { + gchar *str; +- ++ + q = p; + while (*q && q < text + length) + q++; +@@ -123,6 +127,8 @@ make_list (const gchar *text, + if (list) + *list = g_new0 (gchar *, n_strings + 1); + ++ (*list)[n_strings] = NULL; ++ + i = n_strings; + tmp_list = strings; + while (tmp_list) +@@ -163,7 +169,7 @@ _gdk_quartz_display_text_property_to_utf8_list (GdkDisplay *display, + { + gchar *enc_name = gdk_atom_name (encoding); + +- g_warning ("gdk_text_property_to_utf8_list_for_display: encoding %s not handled\n", enc_name); ++ g_warning ("gdk_text_property_to_utf8_list: encoding %s not handled\n", enc_name); + g_free (enc_name); + + if (list) +diff --git a/gtk/Makefile.am b/gtk/Makefile.am +index 55d7f22..de81d57 100644 +--- a/gtk/Makefile.am ++++ b/gtk/Makefile.am +@@ -798,7 +798,9 @@ if USE_QUARTZ + gtk_clipboard_dnd_c_sources = \ + gtkclipboard-quartz.c \ + gtkdnd-quartz.c \ +- gtkquartz.c ++ gtkquartz.c \ ++ gtkselection-quartz.c ++ + gtk_clipboard_dnd_h_sources = gtkquartz.h + else + gtk_clipboard_dnd_c_sources = gtkclipboard.c gtkdnd.c +diff --git a/gtk/gtkselection-quartz.c b/gtk/gtkselection-quartz.c +new file mode 100644 +index 0000000..1e948ad +--- /dev/null ++++ b/gtk/gtkselection-quartz.c +@@ -0,0 +1,674 @@ ++/* GTK - The GIMP Toolkit ++ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++/* This file implements most of the work of the ICCCM selection protocol. ++ * The code was written after an intensive study of the equivalent part ++ * of John Ousterhout's Tk toolkit, and does many things in much the ++ * same way. ++ * ++ * The one thing in the ICCCM that isn't fully supported here (or in Tk) ++ * is side effects targets. For these to be handled properly, MULTIPLE ++ * targets need to be done in the order specified. This cannot be ++ * guaranteed with the way we do things, since if we are doing INCR ++ * transfers, the order will depend on the timing of the requestor. ++ * ++ * By Owen Taylor owt1@cornell.edu 8/16/97 ++ */ ++ ++/* Terminology note: when not otherwise specified, the term "incr" below ++ * refers to the _sending_ part of the INCR protocol. The receiving ++ * portion is referred to just as "retrieval". (Terminology borrowed ++ * from Tk, because there is no good opposite to "retrieval" in English. ++ * "send" can't be made into a noun gracefully and we're already using ++ * "emission" for something else ....) ++ */ ++ ++/* The MOTIF entry widget seems to ask for the TARGETS target, then ++ (regardless of the reply) ask for the TEXT target. It's slightly ++ possible though that it somehow thinks we are responding negatively ++ to the TARGETS request, though I don't really think so ... */ ++ ++/* ++ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS ++ * file for a list of people on the GTK+ Team. See the ChangeLog ++ * files for a list of changes. These files are distributed with ++ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. ++ */ ++ ++#include "config.h" ++#include <stdarg.h> ++#include <string.h> ++#include "gdk.h" ++ ++#include "gtkmain.h" ++#include "gtkselection.h" ++#include "gtkselectionprivate.h" ++#include "gtktextbufferrichtext.h" ++#include "gtkintl.h" ++#include "gdk-pixbuf/gdk-pixbuf.h" ++#include "gtkclipboard.h" ++ ++#import <Cocoa/Cocoa.h> ++ ++#undef DEBUG_SELECTION ++/* ++ * DON'T USE THIS INTERFACE: USE GTKCLIPBOARD INSTEAD! ++ * ++ * This is the Quartz version of gtkselection. Unlike the other ++ * versions, it was written in 2010, after most code was rewritten to ++ * use GtkClipboard. Quartz, unlike X11, is not a remote-capable ++ * display system, so most of ICCCM is pointless. This implementation ++ * can therefore be much simpler than the X11 implementation. Text is ++ * a lot simpler, too. It's UTF8. No compound text, no legacy ++ * charsets. There's also only one display, so instead of passing it ++ * around, we'll generally just use gdk_display_get_default() when we ++ * need it. ++ * ++ * There are two constraints: The existing code in various GtkWidgets ++ * which uses GDK_SELECTION_CLIPBOARD (which gtkclipboard-quartz sets ++ * to generalPasteboard) for <ctrl>c copies and GDK_SELECTION_PRIMARY ++ * (for which gtkclipboard-quartz creates a separate pasteboard) for ++ * X-style selection transfers, and Apple's X11 Quartz implementation ++ * which by default puts both on the generalPasteboard. We need to ++ * operate with both. ++ * ++ * IMPORTANT: There is no X11 magic in quartz. If you insist on using ++ * this interface (and you really shouldn't), your MUST connect to ++ * selection-get, selection-received, and selection-clear-event for ++ * your widget. ++ */ ++ ++/* Maximum size of a sent chunk, in bytes. Also the default size of ++ our buffers */ ++ ++ ++#define IDLE_ABORT_TIME 30 ++ ++enum { ++ INCR, ++ MULTIPLE, ++ TARGETS, ++ TIMESTAMP, ++ SAVE_TARGETS, ++ LAST_ATOM ++}; ++ ++typedef struct _GtkSelectionInfo GtkSelectionInfo; ++ ++struct _GtkSelectionInfo ++{ ++ GdkAtom selection; ++ GtkWidget *owner; /* widget that owns selection */ ++ guint32 time; /* time used to acquire selection */ ++}; ++ ++ ++/* Local Functions */ ++static void gtk_selection_get_cb (GtkClipboard *clipboard, ++ GtkSelectionData *data, ++ guint info, ++ gpointer widget); ++static void gtk_selection_clear_cb (GtkClipboard *clipboard, ++ gpointer widget); ++static void gtk_selection_default_handler (GtkWidget *widget, ++ GtkSelectionData *data); ++static int gtk_selection_bytes_per_item (gint format); ++static GtkSelectionInfo *gtk_selection_info_get (GdkAtom selection); ++static void gtk_selection_info_remove (GdkAtom selection, ++ GtkWidget *owner); ++static void gtk_selection_info_append (GdkAtom selection, ++ GtkWidget *owner, ++ guint32 time); ++static void gtk_selection_info_clear (GtkWidget *owner); ++static GtkTargetList *gtk_selection_target_list_get (GtkWidget *widget, ++ GdkAtom selection); ++static void gtk_selection_target_list_remove (GtkWidget *widget); ++ ++/* Local Data */ ++static gint initialize = TRUE; ++static GList *current_selections = NULL; ++ ++static GdkAtom gtk_selection_atoms[LAST_ATOM]; ++static const char gtk_selection_handler_key[] = "gtk-selection-handlers"; ++ ++static GtkTargetEntry default_target = {"UTF8_STRING", 0, 1}; ++ ++/** ++ * gtk_selection_owner_set_for_display: ++ * @display: the #Gdkdisplay where the selection is set ++ * @widget: (allow-none): new selection owner (a #GdkWidget), or %NULL. ++ * @selection: an interned atom representing the selection to claim. ++ * @time_: timestamp with which to claim the selection ++ * ++ * Claim ownership of a given selection for a particular widget, or, ++ * if @widget is %NULL, release ownership of the selection. ++ * ++ * Return value: TRUE if the operation succeeded ++ * ++ * Since: 2.2 ++ */ ++gboolean ++gtk_selection_owner_set_for_display (GdkDisplay *display, ++ GtkWidget *widget, ++ GdkAtom selection, ++ guint32 time) ++{ ++ GObject *old_owner; ++ GtkClipboard *clip = gtk_clipboard_get (selection); ++ GtkTargetEntry *targets = &default_target; ++ gint num_targets = 1; ++ GtkTargetList *tlist; ++ ++ g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE); ++ g_return_val_if_fail (selection != GDK_NONE, FALSE); ++ ++ old_owner = gtk_clipboard_get_owner (clip); ++ if (old_owner) ++ gtk_selection_info_remove (selection, GTK_WIDGET(old_owner)); ++ ++ if (widget == NULL) ++ return TRUE; ++ ++ g_return_val_if_fail (gtk_widget_get_display (widget) == display, FALSE); ++ ++ if ((tlist = gtk_selection_target_list_get (widget, selection)) != NULL) ++ targets = gtk_target_table_new_from_list (tlist, &num_targets); ++ ++ if (gtk_clipboard_set_with_owner (clip, targets, num_targets, ++ gtk_selection_get_cb, ++ gtk_selection_clear_cb, ++ G_OBJECT (widget))) ++ { ++ gtk_selection_info_append (selection, widget, GDK_CURRENT_TIME); ++ return TRUE; ++ } ++ return FALSE; ++} ++ ++ ++typedef struct _GtkSelectionTargetList GtkSelectionTargetList; ++ ++struct _GtkSelectionTargetList { ++ GdkAtom selection; ++ GtkTargetList *list; ++}; ++ ++/** ++ * gtk_selection_remove_all: ++ * @widget: a #GtkWidget ++ * ++ * Removes all handlers and unsets ownership of all ++ * selections for a widget. Called when widget is being ++ * destroyed. This function will not generally be ++ * called by applications. ++ **/ ++void ++gtk_selection_remove_all (GtkWidget *widget) ++{ ++ g_return_if_fail(widget == NULL || GTK_IS_WIDGET(widget)); ++ gtk_selection_info_clear (widget); ++ /* Remove all selection lists */ ++ gtk_selection_target_list_remove (widget); ++} ++ ++ ++/** ++ * gtk_selection_convert: ++ * @widget: The widget which acts as requestor ++ * @selection: Which selection to get ++ * @target: Form of information desired (e.g., STRING) ++ * @time_: Time of request (usually of triggering event) ++ In emergency, you could use #GDK_CURRENT_TIME ++ * ++ * Requests the contents of a selection. When received, ++ * a "selection-received" signal will be generated. ++ * ++ * Return value: %TRUE if requested succeeded. %FALSE if we could not process ++ * request. (e.g., there was already a request in process for ++ * this widget). ++ **/ ++gboolean ++gtk_selection_convert (GtkWidget *widget, ++ GdkAtom selection, ++ GdkAtom target, ++ guint32 time_) ++{ ++ GtkClipboard *clip = gtk_clipboard_get (selection); ++ GtkSelectionData *data; ++ ++ g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); ++ g_return_val_if_fail (selection != GDK_NONE, FALSE); ++ ++ data = gtk_clipboard_wait_for_contents (clip, target); ++ if (data == NULL) ++ return FALSE; ++ ++ g_signal_emit_by_name (widget, "selection-received", data, time); ++ ++ return TRUE; ++} ++ ++ ++/** ++ * _gtk_selection_clear: ++ * @widget: a #GtkWidget ++ * @event: the event ++ * ++ * The default handler for the #GtkWidget::selection-clear-event ++ * signal. ++ * ++ * Return value: %TRUE if the event was handled, otherwise false ++ **/ ++gboolean ++_gtk_selection_clear (GtkWidget *widget, ++ GdkEventSelection *event) ++{ ++ gtk_selection_clear_targets (widget, event->selection); ++ return FALSE; ++} ++ ++ ++/************************************************************* ++ * _gtk_selection_request: ++ * Handler for "selection_request_event" ++ * arguments: ++ * widget: ++ * event: ++ * results: ++ *************************************************************/ ++ ++gboolean ++_gtk_selection_request (GtkWidget *widget, ++ GdkEventSelection *event) ++{ ++ g_print ("Selection Request Events should not occur in quartz\n"); ++ return TRUE; ++} ++ ++/************************************************************* ++ * _gtk_selection_incr_event: ++ * Called whenever an PropertyNotify event occurs for an ++ * GdkWindow with user_data == NULL. These will be notifications ++ * that a window we are sending the selection to via the ++ * INCR protocol has deleted a property and is ready for ++ * more data. ++ * ++ * arguments: ++ * window: the requestor window ++ * event: the property event structure ++ * ++ * results: ++ *************************************************************/ ++ ++gboolean ++_gtk_selection_incr_event (GdkWindow *window, ++ GdkEventProperty *event) ++{ ++ g_print ("Selection_INCR_Events should not occur in quartz\n"); ++ return TRUE; ++} ++ ++/************************************************************* ++ * _gtk_selection_notify: ++ * Handler for "selection-notify-event" signals on windows ++ * where a retrieval is currently in process. The selection ++ * owner has responded to our conversion request. ++ * arguments: ++ * widget: Widget getting signal ++ * event: Selection event structure ++ * info: Information about this retrieval ++ * results: ++ * was event handled? ++ *************************************************************/ ++ ++gboolean ++_gtk_selection_notify (GtkWidget *widget, ++ GdkEventSelection *event) ++{ ++ g_print ("Selection_Notifications should not occur in quartz\n"); ++ ++ return TRUE; ++} ++ ++/************************************************************* ++ * _gtk_selection_property_notify: ++ * Handler for "property-notify-event" signals on windows ++ * where a retrieval is currently in process. The selection ++ * owner has added more data. ++ * arguments: ++ * widget: Widget getting signal ++ * event: Property event structure ++ * info: Information about this retrieval ++ * results: ++ * was event handled? ++ *************************************************************/ ++ ++gboolean ++_gtk_selection_property_notify (GtkWidget *widget, ++ GdkEventProperty *event) ++{ ++ g_print ("Selection_Property_Notifications should not occur in quartz\n"); ++ return TRUE; ++} ++ ++ ++/************************************************************* ++ * gtk_selection_get_cb() ++ * @clipboard: The clipboard requesting the data ++ * @data: Pass to selection-get signal; handlers should put requested ++ * data in the structure pointed to. ++ * @info: DND uses this on Windows and X11. It can be ignored for ++ * normal selection use. ++ * @owner: The window to which the information request is sent; it's ++ * the owner set with gtk_selection_owner_set_for_display. ++ * ++ * Emits a signal to the owner window to fill in the provided data structure. ++ *************************************************************/ ++/* GtkClipboardGetFunc */ ++static void ++gtk_selection_get_cb (GtkClipboard* clipboard, ++ GtkSelectionData *data, ++ guint info, ++ gpointer owner) ++{ ++ GtkTargetList *target_list; ++ GtkWidget *widget = GTK_WIDGET (owner); ++ ++ ++ g_return_if_fail (widget != NULL); ++ ++ target_list = gtk_selection_target_list_get (widget, data->selection); ++ ++ if ( data->target == gtk_selection_atoms[TIMESTAMP] || ++ data->target == gtk_selection_atoms[TARGETS] || ++ data->target == gtk_selection_atoms[SAVE_TARGETS]) ++ { ++ gtk_selection_default_handler (widget, data); ++ return; ++ } ++ if (target_list && ++ gtk_target_list_find (target_list, data->target, &info)) ++ { ++ g_signal_emit_by_name (widget, ++ "selection-get", ++ data, ++ info, time); ++ } ++} ++ ++static void ++gtk_selection_clear_cb (GtkClipboard* clipboard, ++ gpointer owner) ++{ ++ GtkWidget *widget = GTK_WIDGET (owner); ++ GdkEventSelection event; ++ event.type = GDK_SELECTION_CLEAR; ++ event.selection = GDK_SELECTION_PRIMARY; ++ event.window = gtk_widget_get_window(widget); ++ g_signal_emit_by_name (widget, ++ "selection-clear-event", ++ &event, ++ NULL); ++} ++ ++/************************************************************* ++ * gtk_selection_default_handler: ++ * Handles some default targets that exist for any widget ++ * If it can't fit results into buffer, returns -1. This ++ * won't happen in any conceivable case, since it would ++ * require 1000 selection targets! ++ * ++ * arguments: ++ * widget: selection owner ++ * data: selection data [INOUT] ++ * ++ *************************************************************/ ++ ++static void ++gtk_selection_default_handler (GtkWidget *widget, ++ GtkSelectionData *data) ++{ ++ if (data->target == gtk_selection_atoms[TIMESTAMP]) ++ { ++ /* Time which was used to obtain selection */ ++ GList *tmp_list; ++ GtkSelectionInfo *selection_info; ++ ++ tmp_list = current_selections; ++ while (tmp_list) ++ { ++ selection_info = (GtkSelectionInfo *)tmp_list->data; ++ if ((selection_info->owner == widget) && ++ (selection_info->selection == data->selection)) ++ { ++ gulong time = selection_info->time; ++ ++ gtk_selection_data_set (data, ++ GDK_SELECTION_TYPE_INTEGER, ++ 32, ++ (guchar *)&time, ++ sizeof (time)); ++ return; ++ } ++ ++ tmp_list = tmp_list->next; ++ } ++ ++ data->length = -1; ++ } ++ else if (data->target == gtk_selection_atoms[TARGETS]) ++ { ++ /* List of all targets supported for this widget/selection pair */ ++ GdkAtom *p; ++ guint count; ++ GList *tmp_list; ++ GtkTargetList *target_list; ++ GtkTargetPair *pair; ++ ++ target_list = gtk_selection_target_list_get (widget, ++ data->selection); ++ count = g_list_length (target_list->list) + 3; ++ ++ data->type = GDK_SELECTION_TYPE_ATOM; ++ data->format = 32; ++ data->length = count * sizeof (GdkAtom); ++ ++ /* selection data is always terminated by a trailing \0 ++ */ ++ p = g_malloc (data->length + 1); ++ data->data = (guchar *)p; ++ data->data[data->length] = '\0'; ++ ++ *p++ = gtk_selection_atoms[TIMESTAMP]; ++ *p++ = gtk_selection_atoms[TARGETS]; ++ *p++ = gtk_selection_atoms[MULTIPLE]; ++ ++ tmp_list = target_list->list; ++ while (tmp_list) ++ { ++ pair = (GtkTargetPair *)tmp_list->data; ++ *p++ = pair->target; ++ ++ tmp_list = tmp_list->next; ++ } ++ } ++ else if (data->target == gtk_selection_atoms[SAVE_TARGETS]) ++ { ++ gtk_selection_data_set (data, ++ gdk_atom_intern_static_string ("NULL"), ++ 32, NULL, 0); ++ } ++ else ++ { ++ data->length = -1; ++ } ++} ++ ++static GtkSelectionInfo * ++gtk_selection_info_get (GdkAtom selection) ++{ ++ GList *tmp_list; ++ GList *next; ++ GtkSelectionInfo *selection_info; ++ ++ tmp_list = current_selections; ++ while (tmp_list) ++ { ++ next = tmp_list->next; ++ selection_info = (GtkSelectionInfo *)tmp_list->data; ++ ++ if (selection_info->selection == selection) ++ { ++ return selection_info; ++ } ++ ++ tmp_list = next; ++ } ++ return NULL; ++} ++ ++static void ++gtk_selection_info_remove (GdkAtom selection, GtkWidget *owner) ++{ ++ GList *tmp_list; ++ GList *next; ++ GtkSelectionInfo *selection_info; ++ ++ g_return_if_fail (GTK_IS_WIDGET (owner)); ++ ++ tmp_list = current_selections; ++ while (tmp_list) ++ { ++ next = tmp_list->next; ++ selection_info = (GtkSelectionInfo *)tmp_list->data; ++ ++ if (selection_info->selection == selection && ++ selection_info->owner == owner) ++ { ++ /* Clear the clipboard; this will send a changedOwner to the ++ pasteboard so that it won't try to retrieve the ++ still-pending types later when the window isn't around to ++ provide them. */ ++ GtkClipboard *clip = gtk_clipboard_get(selection_info->selection); ++ gtk_clipboard_clear(clip); ++ current_selections = g_list_remove_link (current_selections, ++ tmp_list); ++ g_list_free (tmp_list); ++ g_slice_free (GtkSelectionInfo, selection_info); ++ return; ++ } ++ ++ tmp_list = next; ++ } ++} ++static void ++gtk_selection_info_append (GdkAtom selection, GtkWidget *owner, guint32 time) ++{ ++ GtkSelectionInfo *selection_info; ++ ++ g_return_if_fail (GTK_IS_WIDGET (owner)); ++ ++ selection_info = g_slice_new (GtkSelectionInfo); ++ selection_info->selection = selection; ++ selection_info->owner = owner; ++ selection_info->time = time; ++ current_selections = g_list_prepend (current_selections, ++ selection_info); ++} ++ ++static void ++gtk_selection_info_clear (GtkWidget *owner) ++{ ++ GList *tmp_list; ++ GList *next; ++ GtkSelectionInfo *selection_info; ++ ++ g_return_if_fail (GTK_IS_WIDGET (owner)); ++ ++ tmp_list = current_selections; ++ while (tmp_list) ++ { ++ next = tmp_list->next; ++ selection_info = (GtkSelectionInfo *)tmp_list->data; ++ ++ if (selection_info->owner == owner) ++ { ++ current_selections = g_list_remove_link (current_selections, ++ tmp_list); ++ g_list_free (tmp_list); ++ g_slice_free (GtkSelectionInfo, selection_info); ++ } ++ ++ tmp_list = next; ++ } ++} ++ ++static GtkTargetList * ++gtk_selection_target_list_get (GtkWidget *widget, ++ GdkAtom selection) ++{ ++ GtkSelectionTargetList *sellist; ++ GList *tmp_list; ++ GList *lists; ++ ++ lists = g_object_get_data (G_OBJECT (widget), gtk_selection_handler_key); ++ ++ tmp_list = lists; ++ while (tmp_list) ++ { ++ sellist = tmp_list->data; ++ if (sellist->selection == selection) ++ return sellist->list; ++ tmp_list = tmp_list->next; ++ } ++ ++ sellist = g_slice_new (GtkSelectionTargetList); ++ sellist->selection = selection; ++ sellist->list = gtk_target_list_new (NULL, 0); ++ ++ lists = g_list_prepend (lists, sellist); ++ g_object_set_data (G_OBJECT (widget), I_(gtk_selection_handler_key), lists); ++ ++ return sellist->list; ++} ++ ++static void ++gtk_selection_target_list_remove (GtkWidget *widget) ++{ ++ GtkSelectionTargetList *sellist; ++ GList *tmp_list; ++ GList *lists; ++ ++ lists = g_object_get_data (G_OBJECT (widget), gtk_selection_handler_key); ++ ++ tmp_list = lists; ++ while (tmp_list) ++ { ++ sellist = tmp_list->data; ++ ++ gtk_target_list_unref (sellist->list); ++ ++ g_slice_free (GtkSelectionTargetList, sellist); ++ tmp_list = tmp_list->next; ++ } ++ ++ g_list_free (lists); ++ g_object_set_data (G_OBJECT (widget), I_(gtk_selection_handler_key), NULL); ++} ++ +diff --git a/gtk/gtkselection.c b/gtk/gtkselection.c +index 9e2295f..77bb934 100644 +--- a/gtk/gtkselection.c ++++ b/gtk/gtkselection.c +@@ -661,6 +661,7 @@ gtk_target_table_free (GtkTargetEntry *targets, + g_free (targets); + } + ++#ifndef GDK_WINDOWING_QUARTZ /* Quartz handled by gtkselection-quartz.c */ + /** + * gtk_selection_owner_set_for_display: + * @display: the #Gdkdisplay where the selection is set +@@ -763,7 +764,7 @@ gtk_selection_owner_set_for_display (GdkDisplay *display, + else + return FALSE; + } +- ++#endif /* GDK_WINDOWING_QUARTZ */ + /** + * gtk_selection_owner_set: + * @widget: (allow-none): a #GtkWidget, or %NULL. +@@ -965,7 +966,7 @@ gtk_selection_add_targets (GtkWidget *widget, + #endif + } + +- ++#ifndef GDK_WINDOWING_QUARTZ /* Quartz is handled in gtkselection-quartz.c */ + /** + * gtk_selection_remove_all: + * @widget: a #GtkWidget +@@ -1026,8 +1027,9 @@ gtk_selection_remove_all (GtkWidget *widget) + /* Remove all selection lists */ + gtk_selection_target_list_remove (widget); + } ++#endif /* GDK_WINDOWING_QUARTZ */ + +- ++#ifndef GDK_WINDOWING_QUARTZ /* Quartz is handled in gtkselection-quartz.c */ + /** + * gtk_selection_convert: + * @widget: The widget which acts as requestor +@@ -1138,7 +1140,7 @@ gtk_selection_convert (GtkWidget *widget, + + return TRUE; + } +- ++#endif /* GDK_WINDOWING_QUARTZ */ + /** + * gtk_selection_data_get_selection: + * @selection_data: a pointer to a #GtkSelectionData structure. +@@ -2232,6 +2234,7 @@ gtk_selection_init (void) + initialize = FALSE; + } + ++#ifndef GDK_WINDOWING_QUARTZ /* Quartz handled by gtkselection-quartz.c */ + /** + * _gtk_selection_clear: + * @widget: a #GtkWidget +@@ -2652,6 +2655,7 @@ _gtk_selection_incr_event (GdkWindow *window, + + return TRUE; + } ++#endif /* GDK_WINDOWING_QUARTZ */ + + /************************************************************* + * gtk_selection_incr_timeout: +@@ -2706,6 +2710,7 @@ gtk_selection_incr_timeout (GtkIncrInfo *info) + return retval; + } + ++#ifndef GDK_WINDOWING_QUARTZ /* Quartz handled by gtkselection-quartz.c */ + /************************************************************* + * _gtk_selection_notify: + * Handler for "selection-notify-event" signals on windows +@@ -2904,6 +2909,7 @@ _gtk_selection_property_notify (GtkWidget *widget, + + return TRUE; + } ++#endif /* GDK_WINDOWING_QUARTZ */ + + /************************************************************* + * gtk_selection_retrieval_timeout: +-- +1.7.6.3.dirty +
Modified: patches/0001-Bug-667759-gtkdnd-quartz.c-is-missing-annotations-fo.patch 47 lines changed, 47 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,47 @@ +From 4aebe6d4f08297066b231eee7aa15d33d8dd6d98 Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Fri, 3 May 2013 10:31:47 -0700 +Subject: [PATCH] Bug 667759 - gtkdnd-quartz.c is missing annotations for + introspection + +Work around this by introspecting gtkclipboard.c and gtkdnd.c instead +of the quartz alternatives. + +Note that this is temporary: The implementation of GdkSelection +will make the quartz alternatives unnecessary. See bug 571582. +--- + gtk/Makefile.am | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/gtk/Makefile.am b/gtk/Makefile.am +index 6e7bbf1..0b82797 100644 +--- a/gtk/Makefile.am ++++ b/gtk/Makefile.am +@@ -1313,13 +1313,23 @@ LDADDS = \ + $(GTK_DEP_LIBS) + + if HAVE_INTROSPECTION ++# The Quartz clipboard and dnd files aren't annotated for ++# introspection. Rather than copy the annotations over from the ++# regular files, exclude the quartz ones: + introspection_files = \ +- $(filter-out %private.h gtktextdisplay.h gtktextlayout.h, $(gtkinclude_HEADERS) $(deprecatedinclude_HEADERS)) \ ++ $(filter-out %private.h gtktextdisplay.h gtktextlayout.h, $(gtkinclude_HEADERS) $(deprecatedinclude_HEADERS) gtkclipboard-quartz.c gtkdnd-quartz.c) \ + $(gtk_base_c_sources) \ + gtkprintoperation-unix.c \ + gtktypebuiltins.h \ + gtktypebuiltins.c + ++# And include the regular ones: ++if USE_QUARTZ ++introspection_files += \ ++ gtkclipboard.c \ ++ gtkdnd.c ++endif ++ + if USE_X11 + introspection_files += \ + gtksocket.c \ +-- +1.8.3.rc0 +
Modified: patches/0001-Bug-670373-gtk2-modules-printing-cups-gtkprintbackendcups.patch 332 lines changed, 332 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,332 @@ +From bf8d9699ec228a8dd67c1bd1a84c38c398ba0b09 Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Sat, 25 Feb 2012 17:43:18 -0800 +Subject: [PATCH 1/9] [Bug 670373] modules/printing/cups/gtkprintbackendcups.c + won't build with CUPS 1.6 + + The first, simple changes. Turns off the deprecation warnings and + substitutes macros and short ifdef blocks where feasible. +--- + configure.in | 6 + + modules/printbackends/cups/gtkprintbackendcups.c | 146 +++++++++++++--------- + 2 files changed, 93 insertions(+), 59 deletions(-) + +diff --git a/configure.in b/configure.in +index dff4588..288ad0c 100644 +--- a/configure.in ++++ b/configure.in +@@ -1473,6 +1473,12 @@ else + AC_DEFINE(HAVE_CUPS_API_1_2, 1, + [Define to 1 if CUPS 1.2 API is available]) + fi ++ if test $CUPS_API_MAJOR -gt 1 -o \ ++ $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]) ++ ++ fi + + AC_SUBST(CUPS_API_MAJOR) + AC_SUBST(CUPS_API_MINOR) +diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c +index 59914ba..283a0ff 100644 +--- a/modules/printbackends/cups/gtkprintbackendcups.c ++++ b/modules/printbackends/cups/gtkprintbackendcups.c +@@ -30,6 +30,13 @@ + #include <sys/stat.h> + #include <stdlib.h> + #include <time.h> ++/* Cups 1.6 deprecates ppdFindAttr(), ppdFindCustomOption(), ++ * ppdFirstCustomParam(), and ppdNextCustomParam() among others. This ++ * turns off the warning so that it will compile. ++ */ ++#ifdef HAVE_CUPS_API_1_6 ++# define _PPD_DEPRECATED ++#endif + + #include <cups/cups.h> + #include <cups/language.h> +@@ -235,7 +242,22 @@ pb_module_create (void) + { + return gtk_print_backend_cups_new (); + } +- ++/* CUPS 1.6 Getter/Setter Functions CUPS 1.6 makes private most of the ++ * IPP structures and enforces access via new getter functions, which ++ * are unfortunately not available in earlier versions. We define ++ * below those getter functions as macros for use when building ++ * against earlier CUPS versions. ++ */ ++#ifndef HAVE_CUPS_API_1_6 ++#define ippGetOperation(ipp_request) ipp_request->request.op.operation_id ++#define ippGetInteger(attr, index) attr->values[index].integer ++#define ippGetBoolean(attr, index) attr->values[index].boolean ++#define ippGetString(attr, index, foo) attr->values[index].string.text ++#define ippGetValueTag(attr) attr->value_tag ++#define ippGetName(attr) attr->name ++#define ippGetCount(attr) attr->num_values ++#define ippGetGroupTag(attr) attr->group_tag ++#endif + /* + * GtkPrintBackendCups + */ +@@ -463,7 +485,7 @@ cups_print_cb (GtkPrintBackendCups *print_backend, + ipp_t *response = gtk_cups_result_get_response (result); + + if ((attr = ippFindAttribute (response, "job-id", IPP_TAG_INTEGER)) != NULL) +- job_id = attr->values[0].integer; ++ job_id = ippGetInteger (attr, 0); + + if (!gtk_print_job_get_track_print_status (ps->job) || job_id == 0) + gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_FINISHED); +@@ -900,7 +922,7 @@ request_password (gpointer data) + + dispatch->backend->authentication_lock = TRUE; + +- switch (dispatch->request->ipp_request->request.op.operation_id) ++ switch (ippGetOperation (dispatch->request->ipp_request)) + { + case IPP_PRINT_JOB: + if (job_title != NULL && printer_name != NULL) +@@ -928,7 +950,7 @@ request_password (gpointer data) + break; + default: + /* work around gcc warning about 0 not being a value for this enum */ +- if (dispatch->request->ipp_request->request.op.operation_id == 0) ++ if (ippGetOperation (dispatch->request->ipp_request) == 0) + prompt = g_strdup_printf ( _("Authentication is required to get a file from %s"), hostname); + else + prompt = g_strdup_printf ( _("Authentication is required on %s"), hostname); +@@ -1516,10 +1538,15 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend, + } + + data->counter++; +- ++ + response = gtk_cups_result_get_response (result); + + state = 0; ++ ++#ifdef HAVE_CUPS_API_1_6 ++ attr = ippFindAttribute (response, "job-state", IPP_TAG_INTEGER); ++ state = ippGetInteger (attr, 0); ++#else + for (attr = response->attrs; attr != NULL; attr = attr->next) + { + if (!attr->name) +@@ -1527,7 +1554,8 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend, + + _CUPS_MAP_ATTR_INT (attr, state, "job-state"); + } +- ++#endif ++ + done = FALSE; + switch (state) + { +@@ -1760,53 +1788,53 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, + gboolean is_accepting_jobs = TRUE; + gboolean default_printer = FALSE; + gboolean got_printer_type = FALSE; +- gchar *default_cover_before = NULL; +- gchar *default_cover_after = NULL; ++ const gchar *default_cover_before = NULL; ++ const gchar *default_cover_after = NULL; + gboolean remote_printer = FALSE; + gchar **auth_info_required = NULL; + + /* Skip leading attributes until we hit a printer... + */ +- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) ++ while (attr != NULL && ippGetGroupTag (attr) != IPP_TAG_PRINTER) + attr = attr->next; + + if (attr == NULL) + break; + +- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) ++ while (attr != NULL && ippGetGroupTag (attr) == IPP_TAG_PRINTER) + { +- if (strcmp (attr->name, "printer-name") == 0 && +- attr->value_tag == IPP_TAG_NAME) +- printer_name = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-uri-supported") == 0 && +- attr->value_tag == IPP_TAG_URI) +- printer_uri = attr->values[0].string.text; +- else if (strcmp (attr->name, "member-uris") == 0 && +- attr->value_tag == IPP_TAG_URI) +- member_uris = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-location") == 0) +- location = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-info") == 0) +- description = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-state-message") == 0) +- state_msg = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-state-reasons") == 0) ++ if (strcmp (ippGetName (attr), "printer-name") == 0 && ++ ippGetValueTag (attr) == IPP_TAG_NAME) ++ printer_name = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-uri-supported") == 0 && ++ ippGetValueTag (attr) == IPP_TAG_URI) ++ printer_uri = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "member-uris") == 0 && ++ ippGetValueTag (attr) == IPP_TAG_URI) ++ member_uris = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-location") == 0) ++ location = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-info") == 0) ++ description = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-state-message") == 0) ++ state_msg = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-state-reasons") == 0) + /* Store most important reason to reason_msg and set + its importance at printer_state_reason_level */ + { +- for (i = 0; i < attr->num_values; i++) ++ for (i = 0; i < ippGetCount (attr); i++) + { +- if (strcmp (attr->values[i].string.text, "none") != 0) ++ if (strcmp (ippGetString (attr, i, NULL), "none") != 0) + { + /* Sets is_paused flag for paused printer. */ +- if (strcmp (attr->values[i].string.text, "paused") == 0) ++ if (strcmp (ippGetString (attr, i, NULL), "paused") == 0) + { + is_paused = TRUE; + } + + interested_in = FALSE; + for (j = 0; j < G_N_ELEMENTS (reasons); j++) +- if (strncmp (attr->values[i].string.text, reasons[j], strlen (reasons[j])) == 0) ++ if (strncmp (ippGetString (attr, i, NULL), reasons[j], strlen (reasons[j])) == 0) + { + interested_in = TRUE; + break; +@@ -1814,87 +1842,87 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, + + if (interested_in) + { +- if (g_str_has_suffix (attr->values[i].string.text, "-report")) ++ if (g_str_has_suffix (ippGetString (attr, i, NULL), "-report")) + { + if (printer_state_reason_level <= 1) + { +- reason_msg = attr->values[i].string.text; ++ reason_msg = ippGetString (attr, i, NULL); + printer_state_reason_level = 1; + } + } +- else if (g_str_has_suffix (attr->values[i].string.text, "-warning")) ++ else if (g_str_has_suffix (ippGetString (attr, i, NULL), "-warning")) + { + if (printer_state_reason_level <= 2) + { +- reason_msg = attr->values[i].string.text; ++ reason_msg = ippGetString (attr, i, NULL); + printer_state_reason_level = 2; +- } ++ } + } + else /* It is error in the case of no suffix. */ + { +- reason_msg = attr->values[i].string.text; ++ reason_msg = ippGetString (attr, i, NULL); + printer_state_reason_level = 3; + } + } + } + } + } +- else if (strcmp (attr->name, "printer-state") == 0) +- state = attr->values[0].integer; +- else if (strcmp (attr->name, "queued-job-count") == 0) +- job_count = attr->values[0].integer; +- else if (strcmp (attr->name, "printer-is-accepting-jobs") == 0) ++ else if (strcmp (ippGetName (attr), "printer-state") == 0) ++ state = ippGetInteger (attr, 0); ++ else if (strcmp (ippGetName (attr), "queued-job-count") == 0) ++ job_count = ippGetInteger (attr, 0); ++ else if (strcmp (ippGetName (attr), "printer-is-accepting-jobs") == 0) + { +- if (attr->values[0].boolean == 1) ++ if (ippGetBoolean (attr, 0) == 1) + is_accepting_jobs = TRUE; + else + is_accepting_jobs = FALSE; + } +- else if (strcmp (attr->name, "job-sheets-supported") == 0) ++ else if (strcmp (ippGetName (attr), "job-sheets-supported") == 0) + { + if (cups_backend->covers == NULL) + { +- cups_backend->number_of_covers = attr->num_values; ++ cups_backend->number_of_covers = ippGetCount (attr); + cups_backend->covers = g_new (char *, cups_backend->number_of_covers + 1); + for (i = 0; i < cups_backend->number_of_covers; i++) +- cups_backend->covers[i] = g_strdup (attr->values[i].string.text); ++ cups_backend->covers[i] = g_strdup (ippGetString (attr, i, NULL)); + cups_backend->covers[cups_backend->number_of_covers] = NULL; + } + } +- else if (strcmp (attr->name, "job-sheets-default") == 0) ++ else if (strcmp (ippGetName (attr), "job-sheets-default") == 0) + { +- if (attr->num_values == 2) ++ if (ippGetCount (attr) == 2) + { +- default_cover_before = attr->values[0].string.text; +- default_cover_after = attr->values[1].string.text; ++ default_cover_before = ippGetString (attr, 0, NULL); ++ default_cover_after = ippGetString (attr, 1, NULL); + } + } +- else if (strcmp (attr->name, "printer-type") == 0) ++ else if (strcmp (ippGetName (attr), "printer-type") == 0) + { + got_printer_type = TRUE; +- if (attr->values[0].integer & 0x00020000) ++ if (ippGetInteger (attr, 0) & 0x00020000) + default_printer = TRUE; + else + default_printer = FALSE; + +- if (attr->values[0].integer & 0x00000002) ++ if (ippGetInteger (attr, 0) & 0x00000002) + remote_printer = TRUE; + else + remote_printer = FALSE; + } +- else if (strcmp (attr->name, "auth-info-required") == 0) ++ else if (strcmp (ippGetName (attr), "auth-info-required") == 0) + { +- if (strcmp (attr->values[0].string.text, "none") != 0) ++ if (strcmp (ippGetString (attr, 0, NULL), "none") != 0) + { +- auth_info_required = g_new0 (gchar *, attr->num_values + 1); +- for (i = 0; i < attr->num_values; i++) +- auth_info_required[i] = g_strdup (attr->values[i].string.text); ++ auth_info_required = g_new0 (gchar *, ippGetCount (attr) + 1); ++ for (i = 0; i < ippGetCount (attr); i++) ++ auth_info_required[i] = g_strdup (ippGetString (attr, i, NULL)); + } + } + else + { + GTK_NOTE (PRINTING, +- g_print ("CUPS Backend: Attribute %s ignored", attr->name)); ++ g_print ("CUPS Backend: Attribute %s ignored", ippGetName (attr))); + } + + attr = attr->next; +@@ -2707,7 +2735,7 @@ cups_request_default_printer_cb (GtkPrintBackendCups *print_backend, + response = gtk_cups_result_get_response (result); + + if ((attr = ippFindAttribute (response, "printer-name", IPP_TAG_NAME)) != NULL) +- print_backend->default_printer = g_strdup (attr->values[0].string.text); ++ print_backend->default_printer = g_strdup (ippGetString (attr, 0, NULL)); + + print_backend->got_default_printer = TRUE; + +-- +1.7.7.5 (Apple Git-28) +
Modified: patches/0001-Bug-670373-gtk3-modules-printing-cups-gtkprintbackendcups.patch 331 lines changed, 331 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,331 @@ +From 3c586545f528e18ef2a9fa9e2ff17fc369e3a38f Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Sat, 18 Feb 2012 14:16:27 -0800 +Subject: [PATCH 1/9] [Bug 670373] modules/printing/cups/gtkprintbackendcups.c + won't build with CUPS 1.6 + +The first, simple changes. Turns off the deprecation warnings and substitutes macros and short ifdef blocks where feasible. +--- + configure.in | 6 + + modules/printbackends/cups/gtkprintbackendcups.c | 146 +++++++++++++--------- + 2 files changed, 93 insertions(+), 59 deletions(-) + +diff --git a/configure.in b/configure.in +index 75761d5..85c5960 100644 +--- a/configure.in ++++ b/configure.in +@@ -1473,6 +1473,12 @@ else + AC_DEFINE(HAVE_CUPS_API_1_2, 1, + [Define to 1 if CUPS 1.2 API is available]) + fi ++ if test $CUPS_API_MAJOR -gt 1 -o \ ++ $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]) ++ ++ fi + + AC_SUBST(CUPS_API_MAJOR) + AC_SUBST(CUPS_API_MINOR) +diff --git a/modules/printbackends/cups/gtkprintbackendcups.c b/modules/printbackends/cups/gtkprintbackendcups.c +index 79d66cd..12c6ab6 100644 +--- a/modules/printbackends/cups/gtkprintbackendcups.c ++++ b/modules/printbackends/cups/gtkprintbackendcups.c +@@ -30,6 +30,13 @@ + #include <sys/stat.h> + #include <stdlib.h> + #include <time.h> ++/* Cups 1.6 deprecates ppdFindAttr(), ppdFindCustomOption(), ++ * ppdFirstCustomParam(), and ppdNextCustomParam() among others. This ++ * turns off the warning so that it will compile. ++ */ ++#ifdef HAVE_CUPS_API_1_6 ++# define _PPD_DEPRECATED ++#endif + + #include <cups/cups.h> + #include <cups/language.h> +@@ -235,7 +242,22 @@ pb_module_create (void) + { + return gtk_print_backend_cups_new (); + } +- ++/* CUPS 1.6 Getter/Setter Functions CUPS 1.6 makes private most of the ++ * IPP structures and enforces access via new getter functions, which ++ * are unfortunately not available in earlier versions. We define ++ * below those getter functions as macros for use when building ++ * against earlier CUPS versions. ++ */ ++#ifndef HAVE_CUPS_API_1_6 ++#define ippGetOperation(ipp_request) ipp_request->request.op.operation_id ++#define ippGetInteger(attr, index) attr->values[index].integer ++#define ippGetBoolean(attr, index) attr->values[index].boolean ++#define ippGetString(attr, index, foo) attr->values[index].string.text ++#define ippGetValueTag(attr) attr->value_tag ++#define ippGetName(attr) attr->name ++#define ippGetCount(attr) attr->num_values ++#define ippGetGroupTag(attr) attr->group_tag ++#endif + /* + * GtkPrintBackendCups + */ +@@ -463,7 +485,7 @@ cups_print_cb (GtkPrintBackendCups *print_backend, + ipp_t *response = gtk_cups_result_get_response (result); + + if ((attr = ippFindAttribute (response, "job-id", IPP_TAG_INTEGER)) != NULL) +- job_id = attr->values[0].integer; ++ job_id = ippGetInteger (attr, 0); + + if (!gtk_print_job_get_track_print_status (ps->job) || job_id == 0) + gtk_print_job_set_status (ps->job, GTK_PRINT_STATUS_FINISHED); +@@ -900,7 +922,7 @@ request_password (gpointer data) + + dispatch->backend->authentication_lock = TRUE; + +- switch (dispatch->request->ipp_request->request.op.operation_id) ++ switch (ippGetOperation (dispatch->request->ipp_request)) + { + case IPP_PRINT_JOB: + if (job_title != NULL && printer_name != NULL) +@@ -928,7 +950,7 @@ request_password (gpointer data) + break; + default: + /* work around gcc warning about 0 not being a value for this enum */ +- if (dispatch->request->ipp_request->request.op.operation_id == 0) ++ if (ippGetOperation (dispatch->request->ipp_request) == 0) + prompt = g_strdup_printf ( _("Authentication is required to get a file from %s"), hostname); + else + prompt = g_strdup_printf ( _("Authentication is required on %s"), hostname); +@@ -1516,10 +1538,15 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend, + } + + data->counter++; +- ++ + response = gtk_cups_result_get_response (result); + + state = 0; ++ ++#ifdef HAVE_CUPS_API_1_6 ++ attr = ippFindAttribute (response, "job-state", IPP_TAG_INTEGER); ++ state = ippGetInteger (attr, 0); ++#else + for (attr = response->attrs; attr != NULL; attr = attr->next) + { + if (!attr->name) +@@ -1527,7 +1554,8 @@ cups_request_job_info_cb (GtkPrintBackendCups *print_backend, + + _CUPS_MAP_ATTR_INT (attr, state, "job-state"); + } +- ++#endif ++ + done = FALSE; + switch (state) + { +@@ -1760,53 +1788,53 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, + gboolean is_accepting_jobs = TRUE; + gboolean default_printer = FALSE; + gboolean got_printer_type = FALSE; +- gchar *default_cover_before = NULL; +- gchar *default_cover_after = NULL; ++ const gchar *default_cover_before = NULL; ++ const gchar *default_cover_after = NULL; + gboolean remote_printer = FALSE; + gchar **auth_info_required = NULL; + + /* Skip leading attributes until we hit a printer... + */ +- while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) ++ while (attr != NULL && ippGetGroupTag (attr) != IPP_TAG_PRINTER) + attr = attr->next; + + if (attr == NULL) + break; + +- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) ++ while (attr != NULL && ippGetGroupTag (attr) == IPP_TAG_PRINTER) + { +- if (strcmp (attr->name, "printer-name") == 0 && +- attr->value_tag == IPP_TAG_NAME) +- printer_name = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-uri-supported") == 0 && +- attr->value_tag == IPP_TAG_URI) +- printer_uri = attr->values[0].string.text; +- else if (strcmp (attr->name, "member-uris") == 0 && +- attr->value_tag == IPP_TAG_URI) +- member_uris = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-location") == 0) +- location = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-info") == 0) +- description = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-state-message") == 0) +- state_msg = attr->values[0].string.text; +- else if (strcmp (attr->name, "printer-state-reasons") == 0) ++ if (strcmp (ippGetName (attr), "printer-name") == 0 && ++ ippGetValueTag (attr) == IPP_TAG_NAME) ++ printer_name = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-uri-supported") == 0 && ++ ippGetValueTag (attr) == IPP_TAG_URI) ++ printer_uri = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "member-uris") == 0 && ++ ippGetValueTag (attr) == IPP_TAG_URI) ++ member_uris = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-location") == 0) ++ location = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-info") == 0) ++ description = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-state-message") == 0) ++ state_msg = ippGetString (attr, 0, NULL); ++ else if (strcmp (ippGetName (attr), "printer-state-reasons") == 0) + /* Store most important reason to reason_msg and set + its importance at printer_state_reason_level */ + { +- for (i = 0; i < attr->num_values; i++) ++ for (i = 0; i < ippGetCount (attr); i++) + { +- if (strcmp (attr->values[i].string.text, "none") != 0) ++ if (strcmp (ippGetString (attr, i, NULL), "none") != 0) + { + /* Sets is_paused flag for paused printer. */ +- if (strcmp (attr->values[i].string.text, "paused") == 0) ++ if (strcmp (ippGetString (attr, i, NULL), "paused") == 0) + { + is_paused = TRUE; + } + + interested_in = FALSE; + for (j = 0; j < G_N_ELEMENTS (reasons); j++) +- if (strncmp (attr->values[i].string.text, reasons[j], strlen (reasons[j])) == 0) ++ if (strncmp (ippGetString (attr, i, NULL), reasons[j], strlen (reasons[j])) == 0) + { + interested_in = TRUE; + break; +@@ -1814,87 +1842,87 @@ cups_request_printer_list_cb (GtkPrintBackendCups *cups_backend, + + if (interested_in) + { +- if (g_str_has_suffix (attr->values[i].string.text, "-report")) ++ if (g_str_has_suffix (ippGetString (attr, i, NULL), "-report")) + { + if (printer_state_reason_level <= 1) + { +- reason_msg = attr->values[i].string.text; ++ reason_msg = ippGetString (attr, i, NULL); + printer_state_reason_level = 1; + } + } +- else if (g_str_has_suffix (attr->values[i].string.text, "-warning")) ++ else if (g_str_has_suffix (ippGetString (attr, i, NULL), "-warning")) + { + if (printer_state_reason_level <= 2) + { +- reason_msg = attr->values[i].string.text; ++ reason_msg = ippGetString (attr, i, NULL); + printer_state_reason_level = 2; +- } ++ } + } + else /* It is error in the case of no suffix. */ + { +- reason_msg = attr->values[i].string.text; ++ reason_msg = ippGetString (attr, i, NULL); + printer_state_reason_level = 3; + } + } + } + } + } +- else if (strcmp (attr->name, "printer-state") == 0) +- state = attr->values[0].integer; +- else if (strcmp (attr->name, "queued-job-count") == 0) +- job_count = attr->values[0].integer; +- else if (strcmp (attr->name, "printer-is-accepting-jobs") == 0) ++ else if (strcmp (ippGetName (attr), "printer-state") == 0) ++ state = ippGetInteger (attr, 0); ++ else if (strcmp (ippGetName (attr), "queued-job-count") == 0) ++ job_count = ippGetInteger (attr, 0); ++ else if (strcmp (ippGetName (attr), "printer-is-accepting-jobs") == 0) + { +- if (attr->values[0].boolean == 1) ++ if (ippGetBoolean (attr, 0) == 1) + is_accepting_jobs = TRUE; + else + is_accepting_jobs = FALSE; + } +- else if (strcmp (attr->name, "job-sheets-supported") == 0) ++ else if (strcmp (ippGetName (attr), "job-sheets-supported") == 0) + { + if (cups_backend->covers == NULL) + { +- cups_backend->number_of_covers = attr->num_values; ++ cups_backend->number_of_covers = ippGetCount (attr); + cups_backend->covers = g_new (char *, cups_backend->number_of_covers + 1); + for (i = 0; i < cups_backend->number_of_covers; i++) +- cups_backend->covers[i] = g_strdup (attr->values[i].string.text); ++ cups_backend->covers[i] = g_strdup (ippGetString (attr, i, NULL)); + cups_backend->covers[cups_backend->number_of_covers] = NULL; + } + } +- else if (strcmp (attr->name, "job-sheets-default") == 0) ++ else if (strcmp (ippGetName (attr), "job-sheets-default") == 0) + { +- if (attr->num_values == 2) ++ if (ippGetCount (attr) == 2) + { +- default_cover_before = attr->values[0].string.text; +- default_cover_after = attr->values[1].string.text; ++ default_cover_before = ippGetString (attr, 0, NULL); ++ default_cover_after = ippGetString (attr, 1, NULL); + } + } +- else if (strcmp (attr->name, "printer-type") == 0) ++ else if (strcmp (ippGetName (attr), "printer-type") == 0) + { + got_printer_type = TRUE; +- if (attr->values[0].integer & 0x00020000) ++ if (ippGetInteger (attr, 0) & 0x00020000) + default_printer = TRUE; + else + default_printer = FALSE; + +- if (attr->values[0].integer & 0x00000002) ++ if (ippGetInteger (attr, 0) & 0x00000002) + remote_printer = TRUE; + else + remote_printer = FALSE; + } +- else if (strcmp (attr->name, "auth-info-required") == 0) ++ else if (strcmp (ippGetName (attr), "auth-info-required") == 0) + { +- if (strcmp (attr->values[0].string.text, "none") != 0) ++ if (strcmp (ippGetString (attr, 0, NULL), "none") != 0) + { +- auth_info_required = g_new0 (gchar *, attr->num_values + 1); +- for (i = 0; i < attr->num_values; i++) +- auth_info_required[i] = g_strdup (attr->values[i].string.text); ++ auth_info_required = g_new0 (gchar *, ippGetCount (attr) + 1); ++ for (i = 0; i < ippGetCount (attr); i++) ++ auth_info_required[i] = g_strdup (ippGetString (attr, i, NULL)); + } + } + else + { + GTK_NOTE (PRINTING, +- g_print ("CUPS Backend: Attribute %s ignored", attr->name)); ++ g_print ("CUPS Backend: Attribute %s ignored", ippGetName (attr))); + } + + attr = attr->next; +@@ -2707,7 +2737,7 @@ cups_request_default_printer_cb (GtkPrintBackendCups *print_backend, + response = gtk_cups_result_get_response (result); + + if ((attr = ippFindAttribute (response, "printer-name", IPP_TAG_NAME)) != NULL) +- print_backend->default_printer = g_strdup (attr->values[0].string.text); ++ print_backend->default_printer = g_strdup (ippGetString (attr, 0, NULL)); + + print_backend->got_default_printer = TRUE; + +-- +1.7.7.5 (Apple Git-28) +
Modified: patches/0001-Bug-702516-Make-Werror-format-nonliteral-happy.patch 253 lines changed, 253 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,253 @@ +From 96e40ec7321990fe63fb41b1be0ceead21b3ffc3 Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Sun, 29 Sep 2013 11:40:25 -0700 +Subject: [PATCH] Bug 702516 - Make -Werror=format-nonliteral happy + +--- + gio/gcontenttype.c | 5 ++++- + gio/gthreadedresolver.c | 5 +++++ + glib/gfileutils.c | 50 +++++++++++++++++++++++++++++++++++-------------- + glib/gmarkup.c | 7 ++++++- + glib/gstrfuncs.c | 6 +++++- + glib/gutils.c | 5 +++++ + 6 files changed, 61 insertions(+), 17 deletions(-) + +diff --git a/gio/gcontenttype.c b/gio/gcontenttype.c +index 575d6fe..8dc5896 100644 +--- a/gio/gcontenttype.c ++++ b/gio/gcontenttype.c +@@ -393,6 +393,8 @@ g_content_type_get_mime_type (const char *type) + return g_strdup (type); + } + ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" + + static GIcon * + g_content_type_get_icon_internal (const gchar *type, +@@ -423,7 +425,7 @@ g_content_type_get_icon_internal (const gchar *type, + G_LOCK (gio_xdgmime); + xdg_icon = xdg_mime_get_icon (type); + G_UNLOCK (gio_xdgmime); +- if (xdg_icon != NULL) ++ if (xdg_icon != NULL) + xdg_mimetype_icon = g_strdup_printf (file_template, xdg_icon); + + if (xdg_mimetype_icon) +@@ -450,6 +452,7 @@ g_content_type_get_icon_internal (const gchar *type, + + return themed_icon; + } ++#pragma GCC diagnostic pop + + /** + * g_content_type_get_icon: +diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c +index 37f930c..1ffaf15 100644 +--- a/gio/gthreadedresolver.c ++++ b/gio/gthreadedresolver.c +@@ -505,6 +505,9 @@ g_resolver_record_type_to_rrtype (GResolverRecordType type) + g_return_val_if_reached (-1); + } + ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" ++ + static GList * + g_resolver_records_from_res_query (const gchar *rrname, + gint rrtype, +@@ -619,6 +622,8 @@ g_resolver_records_from_res_query (const gchar *rrname, + return records; + } + ++#pragma GCC diagnostic pop ++ + #elif defined(G_OS_WIN32) + + static GVariant * +diff --git a/glib/gfileutils.c b/glib/gfileutils.c +index 7e5bedc..eb5baea 100644 +--- a/glib/gfileutils.c ++++ b/glib/gfileutils.c +@@ -1004,25 +1004,47 @@ rename_file (const char *old_name, + return TRUE; + } + +-/* format string must have two '%s': +- * +- * - the place for the filename +- * - the place for the strerror +- */ +-static void +-format_error_message (GError **error, +- const gchar *filename, ++static char * ++format_error_message (const gchar *filename, ++ const gchar *format_string) G_GNUC_FORMAT(2); ++ ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" ++ ++static char * ++format_error_message (const gchar *filename, + const gchar *format_string) + { + gint saved_errno = errno; + gchar *display_name; ++ gchar *msg; + + display_name = g_filename_display_name (filename); ++ msg = g_strdup_printf (format_string, display_name, g_strerror (saved_errno)); ++ g_free (display_name); ++ ++ return msg; ++} + +- g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (saved_errno), +- format_string, display_name, g_strerror (saved_errno)); ++#pragma GCC diagnostic pop + +- g_free (display_name); ++/* format string must have two '%s': ++ * ++ * - the place for the filename ++ * - the place for the strerror ++ */ ++static void ++set_file_error (GError **error, ++ const gchar *filename, ++ const gchar *format_string) ++ ++{ ++ int saved_errno = errno; ++ char *msg = format_error_message (filename, format_string); ++ ++ g_set_error_literal (error, G_FILE_ERROR, g_file_error_from_errno (saved_errno), ++ msg); ++ g_free (msg); + } + + static gchar * +@@ -1044,7 +1066,7 @@ write_to_temp_file (const gchar *contents, + + if (fd == -1) + { +- format_error_message (err, tmp_name, _("Failed to create file '%s': %s")); ++ set_file_error (err, tmp_name, _("Failed to create file '%s': %s")); + goto out; + } + +@@ -1068,7 +1090,7 @@ write_to_temp_file (const gchar *contents, + if (errno == EINTR) + continue; + +- format_error_message (err, tmp_name, _("Failed to write file '%s': write() failed: %s")); ++ set_file_error (err, tmp_name, _("Failed to write file '%s': write() failed: %s")); + close (fd); + g_unlink (tmp_name); + +@@ -1108,7 +1130,7 @@ write_to_temp_file (const gchar *contents, + */ + if (g_lstat (dest_file, &statbuf) == 0 && statbuf.st_size > 0 && fsync (fd) != 0) + { +- format_error_message (err, tmp_name, _("Failed to write file '%s': fsync() failed: %s")); ++ set_file_error (err, tmp_name, _("Failed to write file '%s': fsync() failed: %s")); + close (fd); + g_unlink (tmp_name); + +diff --git a/glib/gmarkup.c b/glib/gmarkup.c +index 552773f..fb02a42 100644 +--- a/glib/gmarkup.c ++++ b/glib/gmarkup.c +@@ -2366,6 +2366,9 @@ find_conversion (const char *format, + * + * Since: 2.4 + */ ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" ++ + gchar * + g_markup_vprintf_escaped (const gchar *format, + va_list args) +@@ -2430,6 +2433,7 @@ g_markup_vprintf_escaped (const gchar *format, + G_VA_COPY (args2, args); + + output1 = g_strdup_vprintf (format1->str, args); ++ + if (!output1) + { + va_end (args2); +@@ -2440,7 +2444,6 @@ g_markup_vprintf_escaped (const gchar *format, + va_end (args2); + if (!output2) + goto cleanup; +- + result = g_string_new (NULL); + + /* Iterate through the original format string again, +@@ -2492,6 +2495,8 @@ g_markup_vprintf_escaped (const gchar *format, + return NULL; + } + ++#pragma GCC diagnostic pop ++ + /** + * g_markup_printf_escaped: + * @format: printf() style format string +diff --git a/glib/gstrfuncs.c b/glib/gstrfuncs.c +index 9509233..4fcd91c 100644 +--- a/glib/gstrfuncs.c ++++ b/glib/gstrfuncs.c +@@ -881,6 +881,9 @@ g_ascii_dtostr (gchar *buffer, + return g_ascii_formatd (buffer, buf_len, "%.17g", d); + } + ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" ++ + /** + * g_ascii_formatd: + * @buffer: A buffer to place the resulting string in +@@ -909,7 +912,7 @@ g_ascii_formatd (gchar *buffer, + locale_t old_locale; + + old_locale = uselocale (get_C_locale ()); +- _g_snprintf (buffer, buf_len, format, d); ++ _g_snprintf (buffer, buf_len, format, d); + uselocale (old_locale); + + return buffer; +@@ -988,6 +991,7 @@ g_ascii_formatd (gchar *buffer, + return buffer; + #endif + } ++#pragma GCC diagnostic pop + + #define ISSPACE(c) ((c) == ' ' || (c) == '\f' || (c) == '\n' || \ + (c) == '\r' || (c) == '\t' || (c) == '\v') +diff --git a/glib/gutils.c b/glib/gutils.c +index 0a9944f..2620cb6 100644 +--- a/glib/gutils.c ++++ b/glib/gutils.c +@@ -2148,6 +2148,9 @@ g_format_size (guint64 size) + * Flags to modify the format of the string returned by g_format_size_full(). + */ + ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wformat-nonliteral" ++ + /** + * g_format_size_full: + * @size: a size in bytes +@@ -2281,6 +2284,8 @@ g_format_size_full (guint64 size, + return g_string_free (string, FALSE); + } + ++#pragma GCC diagnostic pop ++ + /** + * g_format_size_for_display: + * @size: a size in bytes +-- +1.8.3.rc0 +
Modified: patches/0001-Bug-707945-GTK2-Quartz-typeahead-find-in-GtkTreeView.patch 69 lines changed, 69 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,69 @@ +From 8407a6268b69ebf127240f5ad4372cabedb6891a Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Sun, 28 Dec 2014 14:54:14 -0800 +Subject: [PATCH] Bug 707945 - GTK2/Quartz: 'typeahead find' in GtkTreeView no + longer + +accepts text input + +Get win from the event rather than from the IMContextQuartz's client window, +because it's the event window that will eventually be called on to insert +the text. +--- + modules/input/imquartz.c | 26 +++++++++++++++++--------- + 1 file changed, 17 insertions(+), 9 deletions(-) + +diff --git a/modules/input/imquartz.c b/modules/input/imquartz.c +index 67c7d6c..b72d05f 100644 +--- a/modules/input/imquartz.c ++++ b/modules/input/imquartz.c +@@ -194,15 +194,6 @@ quartz_filter_keypress (GtkIMContext *context, + if (!qc->client_window) + return FALSE; + +- nsview = gdk_quartz_window_get_nsview (qc->client_window); +- if (GDK_IS_WINDOW (nsview)) +- /* it gets GDK_WINDOW in some cases */ +- return gtk_im_context_filter_keypress (qc->slave, event); +- else +- win = (GdkWindow *)[ (GdkQuartzView *)nsview gdkWindow]; +- GTK_NOTE (MISC, g_print ("client_window: %p, win: %p, nsview: %p\n", +- qc->client_window, win, nsview)); +- + NSEvent *nsevent = gdk_quartz_event_get_nsevent ((GdkEvent *)event); + + if (!nsevent) +@@ -214,6 +205,22 @@ quartz_filter_keypress (GtkIMContext *context, + return gtk_im_context_filter_keypress (qc->slave, event); + } + ++ nsview = gdk_quartz_window_get_nsview (qc->client_window); ++ if (GDK_IS_WINDOW (nsview)) ++ /* it gets GDK_WINDOW in some cases */ ++ return gtk_im_context_filter_keypress (qc->slave, event); ++ else ++ /* It's the window in the event, not the window that Gtk thinks ++ * has focus, that NSTextInputClient calls to insert the text, so ++ * we need to pass the right window to output_result in order to ++ * get it back. ++ */ ++ win = (GdkWindow *)[(GdkQuartzView *)[[nsevent window] contentView] gdkWindow]; ++ ++ GTK_NOTE (MISC, g_print ("client_window: %p, win: %p, nsview: %p\n", ++ qc->client_window, win, nsview)); ++ ++ + if (event->type == GDK_KEY_RELEASE) + return FALSE; + +@@ -226,6 +233,7 @@ quartz_filter_keypress (GtkIMContext *context, + g_object_set_data (G_OBJECT (win), TIC_IN_KEY_DOWN, + GUINT_TO_POINTER (TRUE)); + [nsview keyDown: nsevent]; ++ + } + /* JIS_Eisu || JIS_Kana */ + if (event->hardware_keycode == 102 || event->hardware_keycode == 104) +-- +1.8.3.rc0 +
Modified: patches/0001-Bug-708998-Avoid-infinite-loop.patch 42 lines changed, 42 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,42 @@ +From e1dcd5c77d52db0033cafd23d84f392c4d9f457e Mon Sep 17 00:00:00 2001 +From: Hamish Mackenzie Hamish.K.Mackenzie@googlemail.com +Date: Sun, 29 Sep 2013 05:06:53 +1300 +Subject: [PATCH] Fix infinite loop in gdkevents.c _gdk_event_queue_find_first + +--- + gdk/gdkevents.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c +index 327b543..e770f47 100644 +--- a/gdk/gdkevents.c ++++ b/gdk/gdkevents.c +@@ -96,16 +96,16 @@ _gdk_event_queue_find_first (GdkDisplay *display) + { + GdkEventPrivate *event = tmp_list->data; + +- if (event->flags & GDK_EVENT_PENDING) +- continue; +- +- if (pending_motion) +- return pending_motion; ++ if (!(event->flags & GDK_EVENT_PENDING)) ++ { ++ if (pending_motion) ++ return pending_motion; + +- if (event->event.type == GDK_MOTION_NOTIFY && !display->flushing_events) +- pending_motion = tmp_list; +- else +- return tmp_list; ++ if (event->event.type == GDK_MOTION_NOTIFY && !display->flushing_events) ++ pending_motion = tmp_list; ++ else ++ return tmp_list; ++ } + + tmp_list = g_list_next (tmp_list); + } +-- +1.7.12.4 (Apple Git-37) +
Modified: patches/0001-Bug-709939-quartz-window-pos.patch 17 lines changed, 17 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,17 @@ +diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c +index e83c87b..e28f3b2 100644 +--- a/gdk/quartz/gdkscreen-quartz.c ++++ b/gdk/quartz/gdkscreen-quartz.c +@@ -208,7 +208,11 @@ _gdk_quartz_screen_update_window_sizes (GdkScreen *screen) + windows = gdk_screen_get_toplevel_windows (screen); + + for (list = windows; list; list = list->next) +- _gdk_quartz_window_update_position (list->data); ++ { ++ if (GDK_WINDOW_TYPE(list->data) == GDK_WINDOW_OFFSCREEN) ++ continue; ++ _gdk_quartz_window_update_position (list->data); ++ } + + g_list_free (windows); + }
Modified: patches/0001-Enable-use-of-XDG_DATA_DIRS-for-locating-iso-code-fi.patch 29 lines changed, 29 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,29 @@ +From afc08dfa25dc5a26d3f0ffae8bf31d3be0e89b57 Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Fri, 9 Sep 2016 15:46:34 -0700 +Subject: [PATCH] Enable use of XDG_DATA_DIRS for locating iso-code files. + +Permits using them in a relocatable package like a Mac application bundle. +--- + gtkspell/gtkspell-codetable.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/gtkspell/gtkspell-codetable.c b/gtkspell/gtkspell-codetable.c +index b53951f..dcb5f1e 100644 +--- a/gtkspell/gtkspell-codetable.c ++++ b/gtkspell/gtkspell-codetable.c +@@ -103,7 +103,10 @@ iso_codes_parse (const GMarkupParser *parser, + gchar *filename; + GError *error = NULL; + +- filename = g_build_filename (ISO_CODES_PREFIX, "share", "xml", "iso-codes", ++ const gchar *dirname = g_getenv("XDG_DATA_DIRS"); ++ if (dirname == NULL) ++ dirname = g_build_filename (ISO_CODES_PREFIX, "share", NULL); ++ filename = g_build_filename (dirname, "xml", "iso-codes", + basename, NULL); + mapped_file = g_mapped_file_new (filename, FALSE, &error); + g_free (filename); +-- +2.2.2 +
Modified: patches/0001-Fix-DnD-Introspection-on-Quartz-Backend.patch 26 lines changed, 26 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,26 @@ +From 673013ac67e322ff86193001131255fc24a68d5e Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Fri, 29 May 2015 13:04:07 -0700 +Subject: [PATCH] Fix DnD Introspection on Quartz Backend. + +Don't exclude the -quartz.c files from introspection_files. +--- + gtk/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gtk/Makefile.am b/gtk/Makefile.am +index 51153e6..ae4ae62 100644 +--- a/gtk/Makefile.am ++++ b/gtk/Makefile.am +@@ -1331,7 +1331,7 @@ distclean-local: + if HAVE_INTROSPECTION + introspection_files = \ + $(filter-out %private.h gtktextdisplay.h gtktextlayout.h gtkx.h, $(gtkinclude_HEADERS) $(a11yinclude_HEADERS) $(deprecatedinclude_HEADERS)) \ +- $(filter-out %win32.c %quartz.c, $(gtk_base_c_sources)) \ ++ $(filter-out %win32.c, $(gtk_base_c_sources)) \ + gtkprintoperation-unix.c \ + gtktypebuiltins.h \ + gtktypebuiltins.c +-- +2.2.2 +
Modified: patches/0001-Fix-relative-module-paths.patch 42 lines changed, 42 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,42 @@ +From 2332e82a1415696a36f138768b8330c1e97d3a89 Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Sat, 3 Nov 2012 11:46:59 -0700 +Subject: [PATCH] Fix relative module paths + +So that the created absolute path is where the modules are installed +instead of where the modules file is installed (i.e., +lib/pango/1.8.0/modules instead of etc/pango). +--- + pango/modules.c | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +diff --git a/pango/modules.c b/pango/modules.c +index 644cc9c..c5a19f2 100644 +--- a/pango/modules.c ++++ b/pango/modules.c +@@ -450,11 +450,17 @@ process_module_file (FILE *module_file, const gchar *module_file_dir) + switch (i) + { + case 0: +- if (!g_path_is_absolute (tmp_buf->str)) { +- const gchar *abs_file_name = g_build_filename (module_file_dir, tmp_buf->str, NULL); +- g_string_assign (tmp_buf, abs_file_name); +- g_free ((gpointer) abs_file_name); +- } ++ if (!g_path_is_absolute (tmp_buf->str)) ++ { ++ const gchar *lib_dir = pango_get_lib_subdirectory (); ++ const gchar *abs_file_name = g_build_filename (lib_dir, ++ MODULE_VERSION, ++ "modules", ++ tmp_buf->str, ++ NULL); ++ g_string_assign (tmp_buf, abs_file_name); ++ g_free ((gpointer) abs_file_name); ++ } + pair->module = find_or_create_module (tmp_buf->str); + break; + case 1: +-- +1.7.9.6 (Apple Git-31.1) +
Modified: patches/0001-Make-ATSUI-backend-compile-again.patch 74 lines changed, 74 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,74 @@ +From 18dc8d4059c6c21f62caa75d0e0ff7d3d14d8649 Mon Sep 17 00:00:00 2001 +From: Kristian Rietveld kris@gtk.org +Date: Fri, 1 Jul 2011 21:08:39 +0200 +Subject: [PATCH] Make ATSUI backend compile again + +Commit 02f80c9acdec53f58fef0e12f41363c3c4ea1efe broke the build and was +likely committed untested. + +pango-1-29-4 was branched from tag 1.29.3, before this fix was applied +to master. + +Note that the problem affects only OS X 10.4 (Tiger); pango builds on +later OS X versions without this change. +--- + pango/pangoatsui-fontmap.c | 8 ++++++-- + pango/pangoatsui-private.h | 2 ++ + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/pango/pangoatsui-fontmap.c b/pango/pangoatsui-fontmap.c +index 8eb123a..c169f0d 100644 +--- a/pango/pangoatsui-fontmap.c ++++ b/pango/pangoatsui-fontmap.c +@@ -70,6 +70,8 @@ struct _PangoATSUIFace + static GType pango_atsui_family_get_type (void); + static GType pango_atsui_face_get_type (void); + ++static gpointer pango_atsui_face_parent_class; ++ + static const char * + get_real_family (const char *family_name) + { +@@ -200,6 +202,8 @@ pango_atsui_family_is_monospace (PangoFontFamily *family) + return atsuifamily->is_monospace; + } + ++G_DEFINE_TYPE (PangoATSUIFamily, pango_atsui_family, PANGO_TYPE_FONT_FAMILY); ++ + static void + pango_atsui_family_finalize (GObject *object) + { +@@ -219,8 +223,6 @@ pango_atsui_family_finalize (GObject *object) + G_OBJECT_CLASS (pango_atsui_family_parent_class)->finalize (object); + } + +-G_DEFINE_TYPE (PangoATSUIFamilyClass, pango_atsui_family, PANGO_TYPE_FONT_FAMILY); +- + static void + pango_atsui_family_class_init (PangoATSUIFamilyClass *class) + { +@@ -337,6 +339,8 @@ pango_atsui_face_class_init (PangoFontFaceClass *class) + { + GObjectClass *object_class = (GObjectClass *)class; + ++ pango_atsui_face_parent_class = g_type_class_peek_parent (class); ++ + object_class->finalize = pango_atsui_face_finalize; + + class->describe = pango_atsui_face_describe; +diff --git a/pango/pangoatsui-private.h b/pango/pangoatsui-private.h +index a5ab0cb..81bcf60 100644 +--- a/pango/pangoatsui-private.h ++++ b/pango/pangoatsui-private.h +@@ -38,6 +38,8 @@ G_BEGIN_DECLS + + + typedef struct _PangoATSUIFamily PangoATSUIFamily; ++typedef struct _PangoFontFamilyClass PangoATSUIFamilyClass; ++ + typedef struct _PangoATSUIFace PangoATSUIFace; + + typedef struct _PangoATSUIFontMap PangoATSUIFontMap; +-- +1.7.6.3.dirty +
Modified: patches/0001-Patch-Orbit-2.14.19-to-master-for-current-GLib.patch 1963 lines changed, 1963 insertions(+), 0 deletions(-) =================================================================== @@ -0,0 +1,1963 @@ +From 8b6f17f1bf1a253b5d39bfd30c764c63b65001ef Mon Sep 17 00:00:00 2001 +From: John Ralls jralls@ceridwen.us +Date: Tue, 1 Oct 2013 16:37:01 -0700 +Subject: [PATCH] Patch Orbit-2.14.19 to master for current GLib + +--- + NEWS | 7 + + configure.ac | 424 ++++++++++++++++++++++++++++++++ + configure.in | 413 ------------------------------- + include/orbit/GIOP/giop-types.h | 5 + + include/orbit/GIOP/giop.h | 1 + + include/orbit/orb-core/corba-orb-type.h | 3 + + include/orbit/orb-core/corba-orb.h | 2 + + include/orbit/poa/orbit-adaptor.h | 3 + + include/orbit/util/basic_types.h | 8 - + linc2/src/Makefile.am | 6 +- + linc2/src/linc-connection.c | 17 +- + linc2/src/linc-private.h | 3 + + linc2/src/linc-protocols.c | 1 + + linc2/src/linc.c | 40 ++- + linc2/test/Makefile.am | 2 +- + src/idl-compiler/Makefile.am | 2 +- + src/orb/GIOP/Makefile.am | 2 +- + src/orb/GIOP/giop-recv-buffer.c | 14 +- + src/orb/GIOP/giop-send-buffer.c | 9 +- + src/orb/GIOP/giop.c | 38 ++- + src/orb/Makefile.am | 2 +- + src/orb/dynamic/Makefile.am | 2 +- + src/orb/orb-core/Makefile.am | 2 +- + src/orb/orb-core/corba-object.c | 8 + + src/orb/orb-core/corba-orb.c | 24 +- + src/orb/poa/Makefile.am | 2 +- + src/orb/poa/poa.c | 25 +- + src/orb/util/Makefile.am | 2 +- + src/orb/util/genrand.c | 13 +- + src/services/imodule/Makefile.am | 2 +- + src/services/name/Makefile.am | 2 +- + test/Makefile.am | 2 +- + test/everything/Makefile.am | 4 +- + test/everything/client.c | 14 +- + test/everything/server.c | 3 +- + test/inhibit/Makefile.am | 2 +- + test/poa/Makefile.am | 2 +- + test/poa/poatest-basic-shell.c | 3 +- + test/test-corbaloc.c | 4 +- + test/test-dynany.c | 5 +- + test/test-giop.c | 4 +- + test/test-mem.c | 8 +- + test/test-performance.c | 2 + + test/timeout-client.c | 2 + + test/timeout-server.c | 3 +- + 45 files changed, 662 insertions(+), 480 deletions(-) + create mode 100644 configure.ac + delete mode 100644 configure.in + +diff --git a/NEWS b/NEWS +index bddfdff..7734385 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,3 +1,10 @@ ++ORBit2-2.14.20 ++ ++ - build fixes ++ + Stop using -DG_DISABLE_DEPRECATED since it doesn't build ++ + Use AM_CPPFLAGS instead of I@@ Diff output truncated at 100000 characters. @@
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).