Mozilla Thunderbird mail/newsgroup client
CentOS Sources
2016-07-11 a8a561abb12e2f1dbdbd4e002e82f68acd14fa16
import thunderbird-45.2-1.el7_2
2 files copied
25 files added
7 files deleted
9 files modified
2 files renamed
7261 ■■■■■ changed files
.gitignore 10 ●●●● patch | view | raw | blame | history
.thunderbird.metadata 10 ●●●● patch | view | raw | blame | history
SOURCES/aarch64-fix-skia.patch 18 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-build-id.patch 15 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-fontconfig.patch 100 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-gtk2-2.10.patch 2724 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-nss.patch 12 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-rapl.patch 12 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-rt-tgsigqueueinfo.patch 18 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-sandbox.patch 46 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-stdint.patch 47 ●●●●● patch | view | raw | blame | history
SOURCES/build-el5-xlib-header.patch 27 ●●●●● patch | view | raw | blame | history
SOURCES/build-nspr-prbool.patch 66 ●●●●● patch | view | raw | blame | history
SOURCES/build-nss.patch 21 ●●●●● patch | view | raw | blame | history
SOURCES/build-werror.patch 11 ●●●●● patch | view | raw | blame | history
SOURCES/find-external-requires patch | view | raw | blame | history
SOURCES/firefox-install-dir.patch 6 ●●●● patch | view | raw | blame | history
SOURCES/firefox-nss-3.19.1.patch 21 ●●●●● patch | view | raw | blame | history
SOURCES/firefox-ppc64le.patch 6 ●●●● patch | view | raw | blame | history
SOURCES/lightning-bad-langs.patch 19 ●●●●● patch | view | raw | blame | history
SOURCES/mklangsource.sh 20 ●●●● patch | view | raw | blame | history
SOURCES/mozilla-1005535.patch 144 ●●●● patch | view | raw | blame | history
SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch 1150 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch 413 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch 71 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-1152515.patch 68 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-1170092-etc-conf.patch 96 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-1253216-disable-ion.patch 12 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-694870-backout.patch 334 ●●●●● patch | view | raw | blame | history
SOURCES/mozilla-build-arm.patch 12 ●●●●● patch | view | raw | blame | history
SOURCES/ppc64le-build.patch 11 ●●●●● patch | view | raw | blame | history
SOURCES/rhbz-1014858.patch 16 ●●●●● patch | view | raw | blame | history
SOURCES/rhbz-1150082.patch 13 ●●●●● patch | view | raw | blame | history
SOURCES/rhbz-1173156.patch 12 ●●●●● patch | view | raw | blame | history
SOURCES/rhbz-1219542-s390-build.patch 23 ●●●●● patch | view | raw | blame | history
SOURCES/rhbz-966424.patch 1 ●●●● patch | view | raw | blame | history
SOURCES/thunderbird-mozconfig 56 ●●●● patch | view | raw | blame | history
SOURCES/thunderbird-open-browser.sh 76 ●●●●● patch | view | raw | blame | history
SOURCES/thunderbird-redhat-default-prefs.js.rhel5 13 ●●●● patch | view | raw | blame | history
SOURCES/thunderbird-redhat-default-prefs.js.rhel6 2 ●●● patch | view | raw | blame | history
SOURCES/thunderbird-redhat-default-prefs.js.rhel7 2 ●●● patch | view | raw | blame | history
SOURCES/thunderbird.sh.in.rhel5 148 ●●●●● patch | view | raw | blame | history
SOURCES/thunderbird.sh.in.rhel6 156 ●●●●● patch | view | raw | blame | history
SOURCES/thunderbird.sh.in.rhel7 156 ●●●●● patch | view | raw | blame | history
SPECS/thunderbird.spec 1067 ●●●●● patch | view | raw | blame | history
.gitignore
@@ -1,3 +1,7 @@
SOURCES/l10n-lightning-38.8.0.tar.bz2
SOURCES/thunderbird-38.8.0.source.tar.bz2
SOURCES/thunderbird-langpacks-38.8.0-20160506.tar.bz2
SOURCES/Python-2.7.8.tgz
SOURCES/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm
SOURCES/gcc48-4.8.2-16.el5.src.rpm
SOURCES/l10n-lightning-45.2.tar.xz
SOURCES/thunderbird-45.2.source.tar.xz
SOURCES/thunderbird-langpacks-45.2-20160629.tar.xz
SOURCES/yasm-1.2.0-3.el5.src.rpm
.thunderbird.metadata
@@ -1,3 +1,7 @@
b820f929d39a90f4123da6cf3218d2569ede1558 SOURCES/l10n-lightning-38.8.0.tar.bz2
013df5e12fca235b1236f1f9369e082d0ce001a0 SOURCES/thunderbird-38.8.0.source.tar.bz2
d4ba982fece9a838487d81d19666494ad1c14add SOURCES/thunderbird-langpacks-38.8.0-20160506.tar.bz2
511960dd78451a06c9df76509635aeec05b2051a SOURCES/Python-2.7.8.tgz
467bdb846d67c01aed9e521fe0ef280065a50c3c SOURCES/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm
e5ba84786af5d0e0e23b1a9112c76821ef23306c SOURCES/gcc48-4.8.2-16.el5.src.rpm
5436daa20676de9c88eedeb56d85baafe2a6d037 SOURCES/l10n-lightning-45.2.tar.xz
ac1fb352d68fda3c3be84bd52196bd9d74a3fd22 SOURCES/thunderbird-45.2.source.tar.xz
0bacc87821da6fdaf3d9fa786509388f58391d9b SOURCES/thunderbird-langpacks-45.2-20160629.tar.xz
77fd30f7ebc12a629a31c1e252cec06af55a71fe SOURCES/yasm-1.2.0-3.el5.src.rpm
SOURCES/aarch64-fix-skia.patch
New file
@@ -0,0 +1,18 @@
Based on https://github.com/google/skia/commit/b79ff56de23fef680ae7187040f2d6a9516b553d
Index: mozilla-release/gfx/skia/skia/src/core/SkUtilsArm.h
===================================================================
--- mozilla-release.orig/gfx/skia/skia/src/core/SkUtilsArm.h
+++ mozilla-release/gfx/skia/skia/src/core/SkUtilsArm.h
@@ -21,9 +21,9 @@
 #define SK_ARM_NEON_MODE_ALWAYS   1
 #define SK_ARM_NEON_MODE_DYNAMIC  2
-#if defined(SK_CPU_ARM32) && defined(__ARM_HAVE_OPTIONAL_NEON_SUPPORT)
+#if defined(__ARM_HAVE_OPTIONAL_NEON_SUPPORT)
 #  define SK_ARM_NEON_MODE  SK_ARM_NEON_MODE_DYNAMIC
-#elif defined(SK_CPU_ARM32) && defined(__ARM_HAVE_NEON) || defined(SK_CPU_ARM64)
+#elif defined(__ARM_HAVE_NEON)
 #  define SK_ARM_NEON_MODE  SK_ARM_NEON_MODE_ALWAYS
 #else
 #  define SK_ARM_NEON_MODE  SK_ARM_NEON_MODE_NONE
SOURCES/build-el5-build-id.patch
New file
@@ -0,0 +1,15 @@
diff -up mozilla-esr31/tools/profiler/LulElf.cpp.python3 mozilla-esr31/tools/profiler/LulElf.cpp
--- mozilla-esr31/tools/profiler/lul/LulElf.cpp.python3    2014-08-25 15:17:29.000000000 +0200
+++ mozilla-esr31/tools/profiler/lul/LulElf.cpp    2014-09-05 15:26:14.114681217 +0200
@@ -69,6 +69,11 @@
 #include "LulElfInt.h"
 #include "LulMainInt.h"
+#ifndef NT_GNU_BUILD_ID
+#define NT_GNU_BUILD_ID 3
+#endif
+
+
 #if defined(LUL_PLAT_arm_android) && !defined(SHT_ARM_EXIDX)
 // bionic and older glibsc don't define it
SOURCES/build-el5-fontconfig.patch
New file
@@ -0,0 +1,100 @@
diff -up mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp.build-el5-fontconfig mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp
--- mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp.build-el5-fontconfig    2015-12-16 16:47:28.000000000 +0100
+++ mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp    2016-01-19 14:20:43.676153725 +0100
@@ -367,7 +367,48 @@ gfxFontconfigFontEntry::gfxFontconfigFon
     // "blanks", effectively assuming that, if the font has a blank glyph,
     // then the author intends any associated character to be rendered
     // blank.
-    mFontPattern = FcFreeTypeQueryFace(mFTFace, ToFcChar8Ptr(""), 0, nullptr);
+    // BACKPORT: FcFreeTypeQueryFace is not available in RHEL5's fontconfig
+    // mFontPattern = FcFreeTypeQueryFace(mFTFace, ToFcChar8Ptr(""), 0, nullptr);
+
+
+    // FC_CHARSET is vital to determine which characters are supported.
+    nsAutoRef<FcCharSet> charset(FcFreeTypeCharSet(mFTFace, nullptr));
+    // If there are no characters then assume we don't know how to read
+    // this font.
+    if (!charset || FcCharSetCount(charset) == 0)
+      return;
+
+    mFontPattern = FcPatternCreate();
+    FcPatternAddCharSet(mFontPattern, FC_CHARSET, charset);
+
+    // FC_PIXEL_SIZE can be important for font selection of fixed-size
+    // fonts.
+    if (!(mFTFace->face_flags & FT_FACE_FLAG_SCALABLE)) {
+      for (FT_Int i = 0; i < mFTFace->num_fixed_sizes; ++i) {
+#if HAVE_FT_BITMAP_SIZE_Y_PPEM
+        double size = FLOAT_FROM_26_6(mFTFace->available_sizes[i].y_ppem);
+#else
+        double size = mFTFace->available_sizes[i].height;
+#endif
+        FcPatternAddDouble (mFontPattern, FC_PIXEL_SIZE, size);
+      }
+
+      // Not sure whether this is important;
+      // imitating FcFreeTypeQueryFace:
+      FcPatternAddBool (mFontPattern, FC_ANTIALIAS, FcFalse);
+    }
+
+    // Setting up the FC_LANGSET property is very difficult with the APIs
+    // available prior to FcFreeTypeQueryFace.  Having no FC_LANGSET
+    // property seems better than having a property with an empty LangSet.
+    // With no FC_LANGSET property, fontconfig sort functions will
+    // consider this face to have the same priority as (otherwise equal)
+    // faces that have support for the primary requested language, but
+    // will not consider any language to have been satisfied (and so will
+    // continue to look for a face with language support in fallback
+    // fonts).
+
+    // END BACKPORT
     // given that we have a FT_Face, not really sure this is possible...
     if (!mFontPattern) {
         mFontPattern = FcPatternCreate();
@@ -1015,9 +1056,12 @@ gfxFcPlatformFontList::gfxFcPlatformFont
     , mAlwaysUseFontconfigGenerics(true)
 {
     // if the rescan interval is set, start the timer
-    int rescanInterval = FcConfigGetRescanInterval(nullptr);
+    // BACKPORT - do not implement rescan interval
+    //int rescanInterval = FcConfigGetRescanInterval(nullptr);
+    int rescanInterval = 0;
     if (rescanInterval) {
-        mLastConfig = FcConfigGetCurrent();
+        nsAutoRef<FcConfig> fc_conf(FcConfigGetCurrent());
+        mLastConfig = fc_conf.out();
         mCheckFontUpdatesTimer = do_CreateInstance("@mozilla.org/timer;1");
         if (mCheckFontUpdatesTimer) {
             mCheckFontUpdatesTimer->
@@ -1131,7 +1175,8 @@ gfxFcPlatformFontList::AddFontSetFamilie
 nsresult
 gfxFcPlatformFontList::InitFontList()
 {
-    mLastConfig = FcConfigGetCurrent();
+    nsAutoRef<FcConfig> fc_conf(FcConfigGetCurrent());
+    mLastConfig = fc_conf.out();
     // reset font lists
     gfxPlatformFontList::InitFontList();
diff -up mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h.build-el5-fontconfig mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h
--- mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h.build-el5-fontconfig    2016-01-19 11:45:08.927745469 +0100
+++ mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h    2016-01-19 13:49:58.296124911 +0100
@@ -33,7 +33,8 @@ class nsAutoRefTraits<FcConfig> : public
 {
 public:
     static void Release(FcConfig *ptr) { FcConfigDestroy(ptr); }
-    static void AddRef(FcConfig *ptr) { FcConfigReference(ptr); }
+    // AddRef is not supported in older font-config
+    // static void AddRef(FcConfig *ptr) { FcConfigReference(ptr); }
 };
 // Helper classes used for clearning out user font data when cairo font
@@ -290,7 +291,7 @@ protected:
     nsRefPtrHashtable<nsCStringHashKey, gfxFontFamily> mFcSubstituteCache;
     nsCOMPtr<nsITimer> mCheckFontUpdatesTimer;
-    nsCountedRef<FcConfig> mLastConfig;
+    nsAutoRef<FcConfig> mLastConfig;
     // By default, font prefs under Linux are set to simply lookup
     // via fontconfig the appropriate font for serif/sans-serif/monospace.
SOURCES/build-el5-gtk2-2.10.patch
New file
@@ -0,0 +1,2724 @@
diff -up mozilla-aurora/config/system-headers.build-gtk2 mozilla-aurora/config/system-headers
--- mozilla-aurora/config/system-headers.build-gtk2    2015-12-16 16:47:44.000000000 +0100
+++ mozilla-aurora/config/system-headers    2016-01-15 17:38:34.974272205 +0100
@@ -511,7 +511,9 @@ gssapi/gssapi.h
 gssapi.h
 gtk/gtk.h
 gtk/gtkx.h
-gtk/gtkunixprint.h
+gtk/gtkprinter.h
+gtk/gtkprintjob.h
+gtk/gtkprintunixdialog.h
 #ifdef ANDROID
 gui/BufferQueue.h
 gui/ConsumerBase.h
diff -up mozilla-aurora/configure.in.build-gtk2 mozilla-aurora/configure.in
--- mozilla-aurora/configure.in.build-gtk2    2016-01-15 17:38:34.972272207 +0100
+++ mozilla-aurora/configure.in    2016-01-15 17:38:34.975272203 +0100
@@ -58,15 +58,15 @@ NSS_VERSION=3
 dnl Set the minimum version of toolkit libs used by mozilla
 dnl ========================================================
-GLIB_VERSION=2.22
+GLIB_VERSION=2.12
 # 2_26 is the earliest version we can set GLIB_VERSION_MIN_REQUIRED.
 # The macro won't be used when compiling with earlier versions anyway.
 GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26
 GIO_VERSION=2.22
 PERL_VERSION=5.006
 CAIRO_VERSION=1.10
-PANGO_VERSION=1.22.0
-GTK2_VERSION=2.18.0
+PANGO_VERSION=1.14
+GTK2_VERSION=2.10
 GTK3_VERSION=3.4.0
 GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4
 WINDRES_VERSION=2.14.90
@@ -4278,7 +4278,7 @@ if test "$COMPILE_ENVIRONMENT"; then
     AC_DEFINE_UNQUOTED(GLIB_VERSION_MIN_REQUIRED,$GLIB_VERSION_MIN_REQUIRED)
     AC_DEFINE_UNQUOTED(GLIB_VERSION_MAX_ALLOWED,$GLIB_VERSION_MAX_ALLOWED)
-    PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES)
+    PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES freetype2 fontconfig)
     MOZ_GTK2_CFLAGS="-I${_topsrcdir}/widget/gtk/compat $MOZ_GTK2_CFLAGS"
   fi
   if test "$MOZ_ENABLE_GTK2"; then
diff -up mozilla-aurora/security/sandbox/linux/Sandbox.cpp.build-gtk2 mozilla-aurora/security/sandbox/linux/Sandbox.cpp
--- mozilla-aurora/security/sandbox/linux/Sandbox.cpp.build-gtk2    2015-12-16 16:47:02.000000000 +0100
+++ mozilla-aurora/security/sandbox/linux/Sandbox.cpp    2016-01-15 17:38:34.976272202 +0100
@@ -668,12 +668,13 @@ SetMediaPluginSandbox(const char *aFileP
   MOZ_ASSERT(!gMediaPluginFile.mPath);
   if (aFilePath) {
     gMediaPluginFile.mPath = strdup(aFilePath);
-    gMediaPluginFile.mFd = open(aFilePath, O_RDONLY | O_CLOEXEC);
+    gMediaPluginFile.mFd = open(aFilePath, O_RDONLY);
     if (gMediaPluginFile.mFd == -1) {
       SANDBOX_LOG_ERROR("failed to open plugin file %s: %s",
                         aFilePath, strerror(errno));
       MOZ_CRASH();
     }
+    fcntl(gMediaPluginFile.mFd, F_SETFD, fcntl(gMediaPluginFile.mFd, F_GETFD, 0) | FD_CLOEXEC);
   } else {
     gMediaPluginFile.mFd = -1;
   }
diff -up mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h
--- mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h    2016-01-15 17:38:34.976272202 +0100
@@ -6,6 +6,7 @@
 #define GDKKEYSYMS_WRAPPER_H
 #include_next <gdk/gdkkeysyms.h>
+#include "gdkkeysyms-compat.h"
 #ifndef GDK_ISO_Level5_Shift
 #define GDK_ISO_Level5_Shift    0xFE11
diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h
--- mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h.build-gtk2    2016-01-15 17:38:34.976272202 +0100
+++ mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h    2016-01-15 17:38:34.976272202 +0100
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef GTKCOLOR_SELECTION_DIALOG_WRAPPER_H
+#define GTKCOLOR_SELECTION_DIALOG_WRAPPER_H
+
+#define gtk_color_selection_dialog_get_color_selection gtk_color_selection_dialog_get_color_selection_
+#include_next <gtk/gtkcolorseldialog.h>
+#undef gtk_color_selection_dialog_get_color_selection
+
+static inline GtkWidget*
+gtk_color_selection_dialog_get_color_selection (GtkColorSelectionDialog *colorsel)
+{
+  g_return_val_if_fail (GTK_IS_COLOR_SELECTION_DIALOG (colorsel), NULL);
+
+  return colorsel->colorsel;
+}
+
+#endif /* GTKCOLOR_SELECTION_DIALOG_WRAPPER_H */
diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h
--- mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h.build-gtk2    2016-01-15 17:38:34.976272202 +0100
+++ mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h    2016-01-15 17:38:34.976272202 +0100
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef GTKDIALOG_WRAPPER_H
+#define GTKDIALOG_WRAPPER_H
+
+#define gtk_dialog_get_content_area gtk_dialog_get_content_area_
+#include_next <gtk/gtkdialog.h>
+#undef gtk_dialog_get_content_area
+
+static inline GtkWidget *
+gtk_dialog_get_content_area (GtkDialog *dialog)
+{
+  g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
+
+  return dialog->vbox;
+}
+
+#endif /* GTKDIALOG_WRAPPER_H */
diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h
--- mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h.build-gtk2    2016-01-15 17:38:34.976272202 +0100
+++ mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h    2016-01-15 17:38:34.976272202 +0100
@@ -0,0 +1,20 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef GTKPLUG_WRAPPER_H
+#define GTKPLUG_WRAPPER_H
+
+#define gtk_plug_get_socket_window gtk_plug_get_socket_window_
+#include_next <gtk/gtkplug.h>
+#undef gtk_plug_get_socket_window
+
+static inline GdkWindow *
+gtk_plug_get_socket_window (GtkPlug *plug)
+{
+  g_return_val_if_fail (GTK_IS_PLUG (plug), NULL);
+
+  return plug->socket_window;
+}
+
+#endif /* GTKPLUG_WRAPPER_H */
diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h
--- mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h.build-gtk2    2016-01-15 17:38:34.977272201 +0100
+++ mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h    2016-01-15 17:38:34.976272202 +0100
@@ -0,0 +1,60 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef GTKSELECTION_WRAPPER_H
+#define GTKSELECTION_WRAPPER_H
+
+#define gtk_selection_data_get_length gtk_selection_data_get_length_
+#define gtk_selection_data_get_data_type gtk_selection_data_get_data_type_
+#define gtk_selection_data_get_selection gtk_selection_data_get_selection_
+#define gtk_selection_data_get_target gtk_selection_data_get_target_
+#define gtk_selection_data_get_data gtk_selection_data_get_data_
+#include_next <gtk/gtkselection.h>
+#undef gtk_selection_data_get_length
+#undef gtk_selection_data_get_data_type
+#undef gtk_selection_data_get_selection
+#undef gtk_selection_data_get_target
+#undef gtk_selection_data_get_data
+
+static inline GdkAtom
+gtk_selection_data_get_data_type (GtkSelectionData *selection_data)
+{
+  g_return_val_if_fail (selection_data != NULL, 0);
+
+  return selection_data->type;
+}
+
+static inline gint
+gtk_selection_data_get_length (GtkSelectionData *selection_data)
+{
+  g_return_val_if_fail (selection_data != NULL, -1);
+
+  return selection_data->length;
+}
+
+static inline GdkAtom
+gtk_selection_data_get_selection (GtkSelectionData *selection_data)
+{
+  g_return_val_if_fail (selection_data != NULL, 0);
+
+  return selection_data->selection;
+}
+
+static inline GdkAtom
+gtk_selection_data_get_target (GtkSelectionData *selection_data)
+{
+  g_return_val_if_fail (selection_data != NULL, 0);
+
+  return selection_data->target;
+}
+
+static inline const guchar*
+gtk_selection_data_get_data (GtkSelectionData *selection_data)
+{
+  g_return_val_if_fail (selection_data != NULL, NULL);
+
+  return selection_data->data;
+}
+
+#endif /* GTKSELECTION_WRAPPER_H */
diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h
--- mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h    2016-01-15 17:38:34.977272201 +0100
@@ -9,11 +9,34 @@
 #define gtk_widget_get_mapped gtk_widget_get_mapped_
 #define gtk_widget_set_realized gtk_widget_set_realized_
 #define gtk_widget_get_realized gtk_widget_get_realized_
+#define gtk_widget_get_window gtk_widget_get_window_
+#define gtk_widget_has_focus gtk_widget_has_focus_
+#define gtk_widget_get_visible gtk_widget_get_visible_
+#define gtk_widget_set_window gtk_widget_set_window_
+#define gtk_widget_set_can_focus gtk_widget_set_can_focus_
+#define gtk_widget_get_has_window gtk_widget_get_has_window_
+#define gtk_widget_set_has_window gtk_widget_set_has_window_
+#define gtk_widget_get_allocation gtk_widget_get_allocation_
+#define gtk_widget_set_allocation gtk_widget_set_allocation_
+#define gtk_widget_get_can_focus gtk_widget_get_can_focus_
+#define gtk_widget_has_grab gtk_widget_has_grab_
+#define gtk_widget_is_toplevel gtk_widget_is_toplevel_
 #include_next <gtk/gtkwidget.h>
 #undef gtk_widget_set_mapped
 #undef gtk_widget_get_mapped
 #undef gtk_widget_set_realized
 #undef gtk_widget_get_realized
+#undef gtk_widget_get_window
+#undef gtk_widget_has_focus
+#undef gtk_widget_get_visible
+#undef gtk_widget_set_window
+#undef gtk_widget_set_can_focus
+#undef gtk_widget_get_has_window
+#undef gtk_widget_set_has_window
+#undef gtk_widget_get_allocation
+#undef gtk_widget_set_allocation
+#undef gtk_widget_has_grab
+#undef gtk_widget_is_toplevel
 #include <gtk/gtkversion.h>
@@ -47,4 +70,119 @@ gtk_widget_get_realized(GtkWidget *widge
   return GTK_WIDGET_REALIZED (widget);
 }
+static inline GdkWindow *
+gtk_widget_get_window(GtkWidget *widget)
+{
+  return widget->window;
+}
+
+static inline void
+gtk_widget_set_window(GtkWidget *widget,
+                      GdkWindow *window)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
+
+  if (widget->window != window)
+    {
+      widget->window = window;
+      g_object_notify (G_OBJECT (widget), "window");
+    }
+}
+
+
+static inline gboolean
+gtk_widget_has_focus(GtkWidget *widget)
+{
+  return GTK_WIDGET_HAS_FOCUS(widget);
+}
+
+static inline gboolean
+gtk_widget_get_can_focus (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return (GTK_OBJECT_FLAGS (widget) & GTK_CAN_FOCUS) != 0;
+}
+
+static inline void
+gtk_widget_set_can_focus (GtkWidget *widget,
+                          gboolean   can_focus)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  if (can_focus != gtk_widget_get_can_focus (widget))
+    {
+      if (can_focus)
+        GTK_OBJECT_FLAGS (widget) |= GTK_CAN_FOCUS;
+      else
+        GTK_OBJECT_FLAGS (widget) &= ~(GTK_CAN_FOCUS);
+
+      gtk_widget_queue_resize (widget);
+      g_object_notify (G_OBJECT (widget), "can-focus");
+    }
+}
+
+static inline gboolean
+gtk_widget_get_visible(GtkWidget *widget)
+{
+  return GTK_WIDGET_VISIBLE(widget);
+}
+
+static inline gboolean
+gtk_widget_get_has_window (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return !((GTK_OBJECT_FLAGS (widget) & GTK_NO_WINDOW) != 0);
+}
+
+static inline void
+gtk_widget_set_has_window (GtkWidget *widget,
+                           gboolean   has_window)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  if (has_window)
+    GTK_OBJECT_FLAGS (widget) &= ~(GTK_NO_WINDOW);
+  else
+    GTK_OBJECT_FLAGS (widget) |= GTK_NO_WINDOW;
+}
+
+static inline void
+gtk_widget_get_allocation (GtkWidget     *widget,
+                           GtkAllocation *allocation)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (allocation != NULL);
+
+  *allocation = widget->allocation;
+}
+
+static inline void
+gtk_widget_set_allocation (GtkWidget           *widget,
+                           const GtkAllocation *allocation)
+{
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (allocation != NULL);
+
+  widget->allocation = *allocation;
+}
+
+static inline gboolean
+gtk_widget_has_grab (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return (GTK_OBJECT_FLAGS (widget) & GTK_HAS_GRAB) != 0;
+}
+
+static inline gboolean
+gtk_widget_is_toplevel (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
+
+  return (GTK_OBJECT_FLAGS (widget) & GTK_TOPLEVEL) != 0;
+}
+
 #endif /* GTKWIDGET_WRAPPER_H */
diff -up mozilla-aurora/widget/gtk/gdkkeysyms-compat.h.build-gtk2 mozilla-aurora/widget/gtk/gdkkeysyms-compat.h
--- mozilla-aurora/widget/gtk/gdkkeysyms-compat.h.build-gtk2    2016-01-15 17:38:34.978272200 +0100
+++ mozilla-aurora/widget/gtk/gdkkeysyms-compat.h    2016-01-15 17:38:34.978272200 +0100
@@ -0,0 +1,2208 @@
+/* GDK - The GIMP Drawing Kit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ * Copyright (C) 2005, 2006, 2007, 2009 GNOME Foundation
+ *
+ * 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.
+ */
+
+/*
+ * Compatibility version of gdkkeysyms.h.
+ *
+ * In GTK3, keysyms changed to have a KEY_ prefix.  This is a compatibility header
+ * your application can include to gain access to the old names as well.  Consider
+ * porting to the new names instead.
+ */
+
+#ifndef __GDK_KEYSYMS_COMPAT_H__
+#define __GDK_KEYSYMS_COMPAT_H__
+
+#define GDK_VoidSymbol 0xffffff
+#define GDK_BackSpace 0xff08
+#define GDK_Tab 0xff09
+#define GDK_Linefeed 0xff0a
+#define GDK_Clear 0xff0b
+#define GDK_Return 0xff0d
+#define GDK_Pause 0xff13
+#define GDK_Scroll_Lock 0xff14
+#define GDK_Sys_Req 0xff15
+#define GDK_Escape 0xff1b
+#define GDK_Delete 0xffff
+#define GDK_Multi_key 0xff20
+#define GDK_Codeinput 0xff37
+#define GDK_SingleCandidate 0xff3c
+#define GDK_MultipleCandidate 0xff3d
+#define GDK_PreviousCandidate 0xff3e
+#define GDK_Kanji 0xff21
+#define GDK_Muhenkan 0xff22
+#define GDK_Henkan_Mode 0xff23
+#define GDK_Henkan 0xff23
+#define GDK_Romaji 0xff24
+#define GDK_Hiragana 0xff25
+#define GDK_Katakana 0xff26
+#define GDK_Hiragana_Katakana 0xff27
+#define GDK_Zenkaku 0xff28
+#define GDK_Hankaku 0xff29
+#define GDK_Zenkaku_Hankaku 0xff2a
+#define GDK_Touroku 0xff2b
+#define GDK_Massyo 0xff2c
+#define GDK_Kana_Lock 0xff2d
+#define GDK_Kana_Shift 0xff2e
+#define GDK_Eisu_Shift 0xff2f
+#define GDK_Eisu_toggle 0xff30
+#define GDK_Kanji_Bangou 0xff37
+#define GDK_Zen_Koho 0xff3d
+#define GDK_Mae_Koho 0xff3e
+#define GDK_Home 0xff50
+#define GDK_Left 0xff51
+#define GDK_Up 0xff52
+#define GDK_Right 0xff53
+#define GDK_Down 0xff54
+#define GDK_Prior 0xff55
+#define GDK_Page_Up 0xff55
+#define GDK_Next 0xff56
+#define GDK_Page_Down 0xff56
+#define GDK_End 0xff57
+#define GDK_Begin 0xff58
+#define GDK_Select 0xff60
+#define GDK_Print 0xff61
+#define GDK_Execute 0xff62
+#define GDK_Insert 0xff63
+#define GDK_Undo 0xff65
+#define GDK_Redo 0xff66
+#define GDK_Menu 0xff67
+#define GDK_Find 0xff68
+#define GDK_Cancel 0xff69
+#define GDK_Help 0xff6a
+#define GDK_Break 0xff6b
+#define GDK_Mode_switch 0xff7e
+#define GDK_script_switch 0xff7e
+#define GDK_Num_Lock 0xff7f
+#define GDK_KP_Space 0xff80
+#define GDK_KP_Tab 0xff89
+#define GDK_KP_Enter 0xff8d
+#define GDK_KP_F1 0xff91
+#define GDK_KP_F2 0xff92
+#define GDK_KP_F3 0xff93
+#define GDK_KP_F4 0xff94
+#define GDK_KP_Home 0xff95
+#define GDK_KP_Left 0xff96
+#define GDK_KP_Up 0xff97
+#define GDK_KP_Right 0xff98
+#define GDK_KP_Down 0xff99
+#define GDK_KP_Prior 0xff9a
+#define GDK_KP_Page_Up 0xff9a
+#define GDK_KP_Next 0xff9b
+#define GDK_KP_Page_Down 0xff9b
+#define GDK_KP_End 0xff9c
+#define GDK_KP_Begin 0xff9d
+#define GDK_KP_Insert 0xff9e
+#define GDK_KP_Delete 0xff9f
+#define GDK_KP_Equal 0xffbd
+#define GDK_KP_Multiply 0xffaa
+#define GDK_KP_Add 0xffab
+#define GDK_KP_Separator 0xffac
+#define GDK_KP_Subtract 0xffad
+#define GDK_KP_Decimal 0xffae
+#define GDK_KP_Divide 0xffaf
+#define GDK_KP_0 0xffb0
+#define GDK_KP_1 0xffb1
+#define GDK_KP_2 0xffb2
+#define GDK_KP_3 0xffb3
+#define GDK_KP_4 0xffb4
+#define GDK_KP_5 0xffb5
+#define GDK_KP_6 0xffb6
+#define GDK_KP_7 0xffb7
+#define GDK_KP_8 0xffb8
+#define GDK_KP_9 0xffb9
+#define GDK_F1 0xffbe
+#define GDK_F2 0xffbf
+#define GDK_F3 0xffc0
+#define GDK_F4 0xffc1
+#define GDK_F5 0xffc2
+#define GDK_F6 0xffc3
+#define GDK_F7 0xffc4
+#define GDK_F8 0xffc5
+#define GDK_F9 0xffc6
+#define GDK_F10 0xffc7
+#define GDK_F11 0xffc8
+#define GDK_L1 0xffc8
+#define GDK_F12 0xffc9
+#define GDK_L2 0xffc9
+#define GDK_F13 0xffca
+#define GDK_L3 0xffca
+#define GDK_F14 0xffcb
+#define GDK_L4 0xffcb
+#define GDK_F15 0xffcc
+#define GDK_L5 0xffcc
+#define GDK_F16 0xffcd
+#define GDK_L6 0xffcd
+#define GDK_F17 0xffce
+#define GDK_L7 0xffce
+#define GDK_F18 0xffcf
+#define GDK_L8 0xffcf
+#define GDK_F19 0xffd0
+#define GDK_L9 0xffd0
+#define GDK_F20 0xffd1
+#define GDK_L10 0xffd1
+#define GDK_F21 0xffd2
+#define GDK_R1 0xffd2
+#define GDK_F22 0xffd3
+#define GDK_R2 0xffd3
+#define GDK_F23 0xffd4
+#define GDK_R3 0xffd4
+#define GDK_F24 0xffd5
+#define GDK_R4 0xffd5
+#define GDK_F25 0xffd6
+#define GDK_R5 0xffd6
+#define GDK_F26 0xffd7
+#define GDK_R6 0xffd7
+#define GDK_F27 0xffd8
+#define GDK_R7 0xffd8
+#define GDK_F28 0xffd9
+#define GDK_R8 0xffd9
+#define GDK_F29 0xffda
+#define GDK_R9 0xffda
+#define GDK_F30 0xffdb
+#define GDK_R10 0xffdb
+#define GDK_F31 0xffdc
+#define GDK_R11 0xffdc
+#define GDK_F32 0xffdd
+#define GDK_R12 0xffdd
+#define GDK_F33 0xffde
+#define GDK_R13 0xffde
+#define GDK_F34 0xffdf
+#define GDK_R14 0xffdf
+#define GDK_F35 0xffe0
+#define GDK_R15 0xffe0
+#define GDK_Shift_L 0xffe1
+#define GDK_Shift_R 0xffe2
+#define GDK_Control_L 0xffe3
+#define GDK_Control_R 0xffe4
+#define GDK_Caps_Lock 0xffe5
+#define GDK_Shift_Lock 0xffe6
+#define GDK_Meta_L 0xffe7
+#define GDK_Meta_R 0xffe8
+#define GDK_Alt_L 0xffe9
+#define GDK_Alt_R 0xffea
+#define GDK_Super_L 0xffeb
+#define GDK_Super_R 0xffec
+#define GDK_Hyper_L 0xffed
+#define GDK_Hyper_R 0xffee
+#define GDK_ISO_Lock 0xfe01
+#define GDK_ISO_Level2_Latch 0xfe02
+#define GDK_ISO_Level3_Shift 0xfe03
+#define GDK_ISO_Level3_Latch 0xfe04
+#define GDK_ISO_Level3_Lock 0xfe05
+#define GDK_ISO_Level5_Shift 0xfe11
+#define GDK_ISO_Level5_Latch 0xfe12
+#define GDK_ISO_Level5_Lock 0xfe13
+#define GDK_ISO_Group_Shift 0xff7e
+#define GDK_ISO_Group_Latch 0xfe06
+#define GDK_ISO_Group_Lock 0xfe07
+#define GDK_ISO_Next_Group 0xfe08
+#define GDK_ISO_Next_Group_Lock 0xfe09
+#define GDK_ISO_Prev_Group 0xfe0a
+#define GDK_ISO_Prev_Group_Lock 0xfe0b
+#define GDK_ISO_First_Group 0xfe0c
+#define GDK_ISO_First_Group_Lock 0xfe0d
+#define GDK_ISO_Last_Group 0xfe0e
+#define GDK_ISO_Last_Group_Lock 0xfe0f
+#define GDK_ISO_Left_Tab 0xfe20
+#define GDK_ISO_Move_Line_Up 0xfe21
+#define GDK_ISO_Move_Line_Down 0xfe22
+#define GDK_ISO_Partial_Line_Up 0xfe23
+#define GDK_ISO_Partial_Line_Down 0xfe24
+#define GDK_ISO_Partial_Space_Left 0xfe25
+#define GDK_ISO_Partial_Space_Right 0xfe26
+#define GDK_ISO_Set_Margin_Left 0xfe27
+#define GDK_ISO_Set_Margin_Right 0xfe28
+#define GDK_ISO_Release_Margin_Left 0xfe29
+#define GDK_ISO_Release_Margin_Right 0xfe2a
+#define GDK_ISO_Release_Both_Margins 0xfe2b
+#define GDK_ISO_Fast_Cursor_Left 0xfe2c
+#define GDK_ISO_Fast_Cursor_Right 0xfe2d
+#define GDK_ISO_Fast_Cursor_Up 0xfe2e
+#define GDK_ISO_Fast_Cursor_Down 0xfe2f
+#define GDK_ISO_Continuous_Underline 0xfe30
+#define GDK_ISO_Discontinuous_Underline 0xfe31
+#define GDK_ISO_Emphasize 0xfe32
+#define GDK_ISO_Center_Object 0xfe33
+#define GDK_ISO_Enter 0xfe34
+#define GDK_dead_grave 0xfe50
+#define GDK_dead_acute 0xfe51
+#define GDK_dead_circumflex 0xfe52
+#define GDK_dead_tilde 0xfe53
+#define GDK_dead_perispomeni 0xfe53
+#define GDK_dead_macron 0xfe54
+#define GDK_dead_breve 0xfe55
+#define GDK_dead_abovedot 0xfe56
+#define GDK_dead_diaeresis 0xfe57
+#define GDK_dead_abovering 0xfe58
+#define GDK_dead_doubleacute 0xfe59
+#define GDK_dead_caron 0xfe5a
+#define GDK_dead_cedilla 0xfe5b
+#define GDK_dead_ogonek 0xfe5c
+#define GDK_dead_iota 0xfe5d
+#define GDK_dead_voiced_sound 0xfe5e
+#define GDK_dead_semivoiced_sound 0xfe5f
+#define GDK_dead_belowdot 0xfe60
+#define GDK_dead_hook 0xfe61
+#define GDK_dead_horn 0xfe62
+#define GDK_dead_stroke 0xfe63
+#define GDK_dead_abovecomma 0xfe64
+#define GDK_dead_psili 0xfe64
+#define GDK_dead_abovereversedcomma 0xfe65
+#define GDK_dead_dasia 0xfe65
+#define GDK_dead_doublegrave 0xfe66
+#define GDK_dead_belowring 0xfe67
+#define GDK_dead_belowmacron 0xfe68
+#define GDK_dead_belowcircumflex 0xfe69
+#define GDK_dead_belowtilde 0xfe6a
+#define GDK_dead_belowbreve 0xfe6b
+#define GDK_dead_belowdiaeresis 0xfe6c
+#define GDK_dead_invertedbreve 0xfe6d
+#define GDK_dead_belowcomma 0xfe6e
+#define GDK_dead_currency 0xfe6f
+#define GDK_dead_a 0xfe80
+#define GDK_dead_A 0xfe81
+#define GDK_dead_e 0xfe82
+#define GDK_dead_E 0xfe83
+#define GDK_dead_i 0xfe84
+#define GDK_dead_I 0xfe85
+#define GDK_dead_o 0xfe86
+#define GDK_dead_O 0xfe87
+#define GDK_dead_u 0xfe88
+#define GDK_dead_U 0xfe89
+#define GDK_dead_small_schwa 0xfe8a
+#define GDK_dead_capital_schwa 0xfe8b
+#define GDK_First_Virtual_Screen 0xfed0
+#define GDK_Prev_Virtual_Screen 0xfed1
+#define GDK_Next_Virtual_Screen 0xfed2
+#define GDK_Last_Virtual_Screen 0xfed4
+#define GDK_Terminate_Server 0xfed5
+#define GDK_AccessX_Enable 0xfe70
+#define GDK_AccessX_Feedback_Enable 0xfe71
+#define GDK_RepeatKeys_Enable 0xfe72
+#define GDK_SlowKeys_Enable 0xfe73
+#define GDK_BounceKeys_Enable 0xfe74
+#define GDK_StickyKeys_Enable 0xfe75
+#define GDK_MouseKeys_Enable 0xfe76
+#define GDK_MouseKeys_Accel_Enable 0xfe77
+#define GDK_Overlay1_Enable 0xfe78
+#define GDK_Overlay2_Enable 0xfe79
+#define GDK_AudibleBell_Enable 0xfe7a
+#define GDK_Pointer_Left 0xfee0
+#define GDK_Pointer_Right 0xfee1
+#define GDK_Pointer_Up 0xfee2
+#define GDK_Pointer_Down 0xfee3
+#define GDK_Pointer_UpLeft 0xfee4
+#define GDK_Pointer_UpRight 0xfee5
+#define GDK_Pointer_DownLeft 0xfee6
+#define GDK_Pointer_DownRight 0xfee7
+#define GDK_Pointer_Button_Dflt 0xfee8
+#define GDK_Pointer_Button1 0xfee9
+#define GDK_Pointer_Button2 0xfeea
+#define GDK_Pointer_Button3 0xfeeb
+#define GDK_Pointer_Button4 0xfeec
+#define GDK_Pointer_Button5 0xfeed
+#define GDK_Pointer_DblClick_Dflt 0xfeee
+#define GDK_Pointer_DblClick1 0xfeef
+#define GDK_Pointer_DblClick2 0xfef0
+#define GDK_Pointer_DblClick3 0xfef1
+#define GDK_Pointer_DblClick4 0xfef2
+#define GDK_Pointer_DblClick5 0xfef3
+#define GDK_Pointer_Drag_Dflt 0xfef4
+#define GDK_Pointer_Drag1 0xfef5
+#define GDK_Pointer_Drag2 0xfef6
+#define GDK_Pointer_Drag3 0xfef7
+#define GDK_Pointer_Drag4 0xfef8
+#define GDK_Pointer_Drag5 0xfefd
+#define GDK_Pointer_EnableKeys 0xfef9
+#define GDK_Pointer_Accelerate 0xfefa
+#define GDK_Pointer_DfltBtnNext 0xfefb
+#define GDK_Pointer_DfltBtnPrev 0xfefc
+#define GDK_3270_Duplicate 0xfd01
+#define GDK_3270_FieldMark 0xfd02
+#define GDK_3270_Right2 0xfd03
+#define GDK_3270_Left2 0xfd04
+#define GDK_3270_BackTab 0xfd05
+#define GDK_3270_EraseEOF 0xfd06
+#define GDK_3270_EraseInput 0xfd07
+#define GDK_3270_Reset 0xfd08
+#define GDK_3270_Quit 0xfd09
+#define GDK_3270_PA1 0xfd0a
+#define GDK_3270_PA2 0xfd0b
+#define GDK_3270_PA3 0xfd0c
+#define GDK_3270_Test 0xfd0d
+#define GDK_3270_Attn 0xfd0e
+#define GDK_3270_CursorBlink 0xfd0f
+#define GDK_3270_AltCursor 0xfd10
+#define GDK_3270_KeyClick 0xfd11
+#define GDK_3270_Jump 0xfd12
+#define GDK_3270_Ident 0xfd13
+#define GDK_3270_Rule 0xfd14
+#define GDK_3270_Copy 0xfd15
+#define GDK_3270_Play 0xfd16
+#define GDK_3270_Setup 0xfd17
+#define GDK_3270_Record 0xfd18
+#define GDK_3270_ChangeScreen 0xfd19
+#define GDK_3270_DeleteWord 0xfd1a
+#define GDK_3270_ExSelect 0xfd1b
+#define GDK_3270_CursorSelect 0xfd1c
+#define GDK_3270_PrintScreen 0xfd1d
+#define GDK_3270_Enter 0xfd1e
+#define GDK_space 0x020
+#define GDK_exclam 0x021
+#define GDK_quotedbl 0x022
+#define GDK_numbersign 0x023
+#define GDK_dollar 0x024
+#define GDK_percent 0x025
+#define GDK_ampersand 0x026
+#define GDK_apostrophe 0x027
+#define GDK_quoteright 0x027
+#define GDK_parenleft 0x028
+#define GDK_parenright 0x029
+#define GDK_asterisk 0x02a
+#define GDK_plus 0x02b
+#define GDK_comma 0x02c
+#define GDK_minus 0x02d
+#define GDK_period 0x02e
+#define GDK_slash 0x02f
+#define GDK_0 0x030
+#define GDK_1 0x031
+#define GDK_2 0x032
+#define GDK_3 0x033
+#define GDK_4 0x034
+#define GDK_5 0x035
+#define GDK_6 0x036
+#define GDK_7 0x037
+#define GDK_8 0x038
+#define GDK_9 0x039
+#define GDK_colon 0x03a
+#define GDK_semicolon 0x03b
+#define GDK_less 0x03c
+#define GDK_equal 0x03d
+#define GDK_greater 0x03e
+#define GDK_question 0x03f
+#define GDK_at 0x040
+#define GDK_A 0x041
+#define GDK_B 0x042
+#define GDK_C 0x043
+#define GDK_D 0x044
+#define GDK_E 0x045
+#define GDK_F 0x046
+#define GDK_G 0x047
+#define GDK_H 0x048
+#define GDK_I 0x049
+#define GDK_J 0x04a
+#define GDK_K 0x04b
+#define GDK_L 0x04c
+#define GDK_M 0x04d
+#define GDK_N 0x04e
+#define GDK_O 0x04f
+#define GDK_P 0x050
+#define GDK_Q 0x051
+#define GDK_R 0x052
+#define GDK_S 0x053
+#define GDK_T 0x054
+#define GDK_U 0x055
+#define GDK_V 0x056
+#define GDK_W 0x057
+#define GDK_X 0x058
+#define GDK_Y 0x059
+#define GDK_Z 0x05a
+#define GDK_bracketleft 0x05b
+#define GDK_backslash 0x05c
+#define GDK_bracketright 0x05d
+#define GDK_asciicircum 0x05e
+#define GDK_underscore 0x05f
+#define GDK_grave 0x060
+#define GDK_quoteleft 0x060
+#define GDK_a 0x061
+#define GDK_b 0x062
+#define GDK_c 0x063
+#define GDK_d 0x064
+#define GDK_e 0x065
+#define GDK_f 0x066
+#define GDK_g 0x067
+#define GDK_h 0x068
+#define GDK_i 0x069
+#define GDK_j 0x06a
+#define GDK_k 0x06b
+#define GDK_l 0x06c
+#define GDK_m 0x06d
+#define GDK_n 0x06e
+#define GDK_o 0x06f
+#define GDK_p 0x070
+#define GDK_q 0x071
+#define GDK_r 0x072
+#define GDK_s 0x073
+#define GDK_t 0x074
+#define GDK_u 0x075
+#define GDK_v 0x076
+#define GDK_w 0x077
+#define GDK_x 0x078
+#define GDK_y 0x079
+#define GDK_z 0x07a
+#define GDK_braceleft 0x07b
+#define GDK_bar 0x07c
+#define GDK_braceright 0x07d
+#define GDK_asciitilde 0x07e
+#define GDK_nobreakspace 0x0a0
+#define GDK_exclamdown 0x0a1
+#define GDK_cent 0x0a2
+#define GDK_sterling 0x0a3
+#define GDK_currency 0x0a4
+#define GDK_yen 0x0a5
+#define GDK_brokenbar 0x0a6
+#define GDK_section 0x0a7
+#define GDK_diaeresis 0x0a8
+#define GDK_copyright 0x0a9
+#define GDK_ordfeminine 0x0aa
+#define GDK_guillemotleft 0x0ab
+#define GDK_notsign 0x0ac
+#define GDK_hyphen 0x0ad
+#define GDK_registered 0x0ae
+#define GDK_macron 0x0af
+#define GDK_degree 0x0b0
+#define GDK_plusminus 0x0b1
+#define GDK_twosuperior 0x0b2
+#define GDK_threesuperior 0x0b3
+#define GDK_acute 0x0b4
+#define GDK_mu 0x0b5
+#define GDK_paragraph 0x0b6
+#define GDK_periodcentered 0x0b7
+#define GDK_cedilla 0x0b8
+#define GDK_onesuperior 0x0b9
+#define GDK_masculine 0x0ba
+#define GDK_guillemotright 0x0bb
+#define GDK_onequarter 0x0bc
+#define GDK_onehalf 0x0bd
+#define GDK_threequarters 0x0be
+#define GDK_questiondown 0x0bf
+#define GDK_Agrave 0x0c0
+#define GDK_Aacute 0x0c1
+#define GDK_Acircumflex 0x0c2
+#define GDK_Atilde 0x0c3
+#define GDK_Adiaeresis 0x0c4
+#define GDK_Aring 0x0c5
+#define GDK_AE 0x0c6
+#define GDK_Ccedilla 0x0c7
+#define GDK_Egrave 0x0c8
+#define GDK_Eacute 0x0c9
+#define GDK_Ecircumflex 0x0ca
+#define GDK_Ediaeresis 0x0cb
+#define GDK_Igrave 0x0cc
+#define GDK_Iacute 0x0cd
+#define GDK_Icircumflex 0x0ce
+#define GDK_Idiaeresis 0x0cf
+#define GDK_ETH 0x0d0
+#define GDK_Eth 0x0d0
+#define GDK_Ntilde 0x0d1
+#define GDK_Ograve 0x0d2
+#define GDK_Oacute 0x0d3
+#define GDK_Ocircumflex 0x0d4
+#define GDK_Otilde 0x0d5
+#define GDK_Odiaeresis 0x0d6
+#define GDK_multiply 0x0d7
+#define GDK_Oslash 0x0d8
+#define GDK_Ooblique 0x0d8
+#define GDK_Ugrave 0x0d9
+#define GDK_Uacute 0x0da
+#define GDK_Ucircumflex 0x0db
+#define GDK_Udiaeresis 0x0dc
+#define GDK_Yacute 0x0dd
+#define GDK_THORN 0x0de
+#define GDK_Thorn 0x0de
+#define GDK_ssharp 0x0df
+#define GDK_agrave 0x0e0
+#define GDK_aacute 0x0e1
+#define GDK_acircumflex 0x0e2
+#define GDK_atilde 0x0e3
+#define GDK_adiaeresis 0x0e4
+#define GDK_aring 0x0e5
+#define GDK_ae 0x0e6
+#define GDK_ccedilla 0x0e7
+#define GDK_egrave 0x0e8
+#define GDK_eacute 0x0e9
+#define GDK_ecircumflex 0x0ea
+#define GDK_ediaeresis 0x0eb
+#define GDK_igrave 0x0ec
+#define GDK_iacute 0x0ed
+#define GDK_icircumflex 0x0ee
+#define GDK_idiaeresis 0x0ef
+#define GDK_eth 0x0f0
+#define GDK_ntilde 0x0f1
+#define GDK_ograve 0x0f2
+#define GDK_oacute 0x0f3
+#define GDK_ocircumflex 0x0f4
+#define GDK_otilde 0x0f5
+#define GDK_odiaeresis 0x0f6
+#define GDK_division 0x0f7
+#define GDK_oslash 0x0f8
+#define GDK_ooblique 0x0f8
+#define GDK_ugrave 0x0f9
+#define GDK_uacute 0x0fa
+#define GDK_ucircumflex 0x0fb
+#define GDK_udiaeresis 0x0fc
+#define GDK_yacute 0x0fd
+#define GDK_thorn 0x0fe
+#define GDK_ydiaeresis 0x0ff
+#define GDK_Aogonek 0x1a1
+#define GDK_breve 0x1a2
+#define GDK_Lstroke 0x1a3
+#define GDK_Lcaron 0x1a5
+#define GDK_Sacute 0x1a6
+#define GDK_Scaron 0x1a9
+#define GDK_Scedilla 0x1aa
+#define GDK_Tcaron 0x1ab
+#define GDK_Zacute 0x1ac
+#define GDK_Zcaron 0x1ae
+#define GDK_Zabovedot 0x1af
+#define GDK_aogonek 0x1b1
+#define GDK_ogonek 0x1b2
+#define GDK_lstroke 0x1b3
+#define GDK_lcaron 0x1b5
+#define GDK_sacute 0x1b6
+#define GDK_caron 0x1b7
+#define GDK_scaron 0x1b9
+#define GDK_scedilla 0x1ba
+#define GDK_tcaron 0x1bb
+#define GDK_zacute 0x1bc
+#define GDK_doubleacute 0x1bd
+#define GDK_zcaron 0x1be
+#define GDK_zabovedot 0x1bf
+#define GDK_Racute 0x1c0
+#define GDK_Abreve 0x1c3
+#define GDK_Lacute 0x1c5
+#define GDK_Cacute 0x1c6
+#define GDK_Ccaron 0x1c8
+#define GDK_Eogonek 0x1ca
+#define GDK_Ecaron 0x1cc
+#define GDK_Dcaron 0x1cf
+#define GDK_Dstroke 0x1d0
+#define GDK_Nacute 0x1d1
+#define GDK_Ncaron 0x1d2
+#define GDK_Odoubleacute 0x1d5
+#define GDK_Rcaron 0x1d8
+#define GDK_Uring 0x1d9
+#define GDK_Udoubleacute 0x1db
+#define GDK_Tcedilla 0x1de
+#define GDK_racute 0x1e0
+#define GDK_abreve 0x1e3
+#define GDK_lacute 0x1e5
+#define GDK_cacute 0x1e6
+#define GDK_ccaron 0x1e8
+#define GDK_eogonek 0x1ea
+#define GDK_ecaron 0x1ec
+#define GDK_dcaron 0x1ef
+#define GDK_dstroke 0x1f0
+#define GDK_nacute 0x1f1
+#define GDK_ncaron 0x1f2
+#define GDK_odoubleacute 0x1f5
+#define GDK_udoubleacute 0x1fb
+#define GDK_rcaron 0x1f8
+#define GDK_uring 0x1f9
+#define GDK_tcedilla 0x1fe
+#define GDK_abovedot 0x1ff
+#define GDK_Hstroke 0x2a1
+#define GDK_Hcircumflex 0x2a6
+#define GDK_Iabovedot 0x2a9
+#define GDK_Gbreve 0x2ab
+#define GDK_Jcircumflex 0x2ac
+#define GDK_hstroke 0x2b1
+#define GDK_hcircumflex 0x2b6
+#define GDK_idotless 0x2b9
+#define GDK_gbreve 0x2bb
+#define GDK_jcircumflex 0x2bc
+#define GDK_Cabovedot 0x2c5
+#define GDK_Ccircumflex 0x2c6
+#define GDK_Gabovedot 0x2d5
+#define GDK_Gcircumflex 0x2d8
+#define GDK_Ubreve 0x2dd
+#define GDK_Scircumflex 0x2de
+#define GDK_cabovedot 0x2e5
+#define GDK_ccircumflex 0x2e6
+#define GDK_gabovedot 0x2f5
+#define GDK_gcircumflex 0x2f8
+#define GDK_ubreve 0x2fd
+#define GDK_scircumflex 0x2fe
+#define GDK_kra 0x3a2
+#define GDK_kappa 0x3a2
+#define GDK_Rcedilla 0x3a3
+#define GDK_Itilde 0x3a5
+#define GDK_Lcedilla 0x3a6
+#define GDK_Emacron 0x3aa
+#define GDK_Gcedilla 0x3ab
+#define GDK_Tslash 0x3ac
+#define GDK_rcedilla 0x3b3
+#define GDK_itilde 0x3b5
+#define GDK_lcedilla 0x3b6
+#define GDK_emacron 0x3ba
+#define GDK_gcedilla 0x3bb
+#define GDK_tslash 0x3bc
+#define GDK_ENG 0x3bd
+#define GDK_eng 0x3bf
+#define GDK_Amacron 0x3c0
+#define GDK_Iogonek 0x3c7
+#define GDK_Eabovedot 0x3cc
+#define GDK_Imacron 0x3cf
+#define GDK_Ncedilla 0x3d1
+#define GDK_Omacron 0x3d2
+#define GDK_Kcedilla 0x3d3
+#define GDK_Uogonek 0x3d9
+#define GDK_Utilde 0x3dd
+#define GDK_Umacron 0x3de
+#define GDK_amacron 0x3e0
+#define GDK_iogonek 0x3e7
+#define GDK_eabovedot 0x3ec
+#define GDK_imacron 0x3ef
+#define GDK_ncedilla 0x3f1
+#define GDK_omacron 0x3f2
+#define GDK_kcedilla 0x3f3
+#define GDK_uogonek 0x3f9
+#define GDK_utilde 0x3fd
+#define GDK_umacron 0x3fe
+#define GDK_Babovedot 0x1001e02
+#define GDK_babovedot 0x1001e03
+#define GDK_Dabovedot 0x1001e0a
+#define GDK_Wgrave 0x1001e80
+#define GDK_Wacute 0x1001e82
+#define GDK_dabovedot 0x1001e0b
+#define GDK_Ygrave 0x1001ef2
+#define GDK_Fabovedot 0x1001e1e
+#define GDK_fabovedot 0x1001e1f
+#define GDK_Mabovedot 0x1001e40
+#define GDK_mabovedot 0x1001e41
+#define GDK_Pabovedot 0x1001e56
+#define GDK_wgrave 0x1001e81
+#define GDK_pabovedot 0x1001e57
+#define GDK_wacute 0x1001e83
+#define GDK_Sabovedot 0x1001e60
+#define GDK_ygrave 0x1001ef3
+#define GDK_Wdiaeresis 0x1001e84
+#define GDK_wdiaeresis 0x1001e85
+#define GDK_sabovedot 0x1001e61
+#define GDK_Wcircumflex 0x1000174
+#define GDK_Tabovedot 0x1001e6a
+#define GDK_Ycircumflex 0x1000176
+#define GDK_wcircumflex 0x1000175
+#define GDK_tabovedot 0x1001e6b
+#define GDK_ycircumflex 0x1000177
+#define GDK_OE 0x13bc
+#define GDK_oe 0x13bd
+#define GDK_Ydiaeresis 0x13be
+#define GDK_overline 0x47e
+#define GDK_kana_fullstop 0x4a1
+#define GDK_kana_openingbracket 0x4a2
+#define GDK_kana_closingbracket 0x4a3
+#define GDK_kana_comma 0x4a4
+#define GDK_kana_conjunctive 0x4a5
+#define GDK_kana_middledot 0x4a5
+#define GDK_kana_WO 0x4a6
+#define GDK_kana_a 0x4a7
+#define GDK_kana_i 0x4a8
+#define GDK_kana_u 0x4a9
+#define GDK_kana_e 0x4aa
+#define GDK_kana_o 0x4ab
+#define GDK_kana_ya 0x4ac
+#define GDK_kana_yu 0x4ad
+#define GDK_kana_yo 0x4ae
+#define GDK_kana_tsu 0x4af
+#define GDK_kana_tu 0x4af
+#define GDK_prolongedsound 0x4b0
+#define GDK_kana_A 0x4b1
+#define GDK_kana_I 0x4b2
+#define GDK_kana_U 0x4b3
+#define GDK_kana_E 0x4b4
+#define GDK_kana_O 0x4b5
+#define GDK_kana_KA 0x4b6
+#define GDK_kana_KI 0x4b7
+#define GDK_kana_KU 0x4b8
+#define GDK_kana_KE 0x4b9
+#define GDK_kana_KO 0x4ba
+#define GDK_kana_SA 0x4bb
+#define GDK_kana_SHI 0x4bc
+#define GDK_kana_SU 0x4bd
+#define GDK_kana_SE 0x4be
+#define GDK_kana_SO 0x4bf
+#define GDK_kana_TA 0x4c0
+#define GDK_kana_CHI 0x4c1
+#define GDK_kana_TI 0x4c1
+#define GDK_kana_TSU 0x4c2
+#define GDK_kana_TU 0x4c2
+#define GDK_kana_TE 0x4c3
+#define GDK_kana_TO 0x4c4
+#define GDK_kana_NA 0x4c5
+#define GDK_kana_NI 0x4c6
+#define GDK_kana_NU 0x4c7
+#define GDK_kana_NE 0x4c8
+#define GDK_kana_NO 0x4c9
+#define GDK_kana_HA 0x4ca
+#define GDK_kana_HI 0x4cb
+#define GDK_kana_FU 0x4cc
+#define GDK_kana_HU 0x4cc
+#define GDK_kana_HE 0x4cd
+#define GDK_kana_HO 0x4ce
+#define GDK_kana_MA 0x4cf
+#define GDK_kana_MI 0x4d0
+#define GDK_kana_MU 0x4d1
+#define GDK_kana_ME 0x4d2
+#define GDK_kana_MO 0x4d3
+#define GDK_kana_YA 0x4d4
+#define GDK_kana_YU 0x4d5
+#define GDK_kana_YO 0x4d6
+#define GDK_kana_RA 0x4d7
+#define GDK_kana_RI 0x4d8
+#define GDK_kana_RU 0x4d9
+#define GDK_kana_RE 0x4da
+#define GDK_kana_RO 0x4db
+#define GDK_kana_WA 0x4dc
+#define GDK_kana_N 0x4dd
+#define GDK_voicedsound 0x4de
+#define GDK_semivoicedsound 0x4df
+#define GDK_kana_switch 0xff7e
+#define GDK_Farsi_0 0x10006f0
+#define GDK_Farsi_1 0x10006f1
+#define GDK_Farsi_2 0x10006f2
+#define GDK_Farsi_3 0x10006f3
+#define GDK_Farsi_4 0x10006f4
+#define GDK_Farsi_5 0x10006f5
+#define GDK_Farsi_6 0x10006f6
+#define GDK_Farsi_7 0x10006f7
+#define GDK_Farsi_8 0x10006f8
+#define GDK_Farsi_9 0x10006f9
+#define GDK_Arabic_percent 0x100066a
+#define GDK_Arabic_superscript_alef 0x1000670
+#define GDK_Arabic_tteh 0x1000679
+#define GDK_Arabic_peh 0x100067e
+#define GDK_Arabic_tcheh 0x1000686
+#define GDK_Arabic_ddal 0x1000688
+#define GDK_Arabic_rreh 0x1000691
+#define GDK_Arabic_comma 0x5ac
+#define GDK_Arabic_fullstop 0x10006d4
+#define GDK_Arabic_0 0x1000660
+#define GDK_Arabic_1 0x1000661
+#define GDK_Arabic_2 0x1000662
+#define GDK_Arabic_3 0x1000663
+#define GDK_Arabic_4 0x1000664
+#define GDK_Arabic_5 0x1000665
+#define GDK_Arabic_6 0x1000666
+#define GDK_Arabic_7 0x1000667
+#define GDK_Arabic_8 0x1000668
+#define GDK_Arabic_9 0x1000669
+#define GDK_Arabic_semicolon 0x5bb
+#define GDK_Arabic_question_mark 0x5bf
+#define GDK_Arabic_hamza 0x5c1
+#define GDK_Arabic_maddaonalef 0x5c2
+#define GDK_Arabic_hamzaonalef 0x5c3
+#define GDK_Arabic_hamzaonwaw 0x5c4
+#define GDK_Arabic_hamzaunderalef 0x5c5
+#define GDK_Arabic_hamzaonyeh 0x5c6
+#define GDK_Arabic_alef 0x5c7
+#define GDK_Arabic_beh 0x5c8
+#define GDK_Arabic_tehmarbuta 0x5c9
+#define GDK_Arabic_teh 0x5ca
+#define GDK_Arabic_theh 0x5cb
+#define GDK_Arabic_jeem 0x5cc
+#define GDK_Arabic_hah 0x5cd
+#define GDK_Arabic_khah 0x5ce
+#define GDK_Arabic_dal 0x5cf
+#define GDK_Arabic_thal 0x5d0
+#define GDK_Arabic_ra 0x5d1
+#define GDK_Arabic_zain 0x5d2
+#define GDK_Arabic_seen 0x5d3
+#define GDK_Arabic_sheen 0x5d4
+#define GDK_Arabic_sad 0x5d5
+#define GDK_Arabic_dad 0x5d6
+#define GDK_Arabic_tah 0x5d7
+#define GDK_Arabic_zah 0x5d8
+#define GDK_Arabic_ain 0x5d9
+#define GDK_Arabic_ghain 0x5da
+#define GDK_Arabic_tatweel 0x5e0
+#define GDK_Arabic_feh 0x5e1
+#define GDK_Arabic_qaf 0x5e2
+#define GDK_Arabic_kaf 0x5e3
+#define GDK_Arabic_lam 0x5e4
+#define GDK_Arabic_meem 0x5e5
+#define GDK_Arabic_noon 0x5e6
+#define GDK_Arabic_ha 0x5e7
+#define GDK_Arabic_heh 0x5e7
+#define GDK_Arabic_waw 0x5e8
+#define GDK_Arabic_alefmaksura 0x5e9
+#define GDK_Arabic_yeh 0x5ea
+#define GDK_Arabic_fathatan 0x5eb
+#define GDK_Arabic_dammatan 0x5ec
+#define GDK_Arabic_kasratan 0x5ed
+#define GDK_Arabic_fatha 0x5ee
+#define GDK_Arabic_damma 0x5ef
+#define GDK_Arabic_kasra 0x5f0
+#define GDK_Arabic_shadda 0x5f1
+#define GDK_Arabic_sukun 0x5f2
+#define GDK_Arabic_madda_above 0x1000653
+#define GDK_Arabic_hamza_above 0x1000654
+#define GDK_Arabic_hamza_below 0x1000655
+#define GDK_Arabic_jeh 0x1000698
+#define GDK_Arabic_veh 0x10006a4
+#define GDK_Arabic_keheh 0x10006a9
+#define GDK_Arabic_gaf 0x10006af
+#define GDK_Arabic_noon_ghunna 0x10006ba
+#define GDK_Arabic_heh_doachashmee 0x10006be
+#define GDK_Farsi_yeh 0x10006cc
+#define GDK_Arabic_farsi_yeh 0x10006cc
+#define GDK_Arabic_yeh_baree 0x10006d2
+#define GDK_Arabic_heh_goal 0x10006c1
+#define GDK_Arabic_switch 0xff7e
+#define GDK_Cyrillic_GHE_bar 0x1000492
+#define GDK_Cyrillic_ghe_bar 0x1000493
+#define GDK_Cyrillic_ZHE_descender 0x1000496
+#define GDK_Cyrillic_zhe_descender 0x1000497
+#define GDK_Cyrillic_KA_descender 0x100049a
+#define GDK_Cyrillic_ka_descender 0x100049b
+#define GDK_Cyrillic_KA_vertstroke 0x100049c
+#define GDK_Cyrillic_ka_vertstroke 0x100049d
+#define GDK_Cyrillic_EN_descender 0x10004a2
+#define GDK_Cyrillic_en_descender 0x10004a3
+#define GDK_Cyrillic_U_straight 0x10004ae
+#define GDK_Cyrillic_u_straight 0x10004af
+#define GDK_Cyrillic_U_straight_bar 0x10004b0
+#define GDK_Cyrillic_u_straight_bar 0x10004b1
+#define GDK_Cyrillic_HA_descender 0x10004b2
+#define GDK_Cyrillic_ha_descender 0x10004b3
+#define GDK_Cyrillic_CHE_descender 0x10004b6
+#define GDK_Cyrillic_che_descender 0x10004b7
+#define GDK_Cyrillic_CHE_vertstroke 0x10004b8
+#define GDK_Cyrillic_che_vertstroke 0x10004b9
+#define GDK_Cyrillic_SHHA 0x10004ba
+#define GDK_Cyrillic_shha 0x10004bb
+#define GDK_Cyrillic_SCHWA 0x10004d8
+#define GDK_Cyrillic_schwa 0x10004d9
+#define GDK_Cyrillic_I_macron 0x10004e2
+#define GDK_Cyrillic_i_macron 0x10004e3
+#define GDK_Cyrillic_O_bar 0x10004e8
+#define GDK_Cyrillic_o_bar 0x10004e9
+#define GDK_Cyrillic_U_macron 0x10004ee
+#define GDK_Cyrillic_u_macron 0x10004ef
+#define GDK_Serbian_dje 0x6a1
+#define GDK_Macedonia_gje 0x6a2
+#define GDK_Cyrillic_io 0x6a3
+#define GDK_Ukrainian_ie 0x6a4
+#define GDK_Ukranian_je 0x6a4
+#define GDK_Macedonia_dse 0x6a5
+#define GDK_Ukrainian_i 0x6a6
+#define GDK_Ukranian_i 0x6a6
+#define GDK_Ukrainian_yi 0x6a7
+#define GDK_Ukranian_yi 0x6a7
+#define GDK_Cyrillic_je 0x6a8
+#define GDK_Serbian_je 0x6a8
+#define GDK_Cyrillic_lje 0x6a9
+#define GDK_Serbian_lje 0x6a9
+#define GDK_Cyrillic_nje 0x6aa
+#define GDK_Serbian_nje 0x6aa
+#define GDK_Serbian_tshe 0x6ab
+#define GDK_Macedonia_kje 0x6ac
+#define GDK_Ukrainian_ghe_with_upturn 0x6ad
+#define GDK_Byelorussian_shortu 0x6ae
+#define GDK_Cyrillic_dzhe 0x6af
+#define GDK_Serbian_dze 0x6af
+#define GDK_numerosign 0x6b0
+#define GDK_Serbian_DJE 0x6b1
+#define GDK_Macedonia_GJE 0x6b2
+#define GDK_Cyrillic_IO 0x6b3
+#define GDK_Ukrainian_IE 0x6b4
+#define GDK_Ukranian_JE 0x6b4
+#define GDK_Macedonia_DSE 0x6b5
+#define GDK_Ukrainian_I 0x6b6
+#define GDK_Ukranian_I 0x6b6
+#define GDK_Ukrainian_YI 0x6b7
+#define GDK_Ukranian_YI 0x6b7
+#define GDK_Cyrillic_JE 0x6b8
+#define GDK_Serbian_JE 0x6b8
+#define GDK_Cyrillic_LJE 0x6b9
+#define GDK_Serbian_LJE 0x6b9
+#define GDK_Cyrillic_NJE 0x6ba
+#define GDK_Serbian_NJE 0x6ba
+#define GDK_Serbian_TSHE 0x6bb
+#define GDK_Macedonia_KJE 0x6bc
+#define GDK_Ukrainian_GHE_WITH_UPTURN 0x6bd
+#define GDK_Byelorussian_SHORTU 0x6be
+#define GDK_Cyrillic_DZHE 0x6bf
+#define GDK_Serbian_DZE 0x6bf
+#define GDK_Cyrillic_yu 0x6c0
+#define GDK_Cyrillic_a 0x6c1
+#define GDK_Cyrillic_be 0x6c2
+#define GDK_Cyrillic_tse 0x6c3
+#define GDK_Cyrillic_de 0x6c4
+#define GDK_Cyrillic_ie 0x6c5
+#define GDK_Cyrillic_ef 0x6c6
+#define GDK_Cyrillic_ghe 0x6c7
+#define GDK_Cyrillic_ha 0x6c8
+#define GDK_Cyrillic_i 0x6c9
+#define GDK_Cyrillic_shorti 0x6ca
+#define GDK_Cyrillic_ka 0x6cb
+#define GDK_Cyrillic_el 0x6cc
+#define GDK_Cyrillic_em 0x6cd
+#define GDK_Cyrillic_en 0x6ce
+#define GDK_Cyrillic_o 0x6cf
+#define GDK_Cyrillic_pe 0x6d0
+#define GDK_Cyrillic_ya 0x6d1
+#define GDK_Cyrillic_er 0x6d2
+#define GDK_Cyrillic_es 0x6d3
+#define GDK_Cyrillic_te 0x6d4
+#define GDK_Cyrillic_u 0x6d5
+#define GDK_Cyrillic_zhe 0x6d6
+#define GDK_Cyrillic_ve 0x6d7
+#define GDK_Cyrillic_softsign 0x6d8
+#define GDK_Cyrillic_yeru 0x6d9
+#define GDK_Cyrillic_ze 0x6da
+#define GDK_Cyrillic_sha 0x6db
+#define GDK_Cyrillic_e 0x6dc
+#define GDK_Cyrillic_shcha 0x6dd
+#define GDK_Cyrillic_che 0x6de
+#define GDK_Cyrillic_hardsign 0x6df
+#define GDK_Cyrillic_YU 0x6e0
+#define GDK_Cyrillic_A 0x6e1
+#define GDK_Cyrillic_BE 0x6e2
+#define GDK_Cyrillic_TSE 0x6e3
+#define GDK_Cyrillic_DE 0x6e4
+#define GDK_Cyrillic_IE 0x6e5
+#define GDK_Cyrillic_EF 0x6e6
+#define GDK_Cyrillic_GHE 0x6e7
+#define GDK_Cyrillic_HA 0x6e8
+#define GDK_Cyrillic_I 0x6e9
+#define GDK_Cyrillic_SHORTI 0x6ea
+#define GDK_Cyrillic_KA 0x6eb
+#define GDK_Cyrillic_EL 0x6ec
+#define GDK_Cyrillic_EM 0x6ed
+#define GDK_Cyrillic_EN 0x6ee
+#define GDK_Cyrillic_O 0x6ef
+#define GDK_Cyrillic_PE 0x6f0
+#define GDK_Cyrillic_YA 0x6f1
+#define GDK_Cyrillic_ER 0x6f2
+#define GDK_Cyrillic_ES 0x6f3
+#define GDK_Cyrillic_TE 0x6f4
+#define GDK_Cyrillic_U 0x6f5
+#define GDK_Cyrillic_ZHE 0x6f6
+#define GDK_Cyrillic_VE 0x6f7
+#define GDK_Cyrillic_SOFTSIGN 0x6f8
+#define GDK_Cyrillic_YERU 0x6f9
+#define GDK_Cyrillic_ZE 0x6fa
+#define GDK_Cyrillic_SHA 0x6fb
+#define GDK_Cyrillic_E 0x6fc
+#define GDK_Cyrillic_SHCHA 0x6fd
+#define GDK_Cyrillic_CHE 0x6fe
+#define GDK_Cyrillic_HARDSIGN 0x6ff
+#define GDK_Greek_ALPHAaccent 0x7a1
+#define GDK_Greek_EPSILONaccent 0x7a2
+#define GDK_Greek_ETAaccent 0x7a3
+#define GDK_Greek_IOTAaccent 0x7a4
+#define GDK_Greek_IOTAdieresis 0x7a5
+#define GDK_Greek_IOTAdiaeresis 0x7a5
+#define GDK_Greek_OMICRONaccent 0x7a7
+#define GDK_Greek_UPSILONaccent 0x7a8
+#define GDK_Greek_UPSILONdieresis 0x7a9
+#define GDK_Greek_OMEGAaccent 0x7ab
+#define GDK_Greek_accentdieresis 0x7ae
+#define GDK_Greek_horizbar 0x7af
+#define GDK_Greek_alphaaccent 0x7b1
+#define GDK_Greek_epsilonaccent 0x7b2
+#define GDK_Greek_etaaccent 0x7b3
+#define GDK_Greek_iotaaccent 0x7b4
+#define GDK_Greek_iotadieresis 0x7b5
+#define GDK_Greek_iotaaccentdieresis 0x7b6
+#define GDK_Greek_omicronaccent 0x7b7
+#define GDK_Greek_upsilonaccent 0x7b8
+#define GDK_Greek_upsilondieresis 0x7b9
+#define GDK_Greek_upsilonaccentdieresis 0x7ba
+#define GDK_Greek_omegaaccent 0x7bb
+#define GDK_Greek_ALPHA 0x7c1
+#define GDK_Greek_BETA 0x7c2
+#define GDK_Greek_GAMMA 0x7c3
+#define GDK_Greek_DELTA 0x7c4
+#define GDK_Greek_EPSILON 0x7c5
+#define GDK_Greek_ZETA 0x7c6
+#define GDK_Greek_ETA 0x7c7
+#define GDK_Greek_THETA 0x7c8
+#define GDK_Greek_IOTA 0x7c9
+#define GDK_Greek_KAPPA 0x7ca
+#define GDK_Greek_LAMDA 0x7cb
+#define GDK_Greek_LAMBDA 0x7cb
+#define GDK_Greek_MU 0x7cc
+#define GDK_Greek_NU 0x7cd
+#define GDK_Greek_XI 0x7ce
+#define GDK_Greek_OMICRON 0x7cf
+#define GDK_Greek_PI 0x7d0
+#define GDK_Greek_RHO 0x7d1
+#define GDK_Greek_SIGMA 0x7d2
+#define GDK_Greek_TAU 0x7d4
+#define GDK_Greek_UPSILON 0x7d5
+#define GDK_Greek_PHI 0x7d6
+#define GDK_Greek_CHI 0x7d7
+#define GDK_Greek_PSI 0x7d8
+#define GDK_Greek_OMEGA 0x7d9
+#define GDK_Greek_alpha 0x7e1
+#define GDK_Greek_beta 0x7e2
+#define GDK_Greek_gamma 0x7e3
+#define GDK_Greek_delta 0x7e4
+#define GDK_Greek_epsilon 0x7e5
+#define GDK_Greek_zeta 0x7e6
+#define GDK_Greek_eta 0x7e7
+#define GDK_Greek_theta 0x7e8
+#define GDK_Greek_iota 0x7e9
+#define GDK_Greek_kappa 0x7ea
+#define GDK_Greek_lamda 0x7eb
+#define GDK_Greek_lambda 0x7eb
+#define GDK_Greek_mu 0x7ec
+#define GDK_Greek_nu 0x7ed
+#define GDK_Greek_xi 0x7ee
+#define GDK_Greek_omicron 0x7ef
+#define GDK_Greek_pi 0x7f0
+#define GDK_Greek_rho 0x7f1
+#define GDK_Greek_sigma 0x7f2
+#define GDK_Greek_finalsmallsigma 0x7f3
+#define GDK_Greek_tau 0x7f4
+#define GDK_Greek_upsilon 0x7f5
+#define GDK_Greek_phi 0x7f6
+#define GDK_Greek_chi 0x7f7
+#define GDK_Greek_psi 0x7f8
+#define GDK_Greek_omega 0x7f9
+#define GDK_Greek_switch 0xff7e
+#define GDK_leftradical 0x8a1
+#define GDK_topleftradical 0x8a2
+#define GDK_horizconnector 0x8a3
+#define GDK_topintegral 0x8a4
+#define GDK_botintegral 0x8a5
+#define GDK_vertconnector 0x8a6
+#define GDK_topleftsqbracket 0x8a7
+#define GDK_botleftsqbracket 0x8a8
+#define GDK_toprightsqbracket 0x8a9
+#define GDK_botrightsqbracket 0x8aa
+#define GDK_topleftparens 0x8ab
+#define GDK_botleftparens 0x8ac
+#define GDK_toprightparens 0x8ad
+#define GDK_botrightparens 0x8ae
+#define GDK_leftmiddlecurlybrace 0x8af
+#define GDK_rightmiddlecurlybrace 0x8b0
+#define GDK_topleftsummation 0x8b1
+#define GDK_botleftsummation 0x8b2
+#define GDK_topvertsummationconnector 0x8b3
+#define GDK_botvertsummationconnector 0x8b4
+#define GDK_toprightsummation 0x8b5
+#define GDK_botrightsummation 0x8b6
+#define GDK_rightmiddlesummation 0x8b7
+#define GDK_lessthanequal 0x8bc
+#define GDK_notequal 0x8bd
+#define GDK_greaterthanequal 0x8be
+#define GDK_integral 0x8bf
+#define GDK_therefore 0x8c0
+#define GDK_variation 0x8c1
+#define GDK_infinity 0x8c2
+#define GDK_nabla 0x8c5
+#define GDK_approximate 0x8c8
+#define GDK_similarequal 0x8c9
+#define GDK_ifonlyif 0x8cd
+#define GDK_implies 0x8ce
+#define GDK_identical 0x8cf
+#define GDK_radical 0x8d6
+#define GDK_includedin 0x8da
+#define GDK_includes 0x8db
+#define GDK_intersection 0x8dc
+#define GDK_union 0x8dd
+#define GDK_logicaland 0x8de
+#define GDK_logicalor 0x8df
+#define GDK_partialderivative 0x8ef
+#define GDK_function 0x8f6
+#define GDK_leftarrow 0x8fb
+#define GDK_uparrow 0x8fc
+#define GDK_rightarrow 0x8fd
+#define GDK_downarrow 0x8fe
+#define GDK_blank 0x9df
+#define GDK_soliddiamond 0x9e0
+#define GDK_checkerboard 0x9e1
+#define GDK_ht 0x9e2
+#define GDK_ff 0x9e3
+#define GDK_cr 0x9e4
+#define GDK_lf 0x9e5
+#define GDK_nl 0x9e8
+#define GDK_vt 0x9e9
+#define GDK_lowrightcorner 0x9ea
+#define GDK_uprightcorner 0x9eb
+#define GDK_upleftcorner 0x9ec
+#define GDK_lowleftcorner 0x9ed
+#define GDK_crossinglines 0x9ee
+#define GDK_horizlinescan1 0x9ef
+#define GDK_horizlinescan3 0x9f0
+#define GDK_horizlinescan5 0x9f1
+#define GDK_horizlinescan7 0x9f2
+#define GDK_horizlinescan9 0x9f3
+#define GDK_leftt 0x9f4
+#define GDK_rightt 0x9f5
+#define GDK_bott 0x9f6
+#define GDK_topt 0x9f7
+#define GDK_vertbar 0x9f8
+#define GDK_emspace 0xaa1
+#define GDK_enspace 0xaa2
+#define GDK_em3space 0xaa3
+#define GDK_em4space 0xaa4
+#define GDK_digitspace 0xaa5
+#define GDK_punctspace 0xaa6
+#define GDK_thinspace 0xaa7
+#define GDK_hairspace 0xaa8
+#define GDK_emdash 0xaa9
+#define GDK_endash 0xaaa
+#define GDK_signifblank 0xaac
+#define GDK_ellipsis 0xaae
+#define GDK_doubbaselinedot 0xaaf
+#define GDK_onethird 0xab0
+#define GDK_twothirds 0xab1
+#define GDK_onefifth 0xab2
+#define GDK_twofifths 0xab3
+#define GDK_threefifths 0xab4
+#define GDK_fourfifths 0xab5
+#define GDK_onesixth 0xab6
+#define GDK_fivesixths 0xab7
+#define GDK_careof 0xab8
+#define GDK_figdash 0xabb
+#define GDK_leftanglebracket 0xabc
+#define GDK_decimalpoint 0xabd
+#define GDK_rightanglebracket 0xabe
+#define GDK_marker 0xabf
+#define GDK_oneeighth 0xac3
+#define GDK_threeeighths 0xac4
+#define GDK_fiveeighths 0xac5
+#define GDK_seveneighths 0xac6
+#define GDK_trademark 0xac9
+#define GDK_signaturemark 0xaca
+#define GDK_trademarkincircle 0xacb
+#define GDK_leftopentriangle 0xacc
+#define GDK_rightopentriangle 0xacd
+#define GDK_emopencircle 0xace
+#define GDK_emopenrectangle 0xacf
+#define GDK_leftsinglequotemark 0xad0
+#define GDK_rightsinglequotemark 0xad1
+#define GDK_leftdoublequotemark 0xad2
+#define GDK_rightdoublequotemark 0xad3
+#define GDK_prescription 0xad4
+#define GDK_minutes 0xad6
+#define GDK_seconds 0xad7
+#define GDK_latincross 0xad9
+#define GDK_hexagram 0xada
+#define GDK_filledrectbullet 0xadb
+#define GDK_filledlefttribullet 0xadc
+#define GDK_filledrighttribullet 0xadd
+#define GDK_emfilledcircle 0xade
+#define GDK_emfilledrect 0xadf
+#define GDK_enopencircbullet 0xae0
+#define GDK_enopensquarebullet 0xae1
+#define GDK_openrectbullet 0xae2
+#define GDK_opentribulletup 0xae3
+#define GDK_opentribulletdown 0xae4
+#define GDK_openstar 0xae5
+#define GDK_enfilledcircbullet 0xae6
+#define GDK_enfilledsqbullet 0xae7
+#define GDK_filledtribulletup 0xae8
+#define GDK_filledtribulletdown 0xae9
+#define GDK_leftpointer 0xaea
+#define GDK_rightpointer 0xaeb
+#define GDK_club 0xaec
+#define GDK_diamond 0xaed
+#define GDK_heart 0xaee
+#define GDK_maltesecross 0xaf0
+#define GDK_dagger 0xaf1
+#define GDK_doubledagger 0xaf2
+#define GDK_checkmark 0xaf3
+#define GDK_ballotcross 0xaf4
+#define GDK_musicalsharp 0xaf5
+#define GDK_musicalflat 0xaf6
+#define GDK_malesymbol 0xaf7
+#define GDK_femalesymbol 0xaf8
+#define GDK_telephone 0xaf9
+#define GDK_telephonerecorder 0xafa
+#define GDK_phonographcopyright 0xafb
+#define GDK_caret 0xafc
+#define GDK_singlelowquotemark 0xafd
+#define GDK_doublelowquotemark 0xafe
+#define GDK_cursor 0xaff
+#define GDK_leftcaret 0xba3
+#define GDK_rightcaret 0xba6
+#define GDK_downcaret 0xba8
+#define GDK_upcaret 0xba9
+#define GDK_overbar 0xbc0
+#define GDK_downtack 0xbc2
+#define GDK_upshoe 0xbc3
+#define GDK_downstile 0xbc4
+#define GDK_underbar 0xbc6
+#define GDK_jot 0xbca
+#define GDK_quad 0xbcc
+#define GDK_uptack 0xbce
+#define GDK_circle 0xbcf
+#define GDK_upstile 0xbd3
+#define GDK_downshoe 0xbd6
+#define GDK_rightshoe 0xbd8
+#define GDK_leftshoe 0xbda
+#define GDK_lefttack 0xbdc
+#define GDK_righttack 0xbfc
+#define GDK_hebrew_doublelowline 0xcdf
+#define GDK_hebrew_aleph 0xce0
+#define GDK_hebrew_bet 0xce1
+#define GDK_hebrew_beth 0xce1
+#define GDK_hebrew_gimel 0xce2
+#define GDK_hebrew_gimmel 0xce2
+#define GDK_hebrew_dalet 0xce3
+#define GDK_hebrew_daleth 0xce3
+#define GDK_hebrew_he 0xce4
+#define GDK_hebrew_waw 0xce5
+#define GDK_hebrew_zain 0xce6
+#define GDK_hebrew_zayin 0xce6
+#define GDK_hebrew_chet 0xce7
+#define GDK_hebrew_het 0xce7
+#define GDK_hebrew_tet 0xce8
+#define GDK_hebrew_teth 0xce8
+#define GDK_hebrew_yod 0xce9
+#define GDK_hebrew_finalkaph 0xcea
+#define GDK_hebrew_kaph 0xceb
+#define GDK_hebrew_lamed 0xcec
+#define GDK_hebrew_finalmem 0xced
+#define GDK_hebrew_mem 0xcee
+#define GDK_hebrew_finalnun 0xcef
+#define GDK_hebrew_nun 0xcf0
+#define GDK_hebrew_samech 0xcf1
+#define GDK_hebrew_samekh 0xcf1
+#define GDK_hebrew_ayin 0xcf2
+#define GDK_hebrew_finalpe 0xcf3
+#define GDK_hebrew_pe 0xcf4
+#define GDK_hebrew_finalzade 0xcf5
+#define GDK_hebrew_finalzadi 0xcf5
+#define GDK_hebrew_zade 0xcf6
+#define GDK_hebrew_zadi 0xcf6
+#define GDK_hebrew_qoph 0xcf7
+#define GDK_hebrew_kuf 0xcf7
+#define GDK_hebrew_resh 0xcf8
+#define GDK_hebrew_shin 0xcf9
+#define GDK_hebrew_taw 0xcfa
+#define GDK_hebrew_taf 0xcfa
+#define GDK_Hebrew_switch 0xff7e
+#define GDK_Thai_kokai 0xda1
+#define GDK_Thai_khokhai 0xda2
+#define GDK_Thai_khokhuat 0xda3
+#define GDK_Thai_khokhwai 0xda4
+#define GDK_Thai_khokhon 0xda5
+#define GDK_Thai_khorakhang 0xda6
+#define GDK_Thai_ngongu 0xda7
+#define GDK_Thai_chochan 0xda8
+#define GDK_Thai_choching 0xda9
+#define GDK_Thai_chochang 0xdaa
+#define GDK_Thai_soso 0xdab
+#define GDK_Thai_chochoe 0xdac
+#define GDK_Thai_yoying 0xdad
+#define GDK_Thai_dochada 0xdae
+#define GDK_Thai_topatak 0xdaf
+#define GDK_Thai_thothan 0xdb0
+#define GDK_Thai_thonangmontho 0xdb1
+#define GDK_Thai_thophuthao 0xdb2
+#define GDK_Thai_nonen 0xdb3
+#define GDK_Thai_dodek 0xdb4
+#define GDK_Thai_totao 0xdb5
+#define GDK_Thai_thothung 0xdb6
+#define GDK_Thai_thothahan 0xdb7
+#define GDK_Thai_thothong 0xdb8
+#define GDK_Thai_nonu 0xdb9
+#define GDK_Thai_bobaimai 0xdba
+#define GDK_Thai_popla 0xdbb
+#define GDK_Thai_phophung 0xdbc
+#define GDK_Thai_fofa 0xdbd
+#define GDK_Thai_phophan 0xdbe
+#define GDK_Thai_fofan 0xdbf
+#define GDK_Thai_phosamphao 0xdc0
+#define GDK_Thai_moma 0xdc1
+#define GDK_Thai_yoyak 0xdc2
+#define GDK_Thai_rorua 0xdc3
+#define GDK_Thai_ru 0xdc4
+#define GDK_Thai_loling 0xdc5
+#define GDK_Thai_lu 0xdc6
+#define GDK_Thai_wowaen 0xdc7
+#define GDK_Thai_sosala 0xdc8
+#define GDK_Thai_sorusi 0xdc9
+#define GDK_Thai_sosua 0xdca
+#define GDK_Thai_hohip 0xdcb
+#define GDK_Thai_lochula 0xdcc
+#define GDK_Thai_oang 0xdcd
+#define GDK_Thai_honokhuk 0xdce
+#define GDK_Thai_paiyannoi 0xdcf
+#define GDK_Thai_saraa 0xdd0
+#define GDK_Thai_maihanakat 0xdd1
+#define GDK_Thai_saraaa 0xdd2
+#define GDK_Thai_saraam 0xdd3
+#define GDK_Thai_sarai 0xdd4
+#define GDK_Thai_saraii 0xdd5
+#define GDK_Thai_saraue 0xdd6
+#define GDK_Thai_sarauee 0xdd7
+#define GDK_Thai_sarau 0xdd8
+#define GDK_Thai_sarauu 0xdd9
+#define GDK_Thai_phinthu 0xdda
+#define GDK_Thai_maihanakat_maitho 0xdde
+#define GDK_Thai_baht 0xddf
+#define GDK_Thai_sarae 0xde0
+#define GDK_Thai_saraae 0xde1
+#define GDK_Thai_sarao 0xde2
+#define GDK_Thai_saraaimaimuan 0xde3
+#define GDK_Thai_saraaimaimalai 0xde4
+#define GDK_Thai_lakkhangyao 0xde5
+#define GDK_Thai_maiyamok 0xde6
+#define GDK_Thai_maitaikhu 0xde7
+#define GDK_Thai_maiek 0xde8
+#define GDK_Thai_maitho 0xde9
+#define GDK_Thai_maitri 0xdea
+#define GDK_Thai_maichattawa 0xdeb
+#define GDK_Thai_thanthakhat 0xdec
+#define GDK_Thai_nikhahit 0xded
+#define GDK_Thai_leksun 0xdf0
+#define GDK_Thai_leknung 0xdf1
+#define GDK_Thai_leksong 0xdf2
+#define GDK_Thai_leksam 0xdf3
+#define GDK_Thai_leksi 0xdf4
+#define GDK_Thai_lekha 0xdf5
+#define GDK_Thai_lekhok 0xdf6
+#define GDK_Thai_lekchet 0xdf7
+#define GDK_Thai_lekpaet 0xdf8
+#define GDK_Thai_lekkao 0xdf9
+#define GDK_Hangul 0xff31
+#define GDK_Hangul_Start 0xff32
+#define GDK_Hangul_End 0xff33
+#define GDK_Hangul_Hanja 0xff34
+#define GDK_Hangul_Jamo 0xff35
+#define GDK_Hangul_Romaja 0xff36
+#define GDK_Hangul_Codeinput 0xff37
+#define GDK_Hangul_Jeonja 0xff38
+#define GDK_Hangul_Banja 0xff39
+#define GDK_Hangul_PreHanja 0xff3a
+#define GDK_Hangul_PostHanja 0xff3b
+#define GDK_Hangul_SingleCandidate 0xff3c
+#define GDK_Hangul_MultipleCandidate 0xff3d
+#define GDK_Hangul_PreviousCandidate 0xff3e
+#define GDK_Hangul_Special 0xff3f
+#define GDK_Hangul_switch 0xff7e
+#define GDK_Hangul_Kiyeog 0xea1
+#define GDK_Hangul_SsangKiyeog 0xea2
+#define GDK_Hangul_KiyeogSios 0xea3
+#define GDK_Hangul_Nieun 0xea4
+#define GDK_Hangul_NieunJieuj 0xea5
+#define GDK_Hangul_NieunHieuh 0xea6
+#define GDK_Hangul_Dikeud 0xea7
+#define GDK_Hangul_SsangDikeud 0xea8
+#define GDK_Hangul_Rieul 0xea9
+#define GDK_Hangul_RieulKiyeog 0xeaa
+#define GDK_Hangul_RieulMieum 0xeab
+#define GDK_Hangul_RieulPieub 0xeac
+#define GDK_Hangul_RieulSios 0xead
+#define GDK_Hangul_RieulTieut 0xeae
+#define GDK_Hangul_RieulPhieuf 0xeaf
+#define GDK_Hangul_RieulHieuh 0xeb0
+#define GDK_Hangul_Mieum 0xeb1
+#define GDK_Hangul_Pieub 0xeb2
+#define GDK_Hangul_SsangPieub 0xeb3
+#define GDK_Hangul_PieubSios 0xeb4
+#define GDK_Hangul_Sios 0xeb5
+#define GDK_Hangul_SsangSios 0xeb6
+#define GDK_Hangul_Ieung 0xeb7
+#define GDK_Hangul_Jieuj 0xeb8
+#define GDK_Hangul_SsangJieuj 0xeb9
+#define GDK_Hangul_Cieuc 0xeba
+#define GDK_Hangul_Khieuq 0xebb
+#define GDK_Hangul_Tieut 0xebc
+#define GDK_Hangul_Phieuf 0xebd
+#define GDK_Hangul_Hieuh 0xebe
+#define GDK_Hangul_A 0xebf
+#define GDK_Hangul_AE 0xec0
+#define GDK_Hangul_YA 0xec1
+#define GDK_Hangul_YAE 0xec2
+#define GDK_Hangul_EO 0xec3
+#define GDK_Hangul_E 0xec4
+#define GDK_Hangul_YEO 0xec5
+#define GDK_Hangul_YE 0xec6
+#define GDK_Hangul_O 0xec7
+#define GDK_Hangul_WA 0xec8
+#define GDK_Hangul_WAE 0xec9
+#define GDK_Hangul_OE 0xeca
+#define GDK_Hangul_YO 0xecb
+#define GDK_Hangul_U 0xecc
+#define GDK_Hangul_WEO 0xecd
+#define GDK_Hangul_WE 0xece
+#define GDK_Hangul_WI 0xecf
+#define GDK_Hangul_YU 0xed0
+#define GDK_Hangul_EU 0xed1
+#define GDK_Hangul_YI 0xed2
+#define GDK_Hangul_I 0xed3
+#define GDK_Hangul_J_Kiyeog 0xed4
+#define GDK_Hangul_J_SsangKiyeog 0xed5
+#define GDK_Hangul_J_KiyeogSios 0xed6
+#define GDK_Hangul_J_Nieun 0xed7
+#define GDK_Hangul_J_NieunJieuj 0xed8
+#define GDK_Hangul_J_NieunHieuh 0xed9
+#define GDK_Hangul_J_Dikeud 0xeda
+#define GDK_Hangul_J_Rieul 0xedb
+#define GDK_Hangul_J_RieulKiyeog 0xedc
+#define GDK_Hangul_J_RieulMieum 0xedd
+#define GDK_Hangul_J_RieulPieub 0xede
+#define GDK_Hangul_J_RieulSios 0xedf
+#define GDK_Hangul_J_RieulTieut 0xee0
+#define GDK_Hangul_J_RieulPhieuf 0xee1
+#define GDK_Hangul_J_RieulHieuh 0xee2
+#define GDK_Hangul_J_Mieum 0xee3
+#define GDK_Hangul_J_Pieub 0xee4
+#define GDK_Hangul_J_PieubSios 0xee5
+#define GDK_Hangul_J_Sios 0xee6
+#define GDK_Hangul_J_SsangSios 0xee7
+#define GDK_Hangul_J_Ieung 0xee8
+#define GDK_Hangul_J_Jieuj 0xee9
+#define GDK_Hangul_J_Cieuc 0xeea
+#define GDK_Hangul_J_Khieuq 0xeeb
+#define GDK_Hangul_J_Tieut 0xeec
+#define GDK_Hangul_J_Phieuf 0xeed
+#define GDK_Hangul_J_Hieuh 0xeee
+#define GDK_Hangul_RieulYeorinHieuh 0xeef
+#define GDK_Hangul_SunkyeongeumMieum 0xef0
+#define GDK_Hangul_SunkyeongeumPieub 0xef1
+#define GDK_Hangul_PanSios 0xef2
+#define GDK_Hangul_KkogjiDalrinIeung 0xef3
+#define GDK_Hangul_SunkyeongeumPhieuf 0xef4
+#define GDK_Hangul_YeorinHieuh 0xef5
+#define GDK_Hangul_AraeA 0xef6
+#define GDK_Hangul_AraeAE 0xef7
+#define GDK_Hangul_J_PanSios 0xef8
+#define GDK_Hangul_J_KkogjiDalrinIeung 0xef9
+#define GDK_Hangul_J_YeorinHieuh 0xefa
+#define GDK_Korean_Won 0xeff
+#define GDK_Armenian_ligature_ew 0x1000587
+#define GDK_Armenian_full_stop 0x1000589
+#define GDK_Armenian_verjaket 0x1000589
+#define GDK_Armenian_separation_mark 0x100055d
+#define GDK_Armenian_but 0x100055d
+#define GDK_Armenian_hyphen 0x100058a
+#define GDK_Armenian_yentamna 0x100058a
+#define GDK_Armenian_exclam 0x100055c
+#define GDK_Armenian_amanak 0x100055c
+#define GDK_Armenian_accent 0x100055b
+#define GDK_Armenian_shesht 0x100055b
+#define GDK_Armenian_question 0x100055e
+#define GDK_Armenian_paruyk 0x100055e
+#define GDK_Armenian_AYB 0x1000531
+#define GDK_Armenian_ayb 0x1000561
+#define GDK_Armenian_BEN 0x1000532
+#define GDK_Armenian_ben 0x1000562
+#define GDK_Armenian_GIM 0x1000533
+#define GDK_Armenian_gim 0x1000563
+#define GDK_Armenian_DA 0x1000534
+#define GDK_Armenian_da 0x1000564
+#define GDK_Armenian_YECH 0x1000535
+#define GDK_Armenian_yech 0x1000565
+#define GDK_Armenian_ZA 0x1000536
+#define GDK_Armenian_za 0x1000566
+#define GDK_Armenian_E 0x1000537
+#define GDK_Armenian_e 0x1000567
+#define GDK_Armenian_AT 0x1000538
+#define GDK_Armenian_at 0x1000568
+#define GDK_Armenian_TO 0x1000539
+#define GDK_Armenian_to 0x1000569
+#define GDK_Armenian_ZHE 0x100053a
+#define GDK_Armenian_zhe 0x100056a
+#define GDK_Armenian_INI 0x100053b
+#define GDK_Armenian_ini 0x100056b
+#define GDK_Armenian_LYUN 0x100053c
+#define GDK_Armenian_lyun 0x100056c
+#define GDK_Armenian_KHE 0x100053d
+#define GDK_Armenian_khe 0x100056d
+#define GDK_Armenian_TSA 0x100053e
+#define GDK_Armenian_tsa 0x100056e
+#define GDK_Armenian_KEN 0x100053f
+#define GDK_Armenian_ken 0x100056f
+#define GDK_Armenian_HO 0x1000540
+#define GDK_Armenian_ho 0x1000570
+#define GDK_Armenian_DZA 0x1000541
+#define GDK_Armenian_dza 0x1000571
+#define GDK_Armenian_GHAT 0x1000542
+#define GDK_Armenian_ghat 0x1000572
+#define GDK_Armenian_TCHE 0x1000543
+#define GDK_Armenian_tche 0x1000573
+#define GDK_Armenian_MEN 0x1000544
+#define GDK_Armenian_men 0x1000574
+#define GDK_Armenian_HI 0x1000545
+#define GDK_Armenian_hi 0x1000575
+#define GDK_Armenian_NU 0x1000546
+#define GDK_Armenian_nu 0x1000576
+#define GDK_Armenian_SHA 0x1000547
+#define GDK_Armenian_sha 0x1000577
+#define GDK_Armenian_VO 0x1000548
+#define GDK_Armenian_vo 0x1000578
+#define GDK_Armenian_CHA 0x1000549
+#define GDK_Armenian_cha 0x1000579
+#define GDK_Armenian_PE 0x100054a
+#define GDK_Armenian_pe 0x100057a
+#define GDK_Armenian_JE 0x100054b
+#define GDK_Armenian_je 0x100057b
+#define GDK_Armenian_RA 0x100054c
+#define GDK_Armenian_ra 0x100057c
+#define GDK_Armenian_SE 0x100054d
+#define GDK_Armenian_se 0x100057d
+#define GDK_Armenian_VEV 0x100054e
+#define GDK_Armenian_vev 0x100057e
+#define GDK_Armenian_TYUN 0x100054f
+#define GDK_Armenian_tyun 0x100057f
+#define GDK_Armenian_RE 0x1000550
+#define GDK_Armenian_re 0x1000580
+#define GDK_Armenian_TSO 0x1000551
+#define GDK_Armenian_tso 0x1000581
+#define GDK_Armenian_VYUN 0x1000552
+#define GDK_Armenian_vyun 0x1000582
+#define GDK_Armenian_PYUR 0x1000553
+#define GDK_Armenian_pyur 0x1000583
+#define GDK_Armenian_KE 0x1000554
+#define GDK_Armenian_ke 0x1000584
+#define GDK_Armenian_O 0x1000555
+#define GDK_Armenian_o 0x1000585
+#define GDK_Armenian_FE 0x1000556
+#define GDK_Armenian_fe 0x1000586
+#define GDK_Armenian_apostrophe 0x100055a
+#define GDK_Georgian_an 0x10010d0
+#define GDK_Georgian_ban 0x10010d1
+#define GDK_Georgian_gan 0x10010d2
+#define GDK_Georgian_don 0x10010d3
+#define GDK_Georgian_en 0x10010d4
+#define GDK_Georgian_vin 0x10010d5
+#define GDK_Georgian_zen 0x10010d6
+#define GDK_Georgian_tan 0x10010d7
+#define GDK_Georgian_in 0x10010d8
+#define GDK_Georgian_kan 0x10010d9
+#define GDK_Georgian_las 0x10010da
+#define GDK_Georgian_man 0x10010db
+#define GDK_Georgian_nar 0x10010dc
+#define GDK_Georgian_on 0x10010dd
+#define GDK_Georgian_par 0x10010de
+#define GDK_Georgian_zhar 0x10010df
+#define GDK_Georgian_rae 0x10010e0
+#define GDK_Georgian_san 0x10010e1
+#define GDK_Georgian_tar 0x10010e2
+#define GDK_Georgian_un 0x10010e3
+#define GDK_Georgian_phar 0x10010e4
+#define GDK_Georgian_khar 0x10010e5
+#define GDK_Georgian_ghan 0x10010e6
+#define GDK_Georgian_qar 0x10010e7
+#define GDK_Georgian_shin 0x10010e8
+#define GDK_Georgian_chin 0x10010e9
+#define GDK_Georgian_can 0x10010ea
+#define GDK_Georgian_jil 0x10010eb
+#define GDK_Georgian_cil 0x10010ec
+#define GDK_Georgian_char 0x10010ed
+#define GDK_Georgian_xan 0x10010ee
+#define GDK_Georgian_jhan 0x10010ef
+#define GDK_Georgian_hae 0x10010f0
+#define GDK_Georgian_he 0x10010f1
+#define GDK_Georgian_hie 0x10010f2
+#define GDK_Georgian_we 0x10010f3
+#define GDK_Georgian_har 0x10010f4
+#define GDK_Georgian_hoe 0x10010f5
+#define GDK_Georgian_fi 0x10010f6
+#define GDK_Xabovedot 0x1001e8a
+#define GDK_Ibreve 0x100012c
+#define GDK_Zstroke 0x10001b5
+#define GDK_Gcaron 0x10001e6
+#define GDK_Ocaron 0x10001d1
+#define GDK_Obarred 0x100019f
+#define GDK_xabovedot 0x1001e8b
+#define GDK_ibreve 0x100012d
+#define GDK_zstroke 0x10001b6
+#define GDK_gcaron 0x10001e7
+#define GDK_ocaron 0x10001d2
+#define GDK_obarred 0x1000275
+#define GDK_SCHWA 0x100018f
+#define GDK_schwa 0x1000259
+#define GDK_Lbelowdot 0x1001e36
+#define GDK_lbelowdot 0x1001e37
+#define GDK_Abelowdot 0x1001ea0
+#define GDK_abelowdot 0x1001ea1
+#define GDK_Ahook 0x1001ea2
+#define GDK_ahook 0x1001ea3
+#define GDK_Acircumflexacute 0x1001ea4
+#define GDK_acircumflexacute 0x1001ea5
+#define GDK_Acircumflexgrave 0x1001ea6
+#define GDK_acircumflexgrave 0x1001ea7
+#define GDK_Acircumflexhook 0x1001ea8
+#define GDK_acircumflexhook 0x1001ea9
+#define GDK_Acircumflextilde 0x1001eaa
+#define GDK_acircumflextilde 0x1001eab
+#define GDK_Acircumflexbelowdot 0x1001eac
+#define GDK_acircumflexbelowdot 0x1001ead
+#define GDK_Abreveacute 0x1001eae
+#define GDK_abreveacute 0x1001eaf
+#define GDK_Abrevegrave 0x1001eb0
+#define GDK_abrevegrave 0x1001eb1
+#define GDK_Abrevehook 0x1001eb2
+#define GDK_abrevehook 0x1001eb3
+#define GDK_Abrevetilde 0x1001eb4
+#define GDK_abrevetilde 0x1001eb5
+#define GDK_Abrevebelowdot 0x1001eb6
+#define GDK_abrevebelowdot 0x1001eb7
+#define GDK_Ebelowdot 0x1001eb8
+#define GDK_ebelowdot 0x1001eb9
+#define GDK_Ehook 0x1001eba
+#define GDK_ehook 0x1001ebb
+#define GDK_Etilde 0x1001ebc
+#define GDK_etilde 0x1001ebd
+#define GDK_Ecircumflexacute 0x1001ebe
+#define GDK_ecircumflexacute 0x1001ebf
+#define GDK_Ecircumflexgrave 0x1001ec0
+#define GDK_ecircumflexgrave 0x1001ec1
+#define GDK_Ecircumflexhook 0x1001ec2
+#define GDK_ecircumflexhook 0x1001ec3
+#define GDK_Ecircumflextilde 0x1001ec4
+#define GDK_ecircumflextilde 0x1001ec5
+#define GDK_Ecircumflexbelowdot 0x1001ec6
+#define GDK_ecircumflexbelowdot 0x1001ec7
+#define GDK_Ihook 0x1001ec8
+#define GDK_ihook 0x1001ec9
+#define GDK_Ibelowdot 0x1001eca
+#define GDK_ibelowdot 0x1001ecb
+#define GDK_Obelowdot 0x1001ecc
+#define GDK_obelowdot 0x1001ecd
+#define GDK_Ohook 0x1001ece
+#define GDK_ohook 0x1001ecf
+#define GDK_Ocircumflexacute 0x1001ed0
+#define GDK_ocircumflexacute 0x1001ed1
+#define GDK_Ocircumflexgrave 0x1001ed2
+#define GDK_ocircumflexgrave 0x1001ed3
+#define GDK_Ocircumflexhook 0x1001ed4
+#define GDK_ocircumflexhook 0x1001ed5
+#define GDK_Ocircumflextilde 0x1001ed6
+#define GDK_ocircumflextilde 0x1001ed7
+#define GDK_Ocircumflexbelowdot 0x1001ed8
+#define GDK_ocircumflexbelowdot 0x1001ed9
+#define GDK_Ohornacute 0x1001eda
+#define GDK_ohornacute 0x1001edb
+#define GDK_Ohorngrave 0x1001edc
+#define GDK_ohorngrave 0x1001edd
+#define GDK_Ohornhook 0x1001ede
+#define GDK_ohornhook 0x1001edf
+#define GDK_Ohorntilde 0x1001ee0
+#define GDK_ohorntilde 0x1001ee1
+#define GDK_Ohornbelowdot 0x1001ee2
+#define GDK_ohornbelowdot 0x1001ee3
+#define GDK_Ubelowdot 0x1001ee4
+#define GDK_ubelowdot 0x1001ee5
+#define GDK_Uhook 0x1001ee6
+#define GDK_uhook 0x1001ee7
+#define GDK_Uhornacute 0x1001ee8
+#define GDK_uhornacute 0x1001ee9
+#define GDK_Uhorngrave 0x1001eea
+#define GDK_uhorngrave 0x1001eeb
+#define GDK_Uhornhook 0x1001eec
+#define GDK_uhornhook 0x1001eed
+#define GDK_Uhorntilde 0x1001eee
+#define GDK_uhorntilde 0x1001eef
+#define GDK_Uhornbelowdot 0x1001ef0
+#define GDK_uhornbelowdot 0x1001ef1
+#define GDK_Ybelowdot 0x1001ef4
+#define GDK_ybelowdot 0x1001ef5
+#define GDK_Yhook 0x1001ef6
+#define GDK_yhook 0x1001ef7
+#define GDK_Ytilde 0x1001ef8
+#define GDK_ytilde 0x1001ef9
+#define GDK_Ohorn 0x10001a0
+#define GDK_ohorn 0x10001a1
+#define GDK_Uhorn 0x10001af
+#define GDK_uhorn 0x10001b0
+#define GDK_EcuSign 0x10020a0
+#define GDK_ColonSign 0x10020a1
+#define GDK_CruzeiroSign 0x10020a2
+#define GDK_FFrancSign 0x10020a3
+#define GDK_LiraSign 0x10020a4
+#define GDK_MillSign 0x10020a5
+#define GDK_NairaSign 0x10020a6
+#define GDK_PesetaSign 0x10020a7
+#define GDK_RupeeSign 0x10020a8
+#define GDK_WonSign 0x10020a9
+#define GDK_NewSheqelSign 0x10020aa
+#define GDK_DongSign 0x10020ab
+#define GDK_EuroSign 0x20ac
+#define GDK_zerosuperior 0x1002070
+#define GDK_foursuperior 0x1002074
+#define GDK_fivesuperior 0x1002075
+#define GDK_sixsuperior 0x1002076
+#define GDK_sevensuperior 0x1002077
+#define GDK_eightsuperior 0x1002078
+#define GDK_ninesuperior 0x1002079
+#define GDK_zerosubscript 0x1002080
+#define GDK_onesubscript 0x1002081
+#define GDK_twosubscript 0x1002082
+#define GDK_threesubscript 0x1002083
+#define GDK_foursubscript 0x1002084
+#define GDK_fivesubscript 0x1002085
+#define GDK_sixsubscript 0x1002086
+#define GDK_sevensubscript 0x1002087
+#define GDK_eightsubscript 0x1002088
+#define GDK_ninesubscript 0x1002089
+#define GDK_partdifferential 0x1002202
+#define GDK_emptyset 0x1002205
+#define GDK_elementof 0x1002208
+#define GDK_notelementof 0x1002209
+#define GDK_containsas 0x100220b
+#define GDK_squareroot 0x100221a
+#define GDK_cuberoot 0x100221b
+#define GDK_fourthroot 0x100221c
+#define GDK_dintegral 0x100222c
+#define GDK_tintegral 0x100222d
+#define GDK_because 0x1002235
+#define GDK_approxeq 0x1002248
+#define GDK_notapproxeq 0x1002247
+#define GDK_notidentical 0x1002262
+#define GDK_stricteq 0x1002263
+#define GDK_braille_dot_1 0xfff1
+#define GDK_braille_dot_2 0xfff2
+#define GDK_braille_dot_3 0xfff3
+#define GDK_braille_dot_4 0xfff4
+#define GDK_braille_dot_5 0xfff5
+#define GDK_braille_dot_6 0xfff6
+#define GDK_braille_dot_7 0xfff7
+#define GDK_braille_dot_8 0xfff8
+#define GDK_braille_dot_9 0xfff9
+#define GDK_braille_dot_10 0xfffa
+#define GDK_braille_blank 0x1002800
+#define GDK_braille_dots_1 0x1002801
+#define GDK_braille_dots_2 0x1002802
+#define GDK_braille_dots_12 0x1002803
+#define GDK_braille_dots_3 0x1002804
+#define GDK_braille_dots_13 0x1002805
+#define GDK_braille_dots_23 0x1002806
+#define GDK_braille_dots_123 0x1002807
+#define GDK_braille_dots_4 0x1002808
+#define GDK_braille_dots_14 0x1002809
+#define GDK_braille_dots_24 0x100280a
+#define GDK_braille_dots_124 0x100280b
+#define GDK_braille_dots_34 0x100280c
+#define GDK_braille_dots_134 0x100280d
+#define GDK_braille_dots_234 0x100280e
+#define GDK_braille_dots_1234 0x100280f
+#define GDK_braille_dots_5 0x1002810
+#define GDK_braille_dots_15 0x1002811
+#define GDK_braille_dots_25 0x1002812
+#define GDK_braille_dots_125 0x1002813
+#define GDK_braille_dots_35 0x1002814
+#define GDK_braille_dots_135 0x1002815
+#define GDK_braille_dots_235 0x1002816
+#define GDK_braille_dots_1235 0x1002817
+#define GDK_braille_dots_45 0x1002818
+#define GDK_braille_dots_145 0x1002819
+#define GDK_braille_dots_245 0x100281a
+#define GDK_braille_dots_1245 0x100281b
+#define GDK_braille_dots_345 0x100281c
+#define GDK_braille_dots_1345 0x100281d
+#define GDK_braille_dots_2345 0x100281e
+#define GDK_braille_dots_12345 0x100281f
+#define GDK_braille_dots_6 0x1002820
+#define GDK_braille_dots_16 0x1002821
+#define GDK_braille_dots_26 0x1002822
+#define GDK_braille_dots_126 0x1002823
+#define GDK_braille_dots_36 0x1002824
+#define GDK_braille_dots_136 0x1002825
+#define GDK_braille_dots_236 0x1002826
+#define GDK_braille_dots_1236 0x1002827
+#define GDK_braille_dots_46 0x1002828
+#define GDK_braille_dots_146 0x1002829
+#define GDK_braille_dots_246 0x100282a
+#define GDK_braille_dots_1246 0x100282b
+#define GDK_braille_dots_346 0x100282c
+#define GDK_braille_dots_1346 0x100282d
+#define GDK_braille_dots_2346 0x100282e
+#define GDK_braille_dots_12346 0x100282f
+#define GDK_braille_dots_56 0x1002830
+#define GDK_braille_dots_156 0x1002831
+#define GDK_braille_dots_256 0x1002832
+#define GDK_braille_dots_1256 0x1002833
+#define GDK_braille_dots_356 0x1002834
+#define GDK_braille_dots_1356 0x1002835
+#define GDK_braille_dots_2356 0x1002836
+#define GDK_braille_dots_12356 0x1002837
+#define GDK_braille_dots_456 0x1002838
+#define GDK_braille_dots_1456 0x1002839
+#define GDK_braille_dots_2456 0x100283a
+#define GDK_braille_dots_12456 0x100283b
+#define GDK_braille_dots_3456 0x100283c
+#define GDK_braille_dots_13456 0x100283d
+#define GDK_braille_dots_23456 0x100283e
+#define GDK_braille_dots_123456 0x100283f
+#define GDK_braille_dots_7 0x1002840
+#define GDK_braille_dots_17 0x1002841
+#define GDK_braille_dots_27 0x1002842
+#define GDK_braille_dots_127 0x1002843
+#define GDK_braille_dots_37 0x1002844
+#define GDK_braille_dots_137 0x1002845
+#define GDK_braille_dots_237 0x1002846
+#define GDK_braille_dots_1237 0x1002847
+#define GDK_braille_dots_47 0x1002848
+#define GDK_braille_dots_147 0x1002849
+#define GDK_braille_dots_247 0x100284a
+#define GDK_braille_dots_1247 0x100284b
+#define GDK_braille_dots_347 0x100284c
+#define GDK_braille_dots_1347 0x100284d
+#define GDK_braille_dots_2347 0x100284e
+#define GDK_braille_dots_12347 0x100284f
+#define GDK_braille_dots_57 0x1002850
+#define GDK_braille_dots_157 0x1002851
+#define GDK_braille_dots_257 0x1002852
+#define GDK_braille_dots_1257 0x1002853
+#define GDK_braille_dots_357 0x1002854
+#define GDK_braille_dots_1357 0x1002855
+#define GDK_braille_dots_2357 0x1002856
+#define GDK_braille_dots_12357 0x1002857
+#define GDK_braille_dots_457 0x1002858
+#define GDK_braille_dots_1457 0x1002859
+#define GDK_braille_dots_2457 0x100285a
+#define GDK_braille_dots_12457 0x100285b
+#define GDK_braille_dots_3457 0x100285c
+#define GDK_braille_dots_13457 0x100285d
+#define GDK_braille_dots_23457 0x100285e
+#define GDK_braille_dots_123457 0x100285f
+#define GDK_braille_dots_67 0x1002860
+#define GDK_braille_dots_167 0x1002861
+#define GDK_braille_dots_267 0x1002862
+#define GDK_braille_dots_1267 0x1002863
+#define GDK_braille_dots_367 0x1002864
+#define GDK_braille_dots_1367 0x1002865
+#define GDK_braille_dots_2367 0x1002866
+#define GDK_braille_dots_12367 0x1002867
+#define GDK_braille_dots_467 0x1002868
+#define GDK_braille_dots_1467 0x1002869
+#define GDK_braille_dots_2467 0x100286a
+#define GDK_braille_dots_12467 0x100286b
+#define GDK_braille_dots_3467 0x100286c
+#define GDK_braille_dots_13467 0x100286d
+#define GDK_braille_dots_23467 0x100286e
+#define GDK_braille_dots_123467 0x100286f
+#define GDK_braille_dots_567 0x1002870
+#define GDK_braille_dots_1567 0x1002871
+#define GDK_braille_dots_2567 0x1002872
+#define GDK_braille_dots_12567 0x1002873
+#define GDK_braille_dots_3567 0x1002874
+#define GDK_braille_dots_13567 0x1002875
+#define GDK_braille_dots_23567 0x1002876
+#define GDK_braille_dots_123567 0x1002877
+#define GDK_braille_dots_4567 0x1002878
+#define GDK_braille_dots_14567 0x1002879
+#define GDK_braille_dots_24567 0x100287a
+#define GDK_braille_dots_124567 0x100287b
+#define GDK_braille_dots_34567 0x100287c
+#define GDK_braille_dots_134567 0x100287d
+#define GDK_braille_dots_234567 0x100287e
+#define GDK_braille_dots_1234567 0x100287f
+#define GDK_braille_dots_8 0x1002880
+#define GDK_braille_dots_18 0x1002881
+#define GDK_braille_dots_28 0x1002882
+#define GDK_braille_dots_128 0x1002883
+#define GDK_braille_dots_38 0x1002884
+#define GDK_braille_dots_138 0x1002885
+#define GDK_braille_dots_238 0x1002886
+#define GDK_braille_dots_1238 0x1002887
+#define GDK_braille_dots_48 0x1002888
+#define GDK_braille_dots_148 0x1002889
+#define GDK_braille_dots_248 0x100288a
+#define GDK_braille_dots_1248 0x100288b
+#define GDK_braille_dots_348 0x100288c
+#define GDK_braille_dots_1348 0x100288d
+#define GDK_braille_dots_2348 0x100288e
+#define GDK_braille_dots_12348 0x100288f
+#define GDK_braille_dots_58 0x1002890
+#define GDK_braille_dots_158 0x1002891
+#define GDK_braille_dots_258 0x1002892
+#define GDK_braille_dots_1258 0x1002893
+#define GDK_braille_dots_358 0x1002894
+#define GDK_braille_dots_1358 0x1002895
+#define GDK_braille_dots_2358 0x1002896
+#define GDK_braille_dots_12358 0x1002897
+#define GDK_braille_dots_458 0x1002898
+#define GDK_braille_dots_1458 0x1002899
+#define GDK_braille_dots_2458 0x100289a
+#define GDK_braille_dots_12458 0x100289b
+#define GDK_braille_dots_3458 0x100289c
+#define GDK_braille_dots_13458 0x100289d
+#define GDK_braille_dots_23458 0x100289e
+#define GDK_braille_dots_123458 0x100289f
+#define GDK_braille_dots_68 0x10028a0
+#define GDK_braille_dots_168 0x10028a1
+#define GDK_braille_dots_268 0x10028a2
+#define GDK_braille_dots_1268 0x10028a3
+#define GDK_braille_dots_368 0x10028a4
+#define GDK_braille_dots_1368 0x10028a5
+#define GDK_braille_dots_2368 0x10028a6
+#define GDK_braille_dots_12368 0x10028a7
+#define GDK_braille_dots_468 0x10028a8
+#define GDK_braille_dots_1468 0x10028a9
+#define GDK_braille_dots_2468 0x10028aa
+#define GDK_braille_dots_12468 0x10028ab
+#define GDK_braille_dots_3468 0x10028ac
+#define GDK_braille_dots_13468 0x10028ad
+#define GDK_braille_dots_23468 0x10028ae
+#define GDK_braille_dots_123468 0x10028af
+#define GDK_braille_dots_568 0x10028b0
+#define GDK_braille_dots_1568 0x10028b1
+#define GDK_braille_dots_2568 0x10028b2
+#define GDK_braille_dots_12568 0x10028b3
+#define GDK_braille_dots_3568 0x10028b4
+#define GDK_braille_dots_13568 0x10028b5
+#define GDK_braille_dots_23568 0x10028b6
+#define GDK_braille_dots_123568 0x10028b7
+#define GDK_braille_dots_4568 0x10028b8
+#define GDK_braille_dots_14568 0x10028b9
+#define GDK_braille_dots_24568 0x10028ba
+#define GDK_braille_dots_124568 0x10028bb
+#define GDK_braille_dots_34568 0x10028bc
+#define GDK_braille_dots_134568 0x10028bd
+#define GDK_braille_dots_234568 0x10028be
+#define GDK_braille_dots_1234568 0x10028bf
+#define GDK_braille_dots_78 0x10028c0
+#define GDK_braille_dots_178 0x10028c1
+#define GDK_braille_dots_278 0x10028c2
+#define GDK_braille_dots_1278 0x10028c3
+#define GDK_braille_dots_378 0x10028c4
+#define GDK_braille_dots_1378 0x10028c5
+#define GDK_braille_dots_2378 0x10028c6
+#define GDK_braille_dots_12378 0x10028c7
+#define GDK_braille_dots_478 0x10028c8
+#define GDK_braille_dots_1478 0x10028c9
+#define GDK_braille_dots_2478 0x10028ca
+#define GDK_braille_dots_12478 0x10028cb
+#define GDK_braille_dots_3478 0x10028cc
+#define GDK_braille_dots_13478 0x10028cd
+#define GDK_braille_dots_23478 0x10028ce
+#define GDK_braille_dots_123478 0x10028cf
+#define GDK_braille_dots_578 0x10028d0
+#define GDK_braille_dots_1578 0x10028d1
+#define GDK_braille_dots_2578 0x10028d2
+#define GDK_braille_dots_12578 0x10028d3
+#define GDK_braille_dots_3578 0x10028d4
+#define GDK_braille_dots_13578 0x10028d5
+#define GDK_braille_dots_23578 0x10028d6
+#define GDK_braille_dots_123578 0x10028d7
+#define GDK_braille_dots_4578 0x10028d8
+#define GDK_braille_dots_14578 0x10028d9
+#define GDK_braille_dots_24578 0x10028da
+#define GDK_braille_dots_124578 0x10028db
+#define GDK_braille_dots_34578 0x10028dc
+#define GDK_braille_dots_134578 0x10028dd
+#define GDK_braille_dots_234578 0x10028de
+#define GDK_braille_dots_1234578 0x10028df
+#define GDK_braille_dots_678 0x10028e0
+#define GDK_braille_dots_1678 0x10028e1
+#define GDK_braille_dots_2678 0x10028e2
+#define GDK_braille_dots_12678 0x10028e3
+#define GDK_braille_dots_3678 0x10028e4
+#define GDK_braille_dots_13678 0x10028e5
+#define GDK_braille_dots_23678 0x10028e6
+#define GDK_braille_dots_123678 0x10028e7
+#define GDK_braille_dots_4678 0x10028e8
+#define GDK_braille_dots_14678 0x10028e9
+#define GDK_braille_dots_24678 0x10028ea
+#define GDK_braille_dots_124678 0x10028eb
+#define GDK_braille_dots_34678 0x10028ec
+#define GDK_braille_dots_134678 0x10028ed
+#define GDK_braille_dots_234678 0x10028ee
+#define GDK_braille_dots_1234678 0x10028ef
+#define GDK_braille_dots_5678 0x10028f0
+#define GDK_braille_dots_15678 0x10028f1
+#define GDK_braille_dots_25678 0x10028f2
+#define GDK_braille_dots_125678 0x10028f3
+#define GDK_braille_dots_35678 0x10028f4
+#define GDK_braille_dots_135678 0x10028f5
+#define GDK_braille_dots_235678 0x10028f6
+#define GDK_braille_dots_1235678 0x10028f7
+#define GDK_braille_dots_45678 0x10028f8
+#define GDK_braille_dots_145678 0x10028f9
+#define GDK_braille_dots_245678 0x10028fa
+#define GDK_braille_dots_1245678 0x10028fb
+#define GDK_braille_dots_345678 0x10028fc
+#define GDK_braille_dots_1345678 0x10028fd
+#define GDK_braille_dots_2345678 0x10028fe
+#define GDK_braille_dots_12345678 0x10028ff
+#define GDK_ModeLock 0x1008ff01
+#define GDK_MonBrightnessUp 0x1008ff02
+#define GDK_MonBrightnessDown 0x1008ff03
+#define GDK_KbdLightOnOff 0x1008ff04
+#define GDK_KbdBrightnessUp 0x1008ff05
+#define GDK_KbdBrightnessDown 0x1008ff06
+#define GDK_Standby 0x1008ff10
+#define GDK_AudioLowerVolume 0x1008ff11
+#define GDK_AudioMute 0x1008ff12
+#define GDK_AudioRaiseVolume 0x1008ff13
+#define GDK_AudioPlay 0x1008ff14
+#define GDK_AudioStop 0x1008ff15
+#define GDK_AudioPrev 0x1008ff16
+#define GDK_AudioNext 0x1008ff17
+#define GDK_HomePage 0x1008ff18
+#define GDK_Mail 0x1008ff19
+#define GDK_Start 0x1008ff1a
+#define GDK_Search 0x1008ff1b
+#define GDK_AudioRecord 0x1008ff1c
+#define GDK_Calculator 0x1008ff1d
+#define GDK_Memo 0x1008ff1e
+#define GDK_ToDoList 0x1008ff1f
+#define GDK_Calendar 0x1008ff20
+#define GDK_PowerDown 0x1008ff21
+#define GDK_ContrastAdjust 0x1008ff22
+#define GDK_RockerUp 0x1008ff23
+#define GDK_RockerDown 0x1008ff24
+#define GDK_RockerEnter 0x1008ff25
+#define GDK_Back 0x1008ff26
+#define GDK_Forward 0x1008ff27
+#define GDK_Stop 0x1008ff28
+#define GDK_Refresh 0x1008ff29
+#define GDK_PowerOff 0x1008ff2a
+#define GDK_WakeUp 0x1008ff2b
+#define GDK_Eject 0x1008ff2c
+#define GDK_ScreenSaver 0x1008ff2d
+#define GDK_WWW 0x1008ff2e
+#define GDK_Sleep 0x1008ff2f
+#define GDK_Favorites 0x1008ff30
+#define GDK_AudioPause 0x1008ff31
+#define GDK_AudioMedia 0x1008ff32
+#define GDK_MyComputer 0x1008ff33
+#define GDK_VendorHome 0x1008ff34
+#define GDK_LightBulb 0x1008ff35
+#define GDK_Shop 0x1008ff36
+#define GDK_History 0x1008ff37
+#define GDK_OpenURL 0x1008ff38
+#define GDK_AddFavorite 0x1008ff39
+#define GDK_HotLinks 0x1008ff3a
+#define GDK_BrightnessAdjust 0x1008ff3b
+#define GDK_Finance 0x1008ff3c
+#define GDK_Community 0x1008ff3d
+#define GDK_AudioRewind 0x1008ff3e
+#define GDK_BackForward 0x1008ff3f
+#define GDK_Launch0 0x1008ff40
+#define GDK_Launch1 0x1008ff41
+#define GDK_Launch2 0x1008ff42
+#define GDK_Launch3 0x1008ff43
+#define GDK_Launch4 0x1008ff44
+#define GDK_Launch5 0x1008ff45
+#define GDK_Launch6 0x1008ff46
+#define GDK_Launch7 0x1008ff47
+#define GDK_Launch8 0x1008ff48
+#define GDK_Launch9 0x1008ff49
+#define GDK_LaunchA 0x1008ff4a
+#define GDK_LaunchB 0x1008ff4b
+#define GDK_LaunchC 0x1008ff4c
+#define GDK_LaunchD 0x1008ff4d
+#define GDK_LaunchE 0x1008ff4e
+#define GDK_LaunchF 0x1008ff4f
+#define GDK_ApplicationLeft 0x1008ff50
+#define GDK_ApplicationRight 0x1008ff51
+#define GDK_Book 0x1008ff52
+#define GDK_CD 0x1008ff53
+#define GDK_WindowClear 0x1008ff55
+#define GDK_Close 0x1008ff56
+#define GDK_Copy 0x1008ff57
+#define GDK_Cut 0x1008ff58
+#define GDK_Display 0x1008ff59
+#define GDK_DOS 0x1008ff5a
+#define GDK_Documents 0x1008ff5b
+#define GDK_Excel 0x1008ff5c
+#define GDK_Explorer 0x1008ff5d
+#define GDK_Game 0x1008ff5e
+#define GDK_Go 0x1008ff5f
+#define GDK_iTouch 0x1008ff60
+#define GDK_LogOff 0x1008ff61
+#define GDK_Market 0x1008ff62
+#define GDK_Meeting 0x1008ff63
+#define GDK_MenuKB 0x1008ff65
+#define GDK_MenuPB 0x1008ff66
+#define GDK_MySites 0x1008ff67
+#define GDK_New 0x1008ff68
+#define GDK_News 0x1008ff69
+#define GDK_OfficeHome 0x1008ff6a
+#define GDK_Open 0x1008ff6b
+#define GDK_Option 0x1008ff6c
+#define GDK_Paste 0x1008ff6d
+#define GDK_Phone 0x1008ff6e
+#define GDK_Reply 0x1008ff72
+#define GDK_Reload 0x1008ff73
+#define GDK_RotateWindows 0x1008ff74
+#define GDK_RotationPB 0x1008ff75
+#define GDK_RotationKB 0x1008ff76
+#define GDK_Save 0x1008ff77
+#define GDK_ScrollUp 0x1008ff78
+#define GDK_ScrollDown 0x1008ff79
+#define GDK_ScrollClick 0x1008ff7a
+#define GDK_Send 0x1008ff7b
+#define GDK_Spell 0x1008ff7c
+#define GDK_SplitScreen 0x1008ff7d
+#define GDK_Support 0x1008ff7e
+#define GDK_TaskPane 0x1008ff7f
+#define GDK_Terminal 0x1008ff80
+#define GDK_Tools 0x1008ff81
+#define GDK_Travel 0x1008ff82
+#define GDK_UserPB 0x1008ff84
+#define GDK_User1KB 0x1008ff85
+#define GDK_User2KB 0x1008ff86
+#define GDK_Video 0x1008ff87
+#define GDK_WheelButton 0x1008ff88
+#define GDK_Word 0x1008ff89
+#define GDK_Xfer 0x1008ff8a
+#define GDK_ZoomIn 0x1008ff8b
+#define GDK_ZoomOut 0x1008ff8c
+#define GDK_Away 0x1008ff8d
+#define GDK_Messenger 0x1008ff8e
+#define GDK_WebCam 0x1008ff8f
+#define GDK_MailForward 0x1008ff90
+#define GDK_Pictures 0x1008ff91
+#define GDK_Music 0x1008ff92
+#define GDK_Battery 0x1008ff93
+#define GDK_Bluetooth 0x1008ff94
+#define GDK_WLAN 0x1008ff95
+#define GDK_UWB 0x1008ff96
+#define GDK_AudioForward 0x1008ff97
+#define GDK_AudioRepeat 0x1008ff98
+#define GDK_AudioRandomPlay 0x1008ff99
+#define GDK_Subtitle 0x1008ff9a
+#define GDK_AudioCycleTrack 0x1008ff9b
+#define GDK_CycleAngle 0x1008ff9c
+#define GDK_FrameBack 0x1008ff9d
+#define GDK_FrameForward 0x1008ff9e
+#define GDK_Time 0x1008ff9f
+#define GDK_SelectButton 0x1008ffa0
+#define GDK_View 0x1008ffa1
+#define GDK_TopMenu 0x1008ffa2
+#define GDK_Red 0x1008ffa3
+#define GDK_Green 0x1008ffa4
+#define GDK_Yellow 0x1008ffa5
+#define GDK_Blue 0x1008ffa6
+#define GDK_Suspend 0x1008ffa7
+#define GDK_Hibernate 0x1008ffa8
+#define GDK_TouchpadToggle 0x1008ffa9
+#define GDK_Switch_VT_1 0x1008fe01
+#define GDK_Switch_VT_2 0x1008fe02
+#define GDK_Switch_VT_3 0x1008fe03
+#define GDK_Switch_VT_4 0x1008fe04
+#define GDK_Switch_VT_5 0x1008fe05
+#define GDK_Switch_VT_6 0x1008fe06
+#define GDK_Switch_VT_7 0x1008fe07
+#define GDK_Switch_VT_8 0x1008fe08
+#define GDK_Switch_VT_9 0x1008fe09
+#define GDK_Switch_VT_10 0x1008fe0a
+#define GDK_Switch_VT_11 0x1008fe0b
+#define GDK_Switch_VT_12 0x1008fe0c
+#define GDK_Ungrab 0x1008fe20
+#define GDK_ClearGrab 0x1008fe21
+#define GDK_Next_VMode 0x1008fe22
+#define GDK_Prev_VMode 0x1008fe23
+
+#endif /* __GDK_KEYSYMS_COMPAT_H__ */
diff -up mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h.build-gtk2 mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h
--- mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h    2016-01-15 17:38:34.978272200 +0100
@@ -16,7 +16,12 @@
 #include "nsCRT.h" /* should be <limits.h>? */
 #include <gtk/gtk.h>
+#if (MOZ_WIDGET_GTK == 2)
+#include <gtk/gtkprinter.h>
+#include <gtk/gtkprintjob.h>
+#else
 #include <gtk/gtkunixprint.h>
+#endif
 #define NS_PORTRAIT  0
 #define NS_LANDSCAPE 1
diff -up mozilla-aurora/widget/gtk/nsFilePicker.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsFilePicker.cpp
--- mozilla-aurora/widget/gtk/nsFilePicker.cpp.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/nsFilePicker.cpp    2016-01-15 17:38:34.978272200 +0100
@@ -125,9 +125,11 @@ UpdateFilePreviewWidget(GtkFileChooser *
     return;
   }
+#if GTK_CHECK_VERSION(2,12,0)
   GdkPixbuf *preview_pixbuf_temp = preview_pixbuf;
   preview_pixbuf = gdk_pixbuf_apply_embedded_orientation(preview_pixbuf_temp);
   g_object_unref(preview_pixbuf_temp);
+#endif
   // This is the easiest way to do center alignment without worrying about containers
   // Minimum 3px padding each side (hence the 6) just to make things nice
diff -up mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp
--- mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp    2016-01-15 17:38:34.979272199 +0100
@@ -4,7 +4,13 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 #include <gtk/gtk.h>
+#if (MOZ_WIDGET_GTK == 2)
+#include <gtk/gtkprinter.h>
+#include <gtk/gtkprintjob.h>
+#include <gtk/gtkprintunixdialog.h>
+#else
 #include <gtk/gtkunixprint.h>
+#endif
 #include <stdlib.h>
 #include "mozilla/ArrayUtils.h"
diff -up mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h.build-gtk2 mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h
--- mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h    2016-01-15 17:38:34.979272199 +0100
@@ -11,7 +11,12 @@
 extern "C" {
 #include <gtk/gtk.h>
+#if (MOZ_WIDGET_GTK == 2)
+#include <gtk/gtkprinter.h>
+#include <gtk/gtkprintjob.h>
+#else
 #include <gtk/gtkunixprint.h>
+#endif
 }
 #define NS_PRINTSETTINGSGTK_IID \
diff -up mozilla-aurora/widget/gtk/nsWindow.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsWindow.cpp
--- mozilla-aurora/widget/gtk/nsWindow.cpp.build-gtk2    2015-12-16 16:47:23.000000000 +0100
+++ mozilla-aurora/widget/gtk/nsWindow.cpp    2016-01-15 17:38:34.980272198 +0100
@@ -4895,7 +4895,8 @@ FullscreenTransitionWindow::FullscreenTr
     bgColor.red = bgColor.green = bgColor.blue = 0;
     gtk_widget_modify_bg(mWindow, GTK_STATE_NORMAL, &bgColor);
-    gtk_window_set_opacity(gtkWin, 0.0);
+    // Opacity not supported in gtk 2.10
+    // gtk_window_set_opacity(gtkWin, 0.0);
     gtk_widget_show(mWindow);
 }
@@ -4935,7 +4936,8 @@ FullscreenTransitionData::TimeoutCallbac
     if (data->mStage == nsIWidget::eAfterFullscreenToggle) {
         opacity = 1.0 - opacity;
     }
-    gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity);
+    // Opacity not supported in gtk 2.10
+    // gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity);
     if (data->mStep != data->mTotalSteps) {
         return TRUE;
diff -up mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp
--- mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp.build-gtk2    2016-01-18 09:41:47.302300030 +0100
+++ mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp    2016-01-18 09:43:50.663288859 +0100
@@ -10,6 +10,11 @@
 #include "nsBidiKeyboard.h"
 #include <gtk/gtk.h>
+#if (MOZ_WIDGET_GTK == 2)
+typedef gboolean (*GdkKeymapHaveBidiLayoutsType)(GdkKeymap *keymap);
+static GdkKeymapHaveBidiLayoutsType GdkKeymapHaveBidiLayouts = nullptr;
+#endif
+
 NS_IMPL_ISUPPORTS(nsBidiKeyboard, nsIBidiKeyboard)
 nsBidiKeyboard::nsBidiKeyboard()
@@ -20,21 +25,32 @@ nsBidiKeyboard::nsBidiKeyboard()
 NS_IMETHODIMP
 nsBidiKeyboard::Reset()
 {
-    // NB: The default keymap can be null (e.g. in xpcshell). In that case,
-    // simply assume that we don't have bidi keyboards.
-    mHaveBidiKeyboards = false;
+#if (MOZ_WIDGET_GTK == 2)
+    PRLibrary *gtklib = nullptr;
+#if defined(MOZ_X11)
+    if (!GdkKeymapHaveBidiLayouts) {
+        GdkKeymapHaveBidiLayouts = (GdkKeymapHaveBidiLayoutsType)
+            PR_FindFunctionSymbolAndLibrary("gdk_keymap_have_bidi_layouts",
+                                            &gtklib);
+        if (gtklib)
+            PR_UnloadLibrary(gtklib);
+    }
+#endif
-    GdkDisplay *display = gdk_display_get_default();
-    if (!display)
-        return NS_OK;
-
-    GdkKeymap *keymap = gdk_keymap_get_for_display(display);
-    mHaveBidiKeyboards = keymap && gdk_keymap_have_bidi_layouts(keymap);
+    mHaveBidiKeyboards = false;
+    if (GdkKeymapHaveBidiLayouts)
+        mHaveBidiKeyboards = (*GdkKeymapHaveBidiLayouts)(nullptr);
+#else
+    mHaveBidiKeyboards = gdk_keymap_have_bidi_layouts(gdk_keymap_get_default());
+#endif
     return NS_OK;
 }
 nsBidiKeyboard::~nsBidiKeyboard()
 {
+#if (MOZ_WIDGET_GTK == 2)
+    GdkKeymapHaveBidiLayouts = nullptr;
+#endif
 }
 NS_IMETHODIMP
SOURCES/build-el5-nss.patch
New file
@@ -0,0 +1,12 @@
diff -up mozilla-aurora/config/external/nss/Makefile.in.build-el5-nss mozilla-aurora/config/external/nss/Makefile.in
--- mozilla-aurora/config/external/nss/Makefile.in.build-el5-nss    2016-01-26 10:25:01.770613169 +0100
+++ mozilla-aurora/config/external/nss/Makefile.in    2016-01-26 10:25:12.824599219 +0100
@@ -298,7 +298,7 @@ NSS_DIRS += \
 endif
 ifneq (,$(filter %--build-id,$(LDFLAGS)))
-DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id
+#DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id
 endif
 ifdef MOZ_FOLD_LIBS
SOURCES/build-el5-rapl.patch
New file
@@ -0,0 +1,12 @@
diff -up mozilla-aurora/tools/power/moz.build.rapl mozilla-aurora/tools/power/moz.build
--- mozilla-aurora/tools/power/moz.build.rapl    2016-01-18 10:55:59.461937398 +0100
+++ mozilla-aurora/tools/power/moz.build    2016-01-18 10:56:04.483935330 +0100
@@ -11,7 +11,7 @@ if CONFIG['OS_ARCH'] == 'Darwin' and CON
 if CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android' and \
    CONFIG['CPU_ARCH'] in ('x86', 'x86_64'):
-    do_rapl = True
+    do_rapl = False
 if do_rapl:
     SimplePrograms([
SOURCES/build-el5-rt-tgsigqueueinfo.patch
New file
@@ -0,0 +1,18 @@
diff -up mozilla-beta/xpcom/threads/ThreadStackHelper.cpp.rt-tgsigqueueinfo mozilla-beta/xpcom/threads/ThreadStackHelper.cpp
--- mozilla-beta/xpcom/threads/ThreadStackHelper.cpp.rt-tgsigqueueinfo    2015-04-16 23:45:29.000000000 +0200
+++ mozilla-beta/xpcom/threads/ThreadStackHelper.cpp    2015-04-22 09:10:25.291166226 +0200
@@ -240,10 +240,13 @@ ThreadStackHelper::GetStack(Stack& aStac
   uinfo.si_pid = getpid();
   uinfo.si_uid = getuid();
   uinfo.si_value.sival_ptr = this;
+#ifdef SYS_rt_tgsigqueueinfo
   if (::syscall(SYS_rt_tgsigqueueinfo, uinfo.si_pid,
-                mThreadID, sFillStackSignum, &uinfo)) {
+                mThreadID, sFillStackSignum, &uinfo))
     // rt_tgsigqueueinfo was added in Linux 2.6.31.
     // Could have failed because the syscall did not exist.
+#endif
+  {
     return;
   }
   MOZ_ALWAYS_TRUE(!::sem_wait(&mSem));
SOURCES/build-el5-sandbox.patch
New file
@@ -0,0 +1,46 @@
diff -up mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp.build-sandbox mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp
--- mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp.build-sandbox    2015-12-16 16:47:02.000000000 +0100
+++ mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp    2016-01-21 15:34:59.168878105 +0100
@@ -201,7 +201,7 @@ AllowAccess(int aReqFlags, int aPerms)
 // on this process.  These shouldn't be relevant to the child process
 // in any case due to the sandboxing restrictions on it.  (See also
 // the use of MSG_CMSG_CLOEXEC in SandboxBrokerCommon.cpp).
-static const int kRequiredOpenFlags = O_CLOEXEC | O_NOCTTY;
+static const int kRequiredOpenFlags = O_NOCTTY;
 // Linux originally assigned a flag bit to O_SYNC but implemented the
 // semantics standardized as O_DSYNC; later, that bit was renamed and
@@ -212,7 +212,7 @@ static const int kRequiredOpenFlags = O_
 static const int kAllowedOpenFlags =
   O_APPEND | O_ASYNC | O_DIRECT | O_DIRECTORY | O_EXCL | O_LARGEFILE
   | O_NOATIME | O_NOCTTY | O_NOFOLLOW | O_NONBLOCK | O_NDELAY | O_SYNC_NEW
-  | O_TRUNC | O_CLOEXEC | O_CREAT;
+  | O_TRUNC | O_CREAT;
 #undef O_SYNC_NEW
 static bool
@@ -358,6 +358,7 @@ SandboxBroker::ThreadMain(void)
           // new ones).
           openedFd = open(pathBuf, req.mFlags | kRequiredOpenFlags, 0600);
           if (openedFd >= 0) {
+            fcntl(openedFd, F_SETFD, fcntl(openedFd, F_GETFD, 0) | FD_CLOEXEC);
             resp.mError = 0;
           } else {
             resp.mError = errno;
diff -up mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp.build-sandbox mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp
--- mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp.build-sandbox    2016-01-21 15:48:55.807532739 +0100
+++ mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp    2016-01-21 15:49:26.163518779 +0100
@@ -149,9 +149,10 @@ SandboxBrokerClient::Open(const char* aP
   int maybeFd = DoCall(&req, aPath, nullptr, true);
   if (maybeFd >= 0) {
     // NSPR has opinions about file flags.  Fix O_CLOEXEC.
-    if ((aFlags & O_CLOEXEC) == 0) {
-      fcntl(maybeFd, F_SETFD, 0);
-    }
+    // O_CLOEXEC is not available in RHEL5
+    //if ((aFlags & O_CLOEXEC) == 0) {
+    //  fcntl(maybeFd, F_SETFD, 0);
+    //}
   }
   return maybeFd;
 }
SOURCES/build-el5-stdint.patch
New file
@@ -0,0 +1,47 @@
diff -up mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h.build-el5-stdint mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h
--- mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h.build-el5-stdint    2015-12-16 16:47:02.000000000 +0100
+++ mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h    2016-01-26 15:52:02.557401691 +0100
@@ -7,7 +7,32 @@
 #ifndef mozilla_LinuxCapabilities_h
 #define mozilla_LinuxCapabilities_h
+#define int64_t int64_t_linux
+#define uint64_t uint64_t_linux
+#define loff_t loff_t_linux
+#define dev_t dev_t_linux
+#define timer_t timer_t_linux
+#define u_int64_t u_int64_t_linux
+#define fd_set fd_set_linux
+#define blkcnt_t blkcnt_t_linux
+#define gid_t gid_t_linux
+#define mode_t mode_t_linux
+#define nlink_t nlink_t_linux
+#define uid_t uid_t_linux
 #include <linux/capability.h>
+#undef int64_t
+#undef uint64_t
+#undef loff_t
+#undef dev_t
+#undef timer_t
+#undef u_int64_t
+#undef fd_set
+#undef blkcnt_t
+#undef gid_t
+#undef mode_t
+#undef nlink_t
+#undef uid_t
+
 #include <stdint.h>
 #include "mozilla/Assertions.h"
diff -up mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp.build-el5-stdint mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp
--- mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp.build-el5-stdint    2016-01-25 20:56:57.937678560 +0100
+++ mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp    2016-01-25 20:58:25.574613828 +0100
@@ -13,6 +13,7 @@
 #include "mozilla/UniquePtr.h"
 #include "sandbox/linux/bpf_dsl/bpf_dsl.h"
+#include <asm-generic/ipc.h>
 // Older kernel headers (mostly Android, but also some older desktop
 // distributions) are missing some or all of these:
SOURCES/build-el5-xlib-header.patch
New file
@@ -0,0 +1,27 @@
diff -up mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc.xlib-swap mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc
--- mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc.xlib-swap    2016-01-15 12:50:55.900989372 +0100
+++ mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc    2016-01-15 12:51:40.592950518 +0100
@@ -10,8 +10,8 @@
 #include "webrtc/modules/desktop_capture/mouse_cursor_monitor.h"
-#include <X11/extensions/Xfixes.h>
 #include <X11/Xlib.h>
+#include <X11/extensions/Xfixes.h>
 #include <X11/Xutil.h>
 #include "webrtc/base/scoped_ptr.h"
diff -up mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc.xlib-swap mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc
--- mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc.xlib-swap    2016-01-15 12:50:48.652995674 +0100
+++ mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc    2016-01-15 12:51:34.005956245 +0100
@@ -13,9 +13,9 @@
 #include <string.h>
 #include <set>
+#include <X11/Xlib.h>
 #include <X11/extensions/Xdamage.h>
 #include <X11/extensions/Xfixes.h>
-#include <X11/Xlib.h>
 #include <X11/Xutil.h>
 #include "webrtc/base/scoped_ptr.h"
SOURCES/build-nspr-prbool.patch
File was deleted
SOURCES/build-nss.patch
New file
@@ -0,0 +1,21 @@
diff -up firefox-45.0.1esr/configure.in.nss firefox-45.0.1esr/configure.in
--- firefox-45.0.1esr/configure.in.nss    2016-04-06 10:20:01.000000000 +0200
+++ firefox-45.0.1esr/configure.in    2016-04-06 10:25:56.998285981 +0200
@@ -53,7 +53,7 @@ dnl ====================================
 MOZJPEG=62
 MOZPNG=10619
 NSPR_VERSION=4
-NSPR_MINVER=4.12
+NSPR_MINVER=4.11
 NSS_VERSION=3
 dnl Set the minimum version of toolkit libs used by mozilla
@@ -3451,7 +3451,7 @@ MOZ_ARG_WITH_BOOL(system-nss,
     _USE_SYSTEM_NSS=1 )
 if test -n "$_USE_SYSTEM_NSS"; then
-    AM_PATH_NSS(3.21.1, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
+    AM_PATH_NSS(3.21.0, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])])
 fi
 if test -n "$MOZ_NATIVE_NSS"; then
SOURCES/build-werror.patch
File was deleted
SOURCES/find-external-requires
old mode 100644 new mode 100755
SOURCES/firefox-install-dir.patch
File was renamed from SOURCES/thunderbird-install-dir.patch
@@ -1,6 +1,6 @@
diff -up comm-esr38/mozilla/config/baseconfig.mk.dir comm-esr38/mozilla/config/baseconfig.mk
--- comm-esr38/mozilla/config/baseconfig.mk.dir    2015-06-08 19:49:23.000000000 +0200
+++ comm-esr38/mozilla/config/baseconfig.mk    2015-06-16 14:45:16.048913473 +0200
diff -up mozilla-aurora/config/baseconfig.mk.orig mozilla-aurora/config/baseconfig.mk
--- mozilla-aurora/config/baseconfig.mk.orig    2014-05-06 13:17:17.000000000 +0200
+++ mozilla-aurora/config/baseconfig.mk    2014-05-27 17:13:05.215503107 +0200
@@ -4,7 +4,7 @@
 # whether a normal build is happening or whether the check is running.
 includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
SOURCES/firefox-nss-3.19.1.patch
File was deleted
SOURCES/firefox-ppc64le.patch
@@ -1,6 +1,6 @@
diff -up firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h.ppc64le firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h
--- firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h.ppc64le    2015-02-20 03:01:40.000000000 +0100
+++ firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h    2015-03-06 15:52:58.298050379 +0100
diff -up firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h.ppc64le firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h
--- firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h.ppc64le    2015-02-20 03:01:40.000000000 +0100
+++ firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h    2015-03-06 15:52:58.298050379 +0100
@@ -90,6 +90,13 @@
 #endif
 
SOURCES/lightning-bad-langs.patch
New file
@@ -0,0 +1,19 @@
diff -up thunderbird-45.0/calendar/locales/shipped-locales.bad-langs thunderbird-45.0/calendar/locales/shipped-locales
--- thunderbird-45.0/calendar/locales/shipped-locales.bad-langs    2016-04-07 23:14:23.000000000 +0200
+++ thunderbird-45.0/calendar/locales/shipped-locales    2016-04-14 13:14:16.853967318 +0200
@@ -15,7 +15,6 @@ fy-NL
 ga-IE
 gd
 hu
-id
 is
 it
 ja linux win32
@@ -24,7 +23,6 @@ lt
 nb-NO
 nl
 nn-NO
-pa-IN
 pl
 pt-PT
 ru
SOURCES/mklangsource.sh
@@ -22,13 +22,27 @@
    pushd $lang
    hg pull
    hg update $tag
    #hg update
    popd
  else
    hg clone -u $tag http://hg.mozilla.org/releases/l10n/mozilla-release/$lang
    #hg clone http://hg.mozilla.org/l10n-central/$lang
  fi
done
cd ..
# Need to merge by compare-locale tool
# More info here: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/compare-locales
# how to get compare-locales: sudo easy_install -U compare-locales
# Make copy to merge with
rm -rf l10n-merged
cp -R l10n l10n-merged
for lang in $(<$locales)
do
  compare-locales --merge l10n-merged/$lang $PWD/thunderbird-${tbver}/${branch}/calendar/locales/l10n.ini l10n $lang
done
# Tar up, minus the mercurial files
cd ..
rm -f l10n-${lver}.tar.bz2
tar cjf l10n-lightning-${tbver}.tar.bz2 --exclude='.hg*'  l10n
rm -f l10n-${lver}.tar.xz
tar caf l10n-lightning-${tbver}.tar.xz --exclude='.hg*'  l10n-merged
SOURCES/mozilla-1005535.patch
@@ -3,20 +3,16 @@
# User Steve Singer <steve@ssinger.info>
Bug 1005535 - Get skia GPU building on big endian.
diff --git a/configure.in b/configure.in
--- a/configure.in
+++ b/configure.in
@@ -8231,21 +8231,21 @@ dnl Skia
 dnl ========================================================
 if test "$MOZ_ENABLE_SKIA"; then
   AC_DEFINE(MOZ_ENABLE_SKIA)
   AC_DEFINE(USE_SKIA)
   if test "${MOZ_WIDGET_TOOLKIT}" = "android" -o x"$MOZ_WIDGET_TOOLKIT" = x"gonk"; then
diff -up mozilla-aurora/configure.in.mozbz-1005535 mozilla-aurora/configure.in
--- mozilla-aurora/configure.in.mozbz-1005535    2015-12-18 14:55:09.415983194 +0100
+++ mozilla-aurora/configure.in    2015-12-18 14:58:46.301911086 +0100
@@ -8279,12 +8279,12 @@ if test "$MOZ_ENABLE_SKIA"; then
     AC_DEFINE(SK_BUILD_FOR_ANDROID_NDK)
   fi
 
-  if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then
+#  if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then
     SKIA_INCLUDES="$SKIA_INCLUDES /gfx/skia/skia/include/gpu /gfx/skia/skia/include/utils"
     MOZ_ENABLE_SKIA_GPU=1
     AC_DEFINE(USE_SKIA_GPU)
     AC_SUBST(MOZ_ENABLE_SKIA_GPU)
@@ -24,85 +20,12 @@
+#  fi
 fi
 AC_SUBST(MOZ_ENABLE_SKIA)
 dnl ========================================================
 dnl disable xul
 dnl ========================================================
 MOZ_ARG_DISABLE_BOOL(xul,
 [  --disable-xul           Disable XUL],
diff --git a/gfx/skia/generate_mozbuild.py b/gfx/skia/generate_mozbuild.py
--- a/gfx/skia/generate_mozbuild.py
+++ b/gfx/skia/generate_mozbuild.py
@@ -236,17 +236,17 @@ def generate_separated_sources(platform_
         return True
     return False
   separated = {
     'common': {
       #'trunk/src/effects/gradients/SkGradientTileProc.cpp',
       'trunk/src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
-      'trunk/src/ports/SkDiscardableMemory_none.cpp',
+      #'trunk/src/ports/SkDiscardableMemory_none.cpp',
       'trunk/src/ports/SkImageDecoder_empty.cpp',
       'trunk/src/ports/SkMemory_mozalloc.cpp',
       # 'trunk/src/images/SkImages.cpp',
       # 'trunk/src/images/SkImageRef.cpp',
       # 'trunk/src/images/SkImageRef_GlobalPool.cpp',
       # 'trunk/src/images/SkImageRefPool.cpp',
       # 'trunk/src/images/SkImageDecoder.cpp',
       # 'trunk/src/images/SkImageDecoder_Factory.cpp',
diff --git a/gfx/skia/moz.build b/gfx/skia/moz.build
--- a/gfx/skia/moz.build
+++ b/gfx/skia/moz.build
@@ -847,17 +847,16 @@ else:
         'trunk/src/opts/SkBitmapProcState_opts_none.cpp',
         'trunk/src/opts/SkBlitMask_opts_none.cpp',
         'trunk/src/opts/SkBlitRow_opts_none.cpp',
         'trunk/src/opts/SkBlurImage_opts_none.cpp',
         'trunk/src/opts/SkMorphology_opts_none.cpp',
         'trunk/src/opts/SkTextureCompression_opts_none.cpp',
         'trunk/src/opts/SkUtils_opts_none.cpp',
         'trunk/src/opts/SkXfermode_opts_none.cpp',
-        'trunk/src/ports/SkDiscardableMemory_none.cpp',
     ]
 # can we find a better way of dealing with asm sources?
 # left out of UNIFIED_SOURCES for now; that's not C++ anyway, nothing else to unify it with
 if not CONFIG['INTEL_ARCHITECTURE'] and CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_CC']:
     SOURCES += [
diff --git a/gfx/skia/trunk/include/config/SkUserConfig.h b/gfx/skia/trunk/include/config/SkUserConfig.h
--- a/gfx/skia/trunk/include/config/SkUserConfig.h
+++ b/gfx/skia/trunk/include/config/SkUserConfig.h
@@ -192,16 +192,17 @@
 #if defined(SK_CPU_ARM32) || defined(SK_CPU_ARM64)
 #  define SK_BARRIERS_PLATFORM_H "skia/SkBarriers_arm.h"
 #else
 #  define SK_BARRIERS_PLATFORM_H "skia/SkBarriers_x86.h"
 #endif
 // On all platforms we have this byte order
+
 #define SK_A32_SHIFT 24
 #define SK_R32_SHIFT 16
 #define SK_G32_SHIFT 8
 #define SK_B32_SHIFT 0
 #define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 0
 #define SK_SUPPORT_LEGACY_GETDEVICE
diff --git a/gfx/skia/trunk/include/core/SkColorPriv.h b/gfx/skia/trunk/include/core/SkColorPriv.h
--- a/gfx/skia/trunk/include/core/SkColorPriv.h
+++ b/gfx/skia/trunk/include/core/SkColorPriv.h
@@ -27,37 +27,27 @@
  *  For easier compatibility with Skia's GPU backend, we further restrict these
  *  to either (in memory-byte-order) RGBA or BGRA. Note that this "order" does
  *  not directly correspond to the same shift-order, since we have to take endianess
  *  into account.
  *
 AC_SUBST_LIST(SKIA_INCLUDES)
diff -up mozilla-aurora/gfx/skia/skia/include/config/SkUserConfig.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/config/SkUserConfig.h
diff -up mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h
--- mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h.mozbz-1005535    2015-12-16 16:47:08.000000000 +0100
+++ mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h    2015-12-18 14:55:09.416983194 +0100
@@ -32,17 +32,7 @@
  *  Here we enforce this constraint.
  */
 
@@ -120,9 +43,7 @@
     #define SK_RGBA_R32_SHIFT   0
     #define SK_RGBA_G32_SHIFT   8
     #define SK_RGBA_B32_SHIFT   16
     #define SK_RGBA_A32_SHIFT   24
     #define SK_BGRA_B32_SHIFT   0
@@ -52,7 +42,7 @@
     #define SK_BGRA_G32_SHIFT   8
     #define SK_BGRA_R32_SHIFT   16
     #define SK_BGRA_A32_SHIFT   24
@@ -131,20 +52,10 @@
 
 #if defined(SK_PMCOLOR_IS_RGBA) && defined(SK_PMCOLOR_IS_BGRA)
     #error "can't define PMCOLOR to be RGBA and BGRA"
 #endif
 #define LOCAL_PMCOLOR_SHIFTS_EQUIVALENT_TO_RGBA  \
     (SK_A32_SHIFT == SK_RGBA_A32_SHIFT &&    \
      SK_R32_SHIFT == SK_RGBA_R32_SHIFT &&    \
diff --git a/gfx/skia/trunk/include/core/SkImageInfo.h b/gfx/skia/trunk/include/core/SkImageInfo.h
--- a/gfx/skia/trunk/include/core/SkImageInfo.h
+++ b/gfx/skia/trunk/include/core/SkImageInfo.h
@@ -83,19 +83,20 @@ enum SkColorType {
     kLastEnum_SkColorType = kIndex_8_SkColorType,
 #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A)
     kN32_SkColorType = kBGRA_8888_SkColorType,
diff -up mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h
--- mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h.mozbz-1005535    2015-12-16 16:47:08.000000000 +0100
+++ mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h    2015-12-18 14:55:09.416983194 +0100
@@ -88,9 +88,10 @@ enum SkColorType {
 #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
     kN32_SkColorType = kRGBA_8888_SkColorType,
 #else
@@ -156,20 +67,10 @@
 #ifdef SK_SUPPORT_LEGACY_N32_NAME
     kPMColor_SkColorType = kN32_SkColorType
 #endif
 };
 static int SkColorTypeBytesPerPixel(SkColorType ct) {
     static const uint8_t gSize[] = {
         0,  // Unknown
diff --git a/gfx/skia/trunk/include/gpu/GrTypes.h b/gfx/skia/trunk/include/gpu/GrTypes.h
--- a/gfx/skia/trunk/include/gpu/GrTypes.h
+++ b/gfx/skia/trunk/include/gpu/GrTypes.h
@@ -304,25 +304,23 @@ enum GrPixelConfig {
      * Byte order is r, g, b, a.  This color format is 32 bits per channel
      */
     kRGBA_float_GrPixelConfig,
     kLast_GrPixelConfig = kRGBA_float_GrPixelConfig
 };
diff -up mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h
--- mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h.mozbz-1005535    2015-12-16 16:47:08.000000000 +0100
+++ mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h    2015-12-18 14:55:09.416983194 +0100
@@ -309,15 +309,13 @@ enum GrPixelConfig {
 static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1;
 
 // Aliases for pixel configs that match skia's byte order.
@@ -187,8 +88,3 @@
 #endif
 
 // Returns true if the pixel config is a GPU-specific compressed format
 // representation.
 static inline bool GrPixelConfigIsCompressed(GrPixelConfig config) {
     switch (config) {
         case kETC1_GrPixelConfig:
         case kLATC_GrPixelConfig:
SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch
New file
@@ -0,0 +1,1150 @@
diff -up thunderbird-45.0/mozilla/b2g/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/b2g/installer/package-manifest.in
--- thunderbird-45.0/mozilla/b2g/installer/package-manifest.in.moz-1134537-gnomevfsservice    2016-04-07 23:33:14.000000000 +0200
+++ thunderbird-45.0/mozilla/b2g/installer/package-manifest.in    2016-05-09 13:19:52.317048303 +0200
@@ -912,6 +912,12 @@ bin/libfreebl_32int64_3.so
 @RESPATH@/crashreporter-override.ini
 #endif
+; [Extensions]
+;
+#ifdef MOZ_ENABLE_GNOMEVFS
+bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
+#endif
+
 [b2g]
 #ifndef MOZ_WIDGET_GONK
 #ifdef XP_WIN32
diff -up thunderbird-45.0/mozilla/browser/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/browser/installer/package-manifest.in
--- thunderbird-45.0/mozilla/browser/installer/package-manifest.in.moz-1134537-gnomevfsservice    2016-05-09 13:19:52.318048303 +0200
+++ thunderbird-45.0/mozilla/browser/installer/package-manifest.in    2016-05-09 13:24:23.525852797 +0200
@@ -495,6 +495,9 @@
 #ifdef XP_MACOSX
 @RESPATH@/browser/components/SafariProfileMigrator.js
 #endif
+#ifdef MOZ_ENABLE_GNOMEVFS
+@RESPATH@/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
+#endif
 @RESPATH@/components/nsINIProcessor.manifest
 @RESPATH@/components/nsINIProcessor.js
 @RESPATH@/components/nsPrompter.manifest
diff -up thunderbird-45.0/mozilla/config/system-headers.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/config/system-headers
--- thunderbird-45.0/mozilla/config/system-headers.moz-1134537-gnomevfsservice    2016-05-09 13:19:52.298048317 +0200
+++ thunderbird-45.0/mozilla/config/system-headers    2016-05-09 13:19:52.318048303 +0200
@@ -630,6 +630,14 @@ libgnome/libgnome.h
 libgnomeui/gnome-icon-lookup.h
 libgnomeui/gnome-icon-theme.h
 libgnomeui/gnome-ui-init.h
+libgnomevfs/gnome-vfs-file-info.h
+libgnomevfs/gnome-vfs.h
+libgnomevfs/gnome-vfs-init.h
+libgnomevfs/gnome-vfs-mime.h
+libgnomevfs/gnome-vfs-mime-handlers.h
+libgnomevfs/gnome-vfs-mime-utils.h
+libgnomevfs/gnome-vfs-ops.h
+libgnomevfs/gnome-vfs-standard-callbacks.h
 lib$routines.h
 limits
 limits.h
diff -up thunderbird-45.0/mozilla/configure.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/configure.in
--- thunderbird-45.0/mozilla/configure.in.moz-1134537-gnomevfsservice    2016-05-09 13:19:52.299048316 +0200
+++ thunderbird-45.0/mozilla/configure.in    2016-05-09 13:21:31.457976836 +0200
@@ -71,6 +71,7 @@ GTK3_VERSION=3.4.0
 GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4
 WINDRES_VERSION=2.14.90
 W32API_VERSION=3.14
+GNOMEVFS_VERSION=2.0
 GNOMEUI_VERSION=2.2.0
 GCONF_VERSION=1.2.1
 STARTUP_NOTIFICATION_VERSION=0.8
@@ -4632,7 +4633,7 @@ then
 fi
 dnl ========================================================
-dnl = GIO and GConf support module
+dnl = GnomeVFS, GIO and GConf support module
 dnl ========================================================
 if test "$MOZ_X11"
@@ -4646,6 +4647,31 @@ then
     fi
     dnl ========================================================
+    dnl = GnomeVFS support module
+    dnl ========================================================
+    MOZ_ARG_ENABLE_BOOL(gnomevfs,
+    [  --enable-gnomevfs       Enable GnomeVFS support (default: disabled)],
+        MOZ_ENABLE_GNOMEVFS=force,
+        MOZ_ENABLE_GNOMEVFS=)
+
+    if test "$MOZ_ENABLE_GNOMEVFS"
+    then
+        PKG_CHECK_MODULES(MOZ_GNOMEVFS, gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION,[
+            MOZ_GNOMEVFS_LIBS=`echo $MOZ_GNOMEVFS_LIBS | sed 's/-llinc\>//'`
+            MOZ_ENABLE_GNOMEVFS=1
+            AC_DEFINE(MOZ_ENABLE_GNOMEVFS)
+        ],[
+            if test "$MOZ_ENABLE_GNOMEVFS" = "force"
+            then
+                AC_MSG_ERROR([* * * Could not find gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION])
+            fi
+            MOZ_ENABLE_GNOMEVFS=
+        ])
+    fi
+
+    AC_SUBST(MOZ_ENABLE_GNOMEVFS)
+
+    dnl ========================================================
     dnl = GIO support module
     dnl ========================================================
     MOZ_ARG_DISABLE_BOOL(gio,
@@ -6297,6 +6323,19 @@ MOZ_ARG_ENABLE_STRING(extensions,
 done],
     MOZ_EXTENSIONS="$MOZ_EXTENSIONS_DEFAULT")
+if test -z "$MOZ_ENABLE_GNOMEVFS" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
+    # Suppress warning on non-X11 platforms
+    if test -n "$MOZ_X11"; then
+        AC_MSG_WARN([Removing gnomevfs from MOZ_EXTENSIONS due to no --enable-gnomevfs.])
+    fi
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
+fi
+
+dnl Do not build gnomevfs with libxul based apps
+if test -n "$LIBXUL_SDK_DIR" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then
+    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'`
+fi
+
 if test -z "$MOZ_ENABLE_GIO" -a `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then
     # Suppress warning on non-X11 platforms
     if test -n "$MOZ_X11"; then
diff -up thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build
--- thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build.moz-1134537-gnomevfsservice    2016-05-09 13:19:52.321048300 +0200
+++ thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build    2016-05-09 13:19:52.321048300 +0200
@@ -0,0 +1,19 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+SOURCES += [
+    'nsGnomeVFSProtocolHandler.cpp',
+]
+
+XPCOMBinaryComponent('nkgnomevfs')
+
+# make sure this component is never statically linked into the main
+# application.  this is necessary since we don't want to force users
+# to install gnome-vfs2 in order to use the rest of mozilla ;-)
+
+CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS']
+
+OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS']
diff -up thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp
--- thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp.moz-1134537-gnomevfsservice    2016-05-09 13:19:52.322048300 +0200
+++ thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp    2016-05-09 13:19:52.322048300 +0200
@@ -0,0 +1,988 @@
+/* vim:set ts=2 sw=2 et cindent: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// GnomeVFS v2.2.2 is missing G_BEGIN_DECLS in gnome-vfs-module-callback.h
+extern "C" {
+#include <libgnomevfs/gnome-vfs.h>
+#include <libgnomevfs/gnome-vfs-standard-callbacks.h>
+#include <libgnomevfs/gnome-vfs-mime-utils.h>
+}
+
+#include <algorithm>
+
+#include "nsServiceManagerUtils.h"
+#include "nsComponentManagerUtils.h"
+#include "mozilla/ModuleUtils.h"
+#include "nsIInterfaceRequestorUtils.h"
+#include "nsIPrefService.h"
+#include "nsIPrefBranch.h"
+#include "nsIObserver.h"
+#include "nsThreadUtils.h"
+#include "nsProxyRelease.h"
+#include "nsIAuthPrompt.h"
+#include "nsIStringBundle.h"
+#include "nsIStandardURL.h"
+#include "nsIURL.h"
+#include "nsMimeTypes.h"
+#include "nsNetUtil.h"
+#include "nsINetUtil.h"
+#include "nsAutoPtr.h"
+#include "nsError.h"
+#include "prlog.h"
+#include "prtime.h"
+#include "prprf.h"
+#include "plstr.h"
+#include "mozilla/Attributes.h"
+
+#define MOZ_GNOMEVFS_SCHEME              "moz-gnomevfs"
+#define MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS "network.gnomevfs.supported-protocols"
+
+//-----------------------------------------------------------------------------
+
+// NSPR_LOG_MODULES=gnomevfs:5
+#ifdef PR_LOGGING
+static PRLogModuleInfo *sGnomeVFSLog;
+#define LOG(args) PR_LOG(sGnomeVFSLog, PR_LOG_DEBUG, args)
+#else
+#define LOG(args)
+#endif
+
+//-----------------------------------------------------------------------------
+
+static nsresult
+MapGnomeVFSResult(GnomeVFSResult result)
+{
+  switch (result)
+  {
+    case GNOME_VFS_OK:                           return NS_OK;
+    case GNOME_VFS_ERROR_NOT_FOUND:              return NS_ERROR_FILE_NOT_FOUND;
+    case GNOME_VFS_ERROR_INTERNAL:               return NS_ERROR_UNEXPECTED;
+    case GNOME_VFS_ERROR_BAD_PARAMETERS:         return NS_ERROR_INVALID_ARG;
+    case GNOME_VFS_ERROR_NOT_SUPPORTED:          return NS_ERROR_NOT_AVAILABLE;
+    case GNOME_VFS_ERROR_CORRUPTED_DATA:         return NS_ERROR_FILE_CORRUPTED;
+    case GNOME_VFS_ERROR_TOO_BIG:                return NS_ERROR_FILE_TOO_BIG;
+    case GNOME_VFS_ERROR_NO_SPACE:               return NS_ERROR_FILE_NO_DEVICE_SPACE;
+    case GNOME_VFS_ERROR_READ_ONLY:
+    case GNOME_VFS_ERROR_READ_ONLY_FILE_SYSTEM:  return NS_ERROR_FILE_READ_ONLY;
+    case GNOME_VFS_ERROR_INVALID_URI:
+    case GNOME_VFS_ERROR_INVALID_HOST_NAME:      return NS_ERROR_MALFORMED_URI;
+    case GNOME_VFS_ERROR_ACCESS_DENIED:
+    case GNOME_VFS_ERROR_NOT_PERMITTED:
+    case GNOME_VFS_ERROR_LOGIN_FAILED:           return NS_ERROR_FILE_ACCESS_DENIED;
+    case GNOME_VFS_ERROR_EOF:                    return NS_BASE_STREAM_CLOSED;
+    case GNOME_VFS_ERROR_NOT_A_DIRECTORY:        return NS_ERROR_FILE_NOT_DIRECTORY;
+    case GNOME_VFS_ERROR_IN_PROGRESS:            return NS_ERROR_IN_PROGRESS;
+    case GNOME_VFS_ERROR_FILE_EXISTS:            return NS_ERROR_FILE_ALREADY_EXISTS;
+    case GNOME_VFS_ERROR_IS_DIRECTORY:           return NS_ERROR_FILE_IS_DIRECTORY;
+    case GNOME_VFS_ERROR_NO_MEMORY:              return NS_ERROR_OUT_OF_MEMORY;
+    case GNOME_VFS_ERROR_HOST_NOT_FOUND:
+    case GNOME_VFS_ERROR_HOST_HAS_NO_ADDRESS:    return NS_ERROR_UNKNOWN_HOST;
+    case GNOME_VFS_ERROR_CANCELLED:
+    case GNOME_VFS_ERROR_INTERRUPTED:            return NS_ERROR_ABORT;
+    case GNOME_VFS_ERROR_DIRECTORY_NOT_EMPTY:    return NS_ERROR_FILE_DIR_NOT_EMPTY;
+    case GNOME_VFS_ERROR_NAME_TOO_LONG:          return NS_ERROR_FILE_NAME_TOO_LONG;
+    case GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE:  return NS_ERROR_UNKNOWN_PROTOCOL;
+
+    /* No special mapping for these error codes...
+
+    case GNOME_VFS_ERROR_GENERIC:
+    case GNOME_VFS_ERROR_IO:
+    case GNOME_VFS_ERROR_WRONG_FORMAT:
+    case GNOME_VFS_ERROR_BAD_FILE:
+    case GNOME_VFS_ERROR_NOT_OPEN:
+    case GNOME_VFS_ERROR_INVALID_OPEN_MODE:
+    case GNOME_VFS_ERROR_TOO_MANY_OPEN_FILES:
+    case GNOME_VFS_ERROR_LOOP:
+    case GNOME_VFS_ERROR_DIRECTORY_BUSY:
+    case GNOME_VFS_ERROR_TOO_MANY_LINKS:
+    case GNOME_VFS_ERROR_NOT_SAME_FILE_SYSTEM:
+    case GNOME_VFS_ERROR_SERVICE_OBSOLETE:
+    case GNOME_VFS_ERROR_PROTOCOL_ERROR:
+    case GNOME_VFS_ERROR_NO_MASTER_BROWSER:
+
+    */
+
+    // Make GCC happy
+    default:
+      return NS_ERROR_FAILURE;
+  }
+
+  return NS_ERROR_FAILURE;
+}
+
+//-----------------------------------------------------------------------------
+
+static void
+ProxiedAuthCallback(gconstpointer in,
+                    gsize         in_size,
+                    gpointer      out,
+                    gsize         out_size,
+                    gpointer      callback_data)
+{
+  GnomeVFSModuleCallbackAuthenticationIn *authIn =
+      (GnomeVFSModuleCallbackAuthenticationIn *) in;
+  GnomeVFSModuleCallbackAuthenticationOut *authOut =
+      (GnomeVFSModuleCallbackAuthenticationOut *) out;
+
+  LOG(("gnomevfs: ProxiedAuthCallback [uri=%s]\n", authIn->uri));
+
+  // Without a channel, we have no way of getting a prompter.
+  nsIChannel *channel = (nsIChannel *) callback_data;
+  if (!channel)
+    return;
+
+  nsCOMPtr<nsIAuthPrompt> prompt;
+  NS_QueryNotificationCallbacks(channel, prompt);
+
+  // If no auth prompt, then give up.  We could failover to using the
+  // WindowWatcher service, but that might defeat a consumer's purposeful
+  // attempt to disable authentication (for whatever reason).
+  if (!prompt)
+    return;
+
+  // Parse out the host and port...
+  nsCOMPtr<nsIURI> uri;
+  channel->GetURI(getter_AddRefs(uri));
+  if (!uri)
+    return;
+
+#ifdef DEBUG
+  {
+    //
+    // Make sure authIn->uri is consistent with the channel's URI.
+    //
+    // XXX This check is probably not IDN safe, and it might incorrectly
+    //     fire as a result of escaping differences.  It's unclear what
+    //     kind of transforms GnomeVFS might have applied to the URI spec
+    //     that we originally gave to it.  In spite of the likelihood of
+    //     false hits, this check is probably still valuable.
+    //
+    nsAutoCString spec;
+    uri->GetSpec(spec);
+    int uriLen = strlen(authIn->uri);
+    if (!StringHead(spec, uriLen).Equals(nsDependentCString(authIn->uri, uriLen)))
+    {
+      LOG(("gnomevfs: [spec=%s authIn->uri=%s]\n", spec.get(), authIn->uri));
+      NS_ERROR("URI mismatch");
+    }
+  }
+#endif
+
+  nsAutoCString scheme, hostPort;
+  uri->GetScheme(scheme);
+  uri->GetHostPort(hostPort);
+
+  // It doesn't make sense for either of these strings to be empty.  What kind
+  // of funky URI is this?
+  if (scheme.IsEmpty() || hostPort.IsEmpty())
+    return;
+
+  // Construct the single signon key.  Altering the value of this key will
+  // cause people's remembered passwords to be forgotten.  Think carefully
+  // before changing the way this key is constructed.
+  nsAutoString key, realm;
+
+  NS_ConvertUTF8toUTF16 dispHost(scheme);
+  dispHost.AppendLiteral("://");
+  dispHost.Append(NS_ConvertUTF8toUTF16(hostPort));
+
+  key = dispHost;
+  if (authIn->realm)
+  {
+    // We assume the realm string is ASCII.  That might be a bogus assumption,
+    // but we have no idea what encoding GnomeVFS is using, so for now we'll
+    // limit ourselves to ISO-Latin-1.  XXX What is a better solution?
+    realm.Append('"');
+    realm.Append(NS_ConvertASCIItoUTF16(authIn->realm));
+    realm.Append('"');
+    key.Append(' ');
+    key.Append(realm);
+  }
+
+  // Construct the message string...
+  //
+  // We use Necko's string bundle here.  This code really should be encapsulated
+  // behind some Necko API, after all this code is based closely on the code in
+  // nsHttpChannel.cpp.
+
+  nsCOMPtr<nsIStringBundleService> bundleSvc =
+      do_GetService(NS_STRINGBUNDLE_CONTRACTID);
+  if (!bundleSvc)
+    return;
+
+  nsCOMPtr<nsIStringBundle> bundle;
+  bundleSvc->CreateBundle("chrome://global/locale/commonDialogs.properties",
+                          getter_AddRefs(bundle));
+  if (!bundle)
+    return;
+
+  nsString message;
+  if (!realm.IsEmpty())
+  {
+    const char16_t *strings[] = { realm.get(), dispHost.get() };
+    bundle->FormatStringFromName(MOZ_UTF16("EnterUserPasswordForRealm"),
+                                 strings, 2, getter_Copies(message));
+  }
+  else
+  {
+    const char16_t *strings[] = { dispHost.get() };
+    bundle->FormatStringFromName(MOZ_UTF16("EnterUserPasswordFor"),
+                                 strings, 1, getter_Copies(message));
+  }
+  if (message.IsEmpty())
+    return;
+
+  // Prompt the user...
+  nsresult rv;
+  bool retval = false;
+  char16_t *user = nullptr, *pass = nullptr;
+
+  rv = prompt->PromptUsernameAndPassword(nullptr, message.get(),
+                                         key.get(),
+                                         nsIAuthPrompt::SAVE_PASSWORD_PERMANENTLY,
+                                         &user, &pass, &retval);
+  if (NS_FAILED(rv))
+    return;
+  if (!retval || !user || !pass)
+    return;
+
+  // XXX We need to convert the UTF-16 username and password from our dialog to
+  // strings that GnomeVFS can understand.  It's unclear what encoding GnomeVFS
+  // expects, so for now we assume 7-bit ASCII.  Hopefully, we can get a better
+  // solution at some point.
+
+  // One copy is never enough...
+  authOut->username = g_strdup(NS_LossyConvertUTF16toASCII(user).get());
+  authOut->password = g_strdup(NS_LossyConvertUTF16toASCII(pass).get());
+
+  nsMemory::Free(user);
+  nsMemory::Free(pass);
+}
+
+struct nsGnomeVFSAuthCallbackEvent : public nsRunnable
+{
+  gconstpointer in;
+  gsize         in_size;
+  gpointer      out;
+  gsize         out_size;
+  gpointer      callback_data;
+
+  NS_IMETHOD Run() {
+    ProxiedAuthCallback(in, in_size, out, out_size, callback_data);
+    return NS_OK;
+  }
+};
+
+static void
+AuthCallback(gconstpointer in,
+             gsize         in_size,
+             gpointer      out,
+             gsize         out_size,
+             gpointer      callback_data)
+{
+  // Need to proxy this callback over to the main thread.  Synchronous dispatch
+  // is required in order to provide data to the GnomeVFS callback.
+
+  nsRefPtr<nsGnomeVFSAuthCallbackEvent> ev = new nsGnomeVFSAuthCallbackEvent();
+  if (!ev)
+    return;  // OOM
+
+  ev->in = in;
+  ev->in_size = in_size;
+  ev->out = out;
+  ev->out_size = out_size;
+  ev->callback_data = callback_data;
+
+  NS_DispatchToMainThread(ev, NS_DISPATCH_SYNC);
+}
+
+//-----------------------------------------------------------------------------
+
+static gint
+FileInfoComparator(gconstpointer a, gconstpointer b)
+{
+  const GnomeVFSFileInfo *ia = (const GnomeVFSFileInfo *) a;
+  const GnomeVFSFileInfo *ib = (const GnomeVFSFileInfo *) b;
+
+  return strcasecmp(ia->name, ib->name);
+}
+
+//-----------------------------------------------------------------------------
+
+class nsGnomeVFSInputStream : public nsIInputStream
+{
+  public:
+    NS_DECL_THREADSAFE_ISUPPORTS
+    NS_DECL_NSIINPUTSTREAM
+
+    nsGnomeVFSInputStream(const nsCString &uriSpec)
+      : mSpec(uriSpec)
+      , mChannel(nullptr)
+      , mHandle(nullptr)
+      , mBytesRemaining(UINT64_MAX)
+      , mStatus(NS_OK)
+      , mDirList(nullptr)
+      , mDirListPtr(nullptr)
+      , mDirBufCursor(0)
+      , mDirOpen(false) {}
+
+   ~nsGnomeVFSInputStream() { Close(); }
+
+    void SetChannel(nsIChannel *channel)
+    {
+      // We need to hold an owning reference to our channel.  This is done
+      // so we can access the channel's notification callbacks to acquire
+      // a reference to a nsIAuthPrompt if we need to handle a GnomeVFS
+      // authentication callback.
+      //
+      // However, the channel can only be accessed on the main thread, so
+      // we have to be very careful with ownership.  Moreover, it doesn't
+      // support threadsafe addref/release, so proxying is the answer.
+      //
+      // Also, it's important to note that this likely creates a reference
+      // cycle since the channel likely owns this stream.  This reference
+      // cycle is broken in our Close method.
+
+      NS_ADDREF(mChannel = channel);
+    }
+
+  private:
+    GnomeVFSResult DoOpen();
+    GnomeVFSResult DoRead(char *aBuf, uint32_t aCount, uint32_t *aCountRead);
+    nsresult       SetContentTypeOfChannel(const char *contentType);
+
+  private:
+    nsCString                mSpec;
+    nsIChannel              *mChannel; // manually refcounted
+    GnomeVFSHandle          *mHandle;
+    uint64_t                 mBytesRemaining;
+    nsresult                 mStatus;
+    GList                   *mDirList;
+    GList                   *mDirListPtr;
+    nsCString                mDirBuf;
+    uint32_t                 mDirBufCursor;
+    bool                     mDirOpen;
+};
+
+GnomeVFSResult
+nsGnomeVFSInputStream::DoOpen()
+{
+  GnomeVFSResult rv;
+
+  NS_ASSERTION(mHandle == nullptr, "already open");
+
+  // Push a callback handler on the stack for this thread, so we can intercept
+  // authentication requests from GnomeVFS.  We'll use the channel to get a
+  // nsIAuthPrompt instance.
+
+  gnome_vfs_module_callback_push(GNOME_VFS_MODULE_CALLBACK_AUTHENTICATION,
+                                 AuthCallback, mChannel, nullptr);
+
+  // Query the mime type first (this could return nullptr).
+  //
+  // XXX We need to do this up-front in order to determine how to open the URI.
+  //     Unfortunately, the error code GNOME_VFS_ERROR_IS_DIRECTORY is not
+  //     always returned by gnome_vfs_open when we pass it a URI to a directory!
+  //     Otherwise, we could have used that as a way to failover to opening the
+  //     URI as a directory.  Also, it would have been ideal if
+  //     gnome_vfs_get_file_info_from_handle were actually implemented by the
+  //     smb:// module, since that would have allowed us to potentially save a
+  //     round trip to the server to discover the mime type of the document in
+  //     the case where gnome_vfs_open would have been used.  (Oh well!  /me
+  //     throws hands up in the air and moves on...)
+
+  GnomeVFSFileInfo info = {0};
+  rv = gnome_vfs_get_file_info(mSpec.get(), &info, GnomeVFSFileInfoOptions(
+                               GNOME_VFS_FILE_INFO_DEFAULT |
+                               GNOME_VFS_FILE_INFO_FOLLOW_LINKS));
+  if (rv == GNOME_VFS_OK)
+  {
+    if (info.type == GNOME_VFS_FILE_TYPE_DIRECTORY)
+    {
+      rv = gnome_vfs_directory_list_load(&mDirList, mSpec.get(),
+                                         GNOME_VFS_FILE_INFO_DEFAULT);
+
+      LOG(("gnomevfs: gnome_vfs_directory_list_load returned %d (%s) [spec=\"%s\"]\n",
+          rv, gnome_vfs_result_to_string(rv), mSpec.get()));
+    }
+    else
+    {
+      rv = gnome_vfs_open(&mHandle, mSpec.get(), GNOME_VFS_OPEN_READ);
+
+      LOG(("gnomevfs: gnome_vfs_open returned %d (%s) [spec=\"%s\"]\n",
+          rv, gnome_vfs_result_to_string(rv), mSpec.get()));
+    }
+  }
+
+  gnome_vfs_module_callback_pop(GNOME_VFS_MODULE_CALLBACK_AUTHENTICATION);
+
+  if (rv == GNOME_VFS_OK)
+  {
+    if (mHandle)
+    {
+      // Here we set the content type of the channel to the value of the mime
+      // type determined by GnomeVFS.  However, if GnomeVFS is telling us that
+      // the document is binary, we'll ignore that and keep the channel's
+      // content type unspecified.  That will enable our content type sniffing
+      // algorithms.  This should provide more consistent mime type handling.
+
+      if (info.mime_type && (strcmp(info.mime_type, APPLICATION_OCTET_STREAM) != 0))
+        SetContentTypeOfChannel(info.mime_type);
+
+      mBytesRemaining = info.size;
+
+      // Update the content length attribute on the channel.  We do this
+      // synchronously without proxying.  This hack is not as bad as it looks!
+      if (mBytesRemaining > INT64_MAX) {
+        mChannel->SetContentLength(-1);
+      } else {
+        mChannel->SetContentLength(mBytesRemaining);
+      }
+    }
+    else
+    {
+      mDirOpen = true;
+
+      // Sort mDirList
+      mDirList = g_list_sort(mDirList, FileInfoComparator);
+      mDirListPtr = mDirList;
+
+      // Write base URL (make sure it ends with a '/')
+      mDirBuf.AppendLiteral("300: ");
+      mDirBuf.Append(mSpec);
+      if (mSpec.get()[mSpec.Length() - 1] != '/')
+        mDirBuf.Append('/');
+      mDirBuf.Append('\n');
+
+      // Write column names
+      mDirBuf.AppendLiteral("200: filename content-length last-modified file-type\n");
+
+      // Write charset (assume UTF-8)
+      // XXX is this correct?
+      mDirBuf.AppendLiteral("301: UTF-8\n");
+
+      SetContentTypeOfChannel(APPLICATION_HTTP_INDEX_FORMAT);
+    }
+  }
+
+  gnome_vfs_file_info_clear(&info);
+  return rv;
+}
+
+GnomeVFSResult
+nsGnomeVFSInputStream::DoRead(char *aBuf, uint32_t aCount, uint32_t *aCountRead)
+{
+  GnomeVFSResult rv;
+
+  if (mHandle)
+  {
+    GnomeVFSFileSize bytesRead;
+    rv = gnome_vfs_read(mHandle, aBuf, aCount, &bytesRead);
+    if (rv == GNOME_VFS_OK)
+    {
+      // aCount is 32-bit, so aCountRead is under 32-bit value.
+      *aCountRead = (uint32_t) bytesRead;
+      mBytesRemaining -= *aCountRead;
+    }
+  }
+  else if (mDirOpen)
+  {
+    rv = GNOME_VFS_OK;
+
+    while (aCount && rv != GNOME_VFS_ERROR_EOF)
+    {
+      // Copy data out of our buffer
+      uint32_t bufLen = mDirBuf.Length() - mDirBufCursor;
+      if (bufLen)
+      {
+        uint32_t n = std::min(bufLen, aCount);
+        memcpy(aBuf, mDirBuf.get() + mDirBufCursor, n);
+        *aCountRead += n;
+        aBuf += n;
+        aCount -= n;
+        mDirBufCursor += n;
+      }
+
+      if (!mDirListPtr)    // Are we at the end of the directory list?
+      {
+        rv = GNOME_VFS_ERROR_EOF;
+      }
+      else if (aCount)     // Do we need more data?
+      {
+        GnomeVFSFileInfo *info = (GnomeVFSFileInfo *) mDirListPtr->data;
+
+        // Prune '.' and '..' from directory listing.
+        if (info->name[0] == '.' &&
+               (info->name[1] == '\0' ||
+                   (info->name[1] == '.' && info->name[2] == '\0')))
+        {
+          mDirListPtr = mDirListPtr->next;
+          continue;
+        }
+
+        mDirBuf.AssignLiteral("201: ");
+
+        // The "filename" field
+        nsCString escName;
+        nsCOMPtr<nsINetUtil> nu = do_GetService(NS_NETUTIL_CONTRACTID);
+        if (nu) {
+          nu->EscapeString(nsDependentCString(info->name),
+                           nsINetUtil::ESCAPE_URL_PATH, escName);
+
+          mDirBuf.Append(escName);
+          mDirBuf.Append(' ');
+        }
+
+        // The "content-length" field
+        // XXX truncates size from 64-bit to 32-bit
+        mDirBuf.AppendInt(int32_t(info->size));
+        mDirBuf.Append(' ');
+
+        // The "last-modified" field
+        //
+        // NSPR promises: PRTime is compatible with time_t
+        // we just need to convert from seconds to microseconds
+        PRExplodedTime tm;
+        PRTime pt = ((PRTime) info->mtime) * 1000000;
+        PR_ExplodeTime(pt, PR_GMTParameters, &tm);
+        {
+          char buf[64];
+          PR_FormatTimeUSEnglish(buf, sizeof(buf),
+              "%a,%%20%d%%20%b%%20%Y%%20%H:%M:%S%%20GMT ", &tm);
+          mDirBuf.Append(buf);
+        }
+
+        // The "file-type" field
+        switch (info->type)
+        {
+          case GNOME_VFS_FILE_TYPE_REGULAR:
+            mDirBuf.AppendLiteral("FILE ");
+            break;
+          case GNOME_VFS_FILE_TYPE_DIRECTORY:
+            mDirBuf.AppendLiteral("DIRECTORY ");
+            break;
+          case GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK:
+            mDirBuf.AppendLiteral("SYMBOLIC-LINK ");
+            break;
+          default:
+            break;
+        }
+
+        mDirBuf.Append('\n');
+
+        mDirBufCursor = 0;
+        mDirListPtr = mDirListPtr->next;
+      }
+    }
+  }
+  else
+  {
+    NS_NOTREACHED("reading from what?");
+    rv = GNOME_VFS_ERROR_GENERIC;
+  }
+
+  return rv;
+}
+
+// This class is used to implement SetContentTypeOfChannel.
+class nsGnomeVFSSetContentTypeEvent : public nsRunnable
+{
+  public:
+    nsGnomeVFSSetContentTypeEvent(nsIChannel *channel, const char *contentType)
+      : mChannel(channel), mContentType(contentType)
+    {
+      // stash channel reference in mChannel.  no AddRef here!  see note
+      // in SetContentTypeOfchannel.
+    }
+
+    NS_IMETHOD Run()
+    {
+      mChannel->SetContentType(mContentType);
+      return NS_OK;
+    }
+
+  private:
+    nsIChannel *mChannel;
+    nsCString   mContentType;
+};
+
+nsresult
+nsGnomeVFSInputStream::SetContentTypeOfChannel(const char *contentType)
+{
+  // We need to proxy this call over to the main thread.  We post an
+  // asynchronous event in this case so that we don't delay reading data, and
+  // we know that this is safe to do since the channel's reference will be
+  // released asynchronously as well.  We trust the ordering of the main
+  // thread's event queue to protect us against memory corruption.
+
+  nsresult rv;
+  nsCOMPtr<nsIRunnable> ev =
+      new nsGnomeVFSSetContentTypeEvent(mChannel, contentType);
+  if (!ev)
+  {
+    rv = NS_ERROR_OUT_OF_MEMORY;
+  }
+  else
+  {
+    rv = NS_DispatchToMainThread(ev);
+  }
+  return rv;
+}
+
+NS_IMPL_ISUPPORTS(nsGnomeVFSInputStream, nsIInputStream)
+
+NS_IMETHODIMP
+nsGnomeVFSInputStream::Close()
+{
+  if (mHandle)
+  {
+    gnome_vfs_close(mHandle);
+    mHandle = nullptr;
+  }
+
+  if (mDirList)
+  {
+    // Destroy the list of GnomeVFSFileInfo objects...
+    g_list_foreach(mDirList, (GFunc) gnome_vfs_file_info_unref, nullptr);
+    g_list_free(mDirList);
+    mDirList = nullptr;
+    mDirListPtr = nullptr;
+  }
+
+  if (mChannel)
+  {
+    nsresult rv = NS_OK;
+
+    nsCOMPtr<nsIThread> thread = do_GetMainThread();
+    if (thread)
+      rv = NS_ProxyRelease(thread, mChannel);
+
+    NS_ASSERTION(thread && NS_SUCCEEDED(rv), "leaking channel reference");
+    mChannel = nullptr;
+  }
+
+  mSpec.Truncate(); // free memory
+
+  // Prevent future reads from re-opening the handle.
+  if (NS_SUCCEEDED(mStatus))
+    mStatus = NS_BASE_STREAM_CLOSED;
+
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSInputStream::Available(uint64_t *aResult)
+{
+  if (NS_FAILED(mStatus))
+    return mStatus;
+
+  *aResult = mBytesRemaining;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSInputStream::Read(char *aBuf,
+                            uint32_t aCount,
+                            uint32_t *aCountRead)
+{
+  *aCountRead = 0;
+
+  if (mStatus == NS_BASE_STREAM_CLOSED)
+    return NS_OK;
+  if (NS_FAILED(mStatus))
+    return mStatus;
+
+  GnomeVFSResult rv = GNOME_VFS_OK;
+
+  // If this is our first-time through here, then open the URI.
+  if (!mHandle && !mDirOpen)
+    rv = DoOpen();
+
+  if (rv == GNOME_VFS_OK)
+    rv = DoRead(aBuf, aCount, aCountRead);
+
+  if (rv != GNOME_VFS_OK)
+  {
+    // If we reach here, we hit some kind of error.  EOF is not an error.
+    mStatus = MapGnomeVFSResult(rv);
+    if (mStatus == NS_BASE_STREAM_CLOSED)
+      return NS_OK;
+
+    LOG(("gnomevfs: result %d [%s] mapped to 0x%x\n",
+        rv, gnome_vfs_result_to_string(rv), mStatus));
+  }
+  return mStatus;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSInputStream::ReadSegments(nsWriteSegmentFun aWriter,
+                                    void *aClosure,
+                                    uint32_t aCount,
+                                    uint32_t *aResult)
+{
+  // There is no way to implement this using GnomeVFS, but fortunately
+  // that doesn't matter.  Because we are a blocking input stream, Necko
+  // isn't going to call our ReadSegments method.
+  NS_NOTREACHED("nsGnomeVFSInputStream::ReadSegments");
+  return NS_ERROR_NOT_IMPLEMENTED;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSInputStream::IsNonBlocking(bool *aResult)
+{
+  *aResult = false;
+  return NS_OK;
+}
+
+//-----------------------------------------------------------------------------
+
+class nsGnomeVFSProtocolHandler : public nsIProtocolHandler
+                                , public nsIObserver
+{
+  public:
+    NS_DECL_ISUPPORTS
+    NS_DECL_NSIPROTOCOLHANDLER
+    NS_DECL_NSIOBSERVER
+
+    nsresult Init();
+
+  private:
+    void   InitSupportedProtocolsPref(nsIPrefBranch *prefs);
+    bool IsSupportedProtocol(const nsCString &spec);
+
+    nsCString mSupportedProtocols;
+};
+
+NS_IMPL_ISUPPORTS(nsGnomeVFSProtocolHandler, nsIProtocolHandler, nsIObserver)
+
+nsresult
+nsGnomeVFSProtocolHandler::Init()
+{
+#ifdef PR_LOGGING
+  sGnomeVFSLog = PR_NewLogModule("gnomevfs");
+#endif
+
+  if (!gnome_vfs_initialized())
+  {
+    if (!gnome_vfs_init())
+    {
+      NS_WARNING("gnome_vfs_init failed");
+      return NS_ERROR_UNEXPECTED;
+    }
+  }
+
+  nsCOMPtr<nsIPrefBranch> prefs = do_GetService(NS_PREFSERVICE_CONTRACTID);
+  if (prefs)
+  {
+    InitSupportedProtocolsPref(prefs);
+    prefs->AddObserver(MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS, this, false);
+  }
+
+  return NS_OK;
+}
+
+void
+nsGnomeVFSProtocolHandler::InitSupportedProtocolsPref(nsIPrefBranch *prefs)
+{
+  // read preferences
+  nsresult rv = prefs->GetCharPref(MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS,
+                                   getter_Copies(mSupportedProtocols));
+  if (NS_SUCCEEDED(rv)) {
+    mSupportedProtocols.StripWhitespace();
+    ToLowerCase(mSupportedProtocols);
+  }
+  else
+    mSupportedProtocols.AssignLiteral("smb:,sftp:"); // use defaults
+
+  LOG(("gnomevfs: supported protocols \"%s\"\n", mSupportedProtocols.get()));
+}
+
+bool
+nsGnomeVFSProtocolHandler::IsSupportedProtocol(const nsCString &aSpec)
+{
+  const char *specString = aSpec.get();
+  const char *colon = strchr(specString, ':');
+  if (!colon)
+    return false;
+
+  uint32_t length = colon - specString + 1;
+
+  // <scheme> + ':'
+  nsCString scheme(specString, length);
+
+  char *found = PL_strcasestr(mSupportedProtocols.get(), scheme.get());
+  if (!found)
+    return false;
+
+  if (found[length] != ',' && found[length] != '\0')
+    return false;
+
+  return true;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::GetScheme(nsACString &aScheme)
+{
+  aScheme.Assign(MOZ_GNOMEVFS_SCHEME);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::GetDefaultPort(int32_t *aDefaultPort)
+{
+  *aDefaultPort = -1;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::GetProtocolFlags(uint32_t *aProtocolFlags)
+{
+  // Is URI_STD true of all GnomeVFS URI types?
+  *aProtocolFlags = URI_STD | URI_DANGEROUS_TO_LOAD;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::NewURI(const nsACString &aSpec,
+                                  const char *aOriginCharset,
+                                  nsIURI *aBaseURI,
+                                  nsIURI **aResult)
+{
+  const nsCString flatSpec(aSpec);
+  LOG(("gnomevfs: NewURI [spec=%s]\n", flatSpec.get()));
+
+  if (!aBaseURI)
+  {
+    //
+    // XXX This check is used to limit the gnome-vfs protocols we support.  For
+    //     security reasons, it is best that we limit the protocols we support to
+    //     those with known characteristics.  We might want to lessen this
+    //     restriction if it proves to be too heavy handed.  A black list of
+    //     protocols we don't want to support might be better.  For example, we
+    //     probably don't want to try to load "start-here:" inside the browser.
+    //     There are others that fall into this category, which are best handled
+    //     externally by Nautilus (or another app like it).
+    //
+    if (!IsSupportedProtocol(flatSpec))
+      return NS_ERROR_UNKNOWN_PROTOCOL;
+
+    // Verify that GnomeVFS supports this URI scheme.
+    GnomeVFSURI *uri = gnome_vfs_uri_new(flatSpec.get());
+    if (!uri)
+      return NS_ERROR_UNKNOWN_PROTOCOL;
+  }
+
+  //
+  // XXX Can we really assume that all gnome-vfs URIs can be parsed using
+  //     nsStandardURL?  We probably really need to implement nsIURI/nsIURL
+  //     in terms of the gnome_vfs_uri_XXX methods, but at least this works
+  //     correctly for smb:// URLs ;-)
+  //
+  //     Also, it might not be possible to fully implement nsIURI/nsIURL in
+  //     terms of GnomeVFSURI since some Necko methods have no GnomeVFS
+  //     equivalent.
+  //
+  nsresult rv;
+  nsCOMPtr<nsIStandardURL> url =
+      do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv);
+  if (NS_FAILED(rv))
+    return rv;
+
+  rv = url->Init(nsIStandardURL::URLTYPE_STANDARD, -1, flatSpec,
+                 aOriginCharset, aBaseURI);
+  if (NS_SUCCEEDED(rv))
+    rv = CallQueryInterface(url, aResult);
+
+  return rv;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::NewChannel2(nsIURI* aURI,
+                                       nsILoadInfo* aLoadInfo,
+                                       nsIChannel** aResult)
+{
+  NS_ENSURE_ARG_POINTER(aURI);
+  nsresult rv;
+
+  nsAutoCString spec;
+  rv = aURI->GetSpec(spec);
+  if (NS_FAILED(rv))
+    return rv;
+
+  nsRefPtr<nsGnomeVFSInputStream> stream = new nsGnomeVFSInputStream(spec);
+  if (!stream)
+  {
+    rv = NS_ERROR_OUT_OF_MEMORY;
+  }
+  else
+  {
+    // start out assuming an unknown content-type.  we'll set the content-type
+    // to something better once we open the URI.
+    rv = NS_NewInputStreamChannel(aResult, aURI, stream,
+                                  NS_LITERAL_CSTRING(UNKNOWN_CONTENT_TYPE));
+    if (NS_SUCCEEDED(rv))
+      stream->SetChannel(*aResult);
+  }
+  return rv;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::NewChannel(nsIURI *aURI, nsIChannel **aResult)
+{
+    return NewChannel2(aURI, nullptr, aResult);
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::AllowPort(int32_t aPort,
+                                     const char *aScheme,
+                                     bool *aResult)
+{
+  // Don't override anything.
+  *aResult = false;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSProtocolHandler::Observe(nsISupports *aSubject,
+                                   const char *aTopic,
+                                   const char16_t *aData)
+{
+  if (strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) == 0) {
+    nsCOMPtr<nsIPrefBranch> prefs = do_QueryInterface(aSubject);
+    InitSupportedProtocolsPref(prefs);
+  }
+  return NS_OK;
+}
+
+//-----------------------------------------------------------------------------
+
+#define NS_GNOMEVFSPROTOCOLHANDLER_CID               \
+{ /* 9b6dc177-a2e4-49e1-9c98-0a8384de7f6c */         \
+    0x9b6dc177,                                      \
+    0xa2e4,                                          \
+    0x49e1,                                          \
+    {0x9c, 0x98, 0x0a, 0x83, 0x84, 0xde, 0x7f, 0x6c} \
+}
+
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSProtocolHandler, Init)
+NS_DEFINE_NAMED_CID(NS_GNOMEVFSPROTOCOLHANDLER_CID);
+
+static const mozilla::Module::CIDEntry kVFSCIDs[] = {
+  { &kNS_GNOMEVFSPROTOCOLHANDLER_CID, false, nullptr, nsGnomeVFSProtocolHandlerConstructor },
+  { nullptr }
+};
+
+static const mozilla::Module::ContractIDEntry kVFSContracts[] = {
+  { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX MOZ_GNOMEVFS_SCHEME, &kNS_GNOMEVFSPROTOCOLHANDLER_CID },
+  { nullptr }
+};
+
+static const mozilla::Module kVFSModule = {
+  mozilla::Module::kVersion,
+  kVFSCIDs,
+  kVFSContracts
+};
+
+NSMODULE_DEFN(nsGnomeVFSModule) = &kVFSModule;
diff -up thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in
--- thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in.moz-1134537-gnomevfsservice    2016-05-09 13:19:52.322048300 +0200
+++ thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in    2016-05-09 13:25:02.680824572 +0200
@@ -613,6 +613,12 @@ bin/libfreebl_32int64_3.so
 @BINPATH@/crashreporter-override.ini
 #endif
+; [Extensions]
+;
+#ifdef MOZ_ENABLE_GNOMEVFS
+bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@
+#endif
+
 [mobile]
 @BINPATH@/chrome/icons/
 @BINPATH@/chrome/chrome@JAREXT@
SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch
New file
@@ -0,0 +1,413 @@
diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build
--- thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice    2016-04-07 23:33:34.000000000 +0200
+++ thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build    2016-05-11 13:56:15.863034987 +0200
@@ -15,6 +15,12 @@ if CONFIG['MOZ_ENABLE_GCONF']:
         'nsGConfService.cpp',
     ]
+if CONFIG['MOZ_ENABLE_GNOMEVFS']:
+    SOURCES += [
+        'nsGnomeVFSService.cpp',
+    ]
+
+
 if CONFIG['MOZ_ENABLE_GIO']:
     SOURCES += [
         'nsGIOService.cpp',
@@ -29,6 +35,7 @@ LOCAL_INCLUDES += [
 ]
 CXXFLAGS += CONFIG['MOZ_GCONF_CFLAGS']
+CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS']
 CXXFLAGS += CONFIG['MOZ_GIO_CFLAGS']
 CXXFLAGS += CONFIG['GLIB_CFLAGS']
 CXXFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS']
@@ -38,3 +45,5 @@ if CONFIG['MOZ_ENABLE_GTK']:
 if CONFIG['GNU_CXX']:
     CXXFLAGS += ['-Wshadow']
+
+OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS']
\ No newline at end of file
diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp
--- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice    2016-04-07 23:33:34.000000000 +0200
+++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp    2016-05-11 13:54:01.306097859 +0200
@@ -12,6 +12,10 @@
 #include "nsGConfService.h"
 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGConfService, Init)
 #endif
+#ifdef MOZ_ENABLE_GNOMEVFS
+#include "nsGnomeVFSService.h"
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init)
+#endif
 #ifdef MOZ_ENABLE_GIO
 #include "nsGIOService.h"
 #include "nsGSettingsService.h"
@@ -26,6 +30,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSy
 #ifdef MOZ_ENABLE_GCONF
 NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID);
 #endif
+#ifdef MOZ_ENABLE_GNOMEVFS
+NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID);
+#endif
 #ifdef MOZ_ENABLE_GIO
 NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID);
 NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID);
@@ -37,6 +44,9 @@ static const mozilla::Module::CIDEntry k
 #ifdef MOZ_ENABLE_GCONF
   { &kNS_GCONFSERVICE_CID, false, nullptr, nsGConfServiceConstructor },
 #endif
+#ifdef MOZ_ENABLE_GNOMEVFS
+  { &kNS_GNOMEVFSSERVICE_CID, false, nullptr, nsGnomeVFSServiceConstructor },
+#endif
 #ifdef MOZ_ENABLE_GIO
   { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor },
   { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor },
@@ -50,6 +60,9 @@ static const mozilla::Module::ContractID
 #ifdef MOZ_ENABLE_GCONF
   { NS_GCONFSERVICE_CONTRACTID, &kNS_GCONFSERVICE_CID },
 #endif
+#ifdef MOZ_ENABLE_GNOMEVFS
+  { NS_GNOMEVFSSERVICE_CONTRACTID, &kNS_GNOMEVFSSERVICE_CID },
+#endif
 #ifdef MOZ_ENABLE_GIO
   { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID },
   { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID },
diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp
--- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice    2016-05-11 13:54:01.306097859 +0200
+++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp    2016-05-11 13:54:01.306097859 +0200
@@ -0,0 +1,225 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsGnomeVFSService.h"
+#include "nsStringGlue.h"
+#include "nsIURI.h"
+#include "nsTArray.h"
+#include "nsIStringEnumerator.h"
+#include "nsAutoPtr.h"
+
+extern "C" {
+#include <libgnomevfs/gnome-vfs.h>
+#include <libgnomevfs/gnome-vfs-mime.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
+}
+
+class nsGnomeVFSMimeApp : public nsIGnomeVFSMimeApp
+{
+public:
+  NS_DECL_ISUPPORTS
+  NS_DECL_NSIGNOMEVFSMIMEAPP
+
+  nsGnomeVFSMimeApp(GnomeVFSMimeApplication* aApp) : mApp(aApp) {}
+
+private:
+  ~nsGnomeVFSMimeApp() { gnome_vfs_mime_application_free(mApp); }
+  GnomeVFSMimeApplication *mApp;
+};
+
+NS_IMPL_ISUPPORTS(nsGnomeVFSMimeApp, nsIGnomeVFSMimeApp)
+
+NS_IMETHODIMP
+nsGnomeVFSMimeApp::GetId(nsACString& aId)
+{
+  aId.Assign(mApp->id);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSMimeApp::GetName(nsACString& aName)
+{
+  aName.Assign(mApp->name);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSMimeApp::GetCommand(nsACString& aCommand)
+{
+  aCommand.Assign(mApp->command);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSMimeApp::GetCanOpenMultipleFiles(bool* aCanOpen)
+{
+  *aCanOpen = mApp->can_open_multiple_files;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSMimeApp::GetExpectsURIs(int32_t* aExpects)
+{
+  *aExpects = mApp->expects_uris;
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsGnomeVFSMimeApp::Launch(const nsACString &aUri)
+{
+  char *uri = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get());
+
+  if (! uri)
+    return NS_ERROR_FAILURE;
+
+  GList uris = { 0 };
+  uris.data = uri;
+
+  GnomeVFSResult result = gnome_vfs_mime_application_launch(mApp, &uris);
+  g_free(uri);
+
+  if (result != GNOME_VFS_OK)
+    return NS_ERROR_FAILURE;
+
+  return NS_OK;
+}
+
+class UTF8StringEnumerator : public nsIUTF8StringEnumerator
+{
+public:
+  UTF8StringEnumerator() : mIndex(0) { }
+private:
+  ~UTF8StringEnumerator() { }
+
+  NS_DECL_ISUPPORTS
+  NS_DECL_NSIUTF8STRINGENUMERATOR
+public:
+  nsTArray<nsCString> mStrings;
+  uint32_t            mIndex;
+};
+