summaryrefslogtreecommitdiff
path: root/newmoon/debian/patches/UXP-eliminate-need-for-GTK-2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'newmoon/debian/patches/UXP-eliminate-need-for-GTK-2.patch')
-rw-r--r--newmoon/debian/patches/UXP-eliminate-need-for-GTK-2.patch382
1 files changed, 382 insertions, 0 deletions
diff --git a/newmoon/debian/patches/UXP-eliminate-need-for-GTK-2.patch b/newmoon/debian/patches/UXP-eliminate-need-for-GTK-2.patch
new file mode 100644
index 0000000..f28fd10
--- /dev/null
+++ b/newmoon/debian/patches/UXP-eliminate-need-for-GTK-2.patch
@@ -0,0 +1,382 @@
+# This patch and its previous revision were created by Gordon N. Squash.
+#
+# This patch can be used to eliminate the Unified XUL Platform's need for both
+# GTK+ 2 and GTK+ 3, even when you are compiling UXP only to use GTK+ 3.
+#
+# This patch is still highly experimental. The author of this patch has not
+# yet encountered any issues with this patch, but there are no guarantees.
+#
+# This is revision 2 of the patch. The previous revisions eliminated a stub
+# function from mozgtk which disabled the X Shared Memory (X MIT-SHM) extension
+# from getting used by Cairo. Unfortunately, that function, while overly
+# simplistic, was necessary to ensure the guaranteed operability of UXP; in
+# other words, UXP crashed sometimes if this function wasn't present.
+# This revision re-introduces this function into the codebase -- but part of
+# libxul this time, not libmozgtk.
+#
+# WARNING! This is not an official patch in any way, shape or form! Do not
+# contact the original authors of UXP for support of this patch!
+#
+diff -uprN palemoon-28.12.0-original/platform/config/recurse.mk palemoon-28.12.0-patched/platform/config/recurse.mk
+--- palemoon-28.12.0-original/platform/config/recurse.mk 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/config/recurse.mk 2020-08-19 13:12:24.228334662 -0400
+@@ -161,9 +161,9 @@ endif
+
+ # Interdependencies that moz.build world don't know about yet for compilation.
+ # Note some others are hardcoded or "guessed" in recursivemake.py and emitter.py
+-ifeq ($(MOZ_WIDGET_TOOLKIT),gtk3)
+-toolkit/library/target: widget/gtk/mozgtk/gtk3/target
+-endif
++#ifeq ($(MOZ_WIDGET_TOOLKIT),gtk3)
++#toolkit/library/target: widget/gtk/mozgtk/gtk3/target
++#endif
+ ifdef MOZ_LDAP_XPCOM
+ ldap/target: config/external/nss/target mozglue/build/target
+ toolkit/library/target: ldap/target
+diff -uprN palemoon-28.12.0-original/platform/dom/ipc/moz.build palemoon-28.12.0-patched/platform/dom/ipc/moz.build
+--- palemoon-28.12.0-original/platform/dom/ipc/moz.build 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/dom/ipc/moz.build 2020-08-19 11:20:54.768059475 -0400
+@@ -114,6 +114,7 @@ LOCAL_INCLUDES += [
+ '/dom/workers',
+ '/embedding/components/printingui/ipc',
+ '/extensions/cookie',
++ '/extensions/spellcheck/hunspell/glue',
+ '/extensions/spellcheck/src',
+ '/gfx/2d',
+ '/hal/sandbox',
+diff -uprN palemoon-28.12.0-original/platform/dom/plugins/ipc/moz.build palemoon-28.12.0-patched/platform/dom/plugins/ipc/moz.build
+--- palemoon-28.12.0-original/platform/dom/plugins/ipc/moz.build 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/dom/plugins/ipc/moz.build 2020-08-18 14:55:40.548143359 -0400
+@@ -121,11 +121,7 @@ LOCAL_INCLUDES += [
+
+ DEFINES['FORCE_PR_LOG'] = True
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gtk3':
+- CXXFLAGS += CONFIG['TK_CFLAGS']
+-else:
+- # Force build against gtk+2 for struct offsets and such.
+- CXXFLAGS += CONFIG['MOZ_GTK2_CFLAGS']
++CXXFLAGS += CONFIG['TK_CFLAGS']
+
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+
+diff -uprN palemoon-28.12.0-original/platform/dom/plugins/ipc/PluginInstanceChild.cpp palemoon-28.12.0-patched/platform/dom/plugins/ipc/PluginInstanceChild.cpp
+--- palemoon-28.12.0-original/platform/dom/plugins/ipc/PluginInstanceChild.cpp 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/dom/plugins/ipc/PluginInstanceChild.cpp 2020-08-19 12:33:46.736239327 -0400
+@@ -52,7 +52,9 @@
+ #include <gtk/gtk.h>
+ #include <gdk/gdkx.h>
+ #include <gdk/gdk.h>
++#if MOZ_WIDGET_GTK == 2
+ #include "gtk2xtbin.h"
++#endif
+
+ #elif defined(OS_WIN)
+
+@@ -152,7 +154,7 @@
+ , mAsyncInvalidateTask(0)
+ , mCachedWindowActor(nullptr)
+ , mCachedElementActor(nullptr)
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ , mXEmbed(false)
+ #endif // MOZ_WIDGET_GTK
+ #if defined(OS_WIN)
+@@ -201,7 +203,7 @@
+ #if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX)
+ mWindow.ws_info = &mWsInfo;
+ memset(&mWsInfo, 0, sizeof(mWsInfo));
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ mWsInfo.display = nullptr;
+ mXtClient.top_widget = nullptr;
+ #else
+@@ -610,7 +612,7 @@
+ return NPERR_GENERIC_ERROR;
+
+ NPWindowType newWindowType = windowed ? NPWindowTypeWindow : NPWindowTypeDrawable;
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ if (mWindow.type != newWindowType && mWsInfo.display) {
+ // plugin type has been changed but we already have a valid display
+ // so update it for the recent plugin mode
+@@ -1202,7 +1204,7 @@
+ aWindow.x, aWindow.y,
+ aWindow.width, aWindow.height));
+
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ if (mXEmbed) {
+ mWindow.window = reinterpret_cast<void*>(aWindow.window);
+ }
+@@ -1231,7 +1233,7 @@
+ if (!mWindow.window)
+ return;
+
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ if (mXtClient.top_widget) {
+ xt_client_unrealize(&mXtClient);
+ xt_client_destroy(&mXtClient);
+@@ -1313,7 +1315,7 @@
+ CreateWindow(aWindow);
+ }
+
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ if (mXEmbed && gtk_check_version(2,18,7) != nullptr) { // older
+ if (aWindow.type == NPWindowTypeWindow) {
+ GdkWindow* socket_window = gdk_window_lookup(static_cast<GdkNativeWindow>(aWindow.window));
+@@ -1439,7 +1441,7 @@
+ bool
+ PluginInstanceChild::Initialize()
+ {
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ NPError rv;
+
+ if (mWsInfo.display) {
+@@ -4650,7 +4652,7 @@
+
+ mPendingAsyncCalls.Clear();
+
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ if (mWindow.type == NPWindowTypeWindow && !mXEmbed) {
+ xt_client_xloop_destroy();
+ }
+diff -uprN palemoon-28.12.0-original/platform/dom/plugins/ipc/PluginInstanceChild.h palemoon-28.12.0-patched/platform/dom/plugins/ipc/PluginInstanceChild.h
+--- palemoon-28.12.0-original/platform/dom/plugins/ipc/PluginInstanceChild.h 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/dom/plugins/ipc/PluginInstanceChild.h 2020-08-19 11:51:36.556135241 -0400
+@@ -35,7 +35,7 @@
+
+ #include <map>
+
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ #include "gtk2xtbin.h"
+ #endif
+
+@@ -458,7 +458,7 @@ private:
+
+ #if defined(MOZ_X11) && defined(XP_UNIX) && !defined(XP_MACOSX)
+ NPSetWindowCallbackStruct mWsInfo;
+-#ifdef MOZ_WIDGET_GTK
++#if MOZ_WIDGET_GTK == 2
+ bool mXEmbed;
+ XtClient mXtClient;
+ #endif
+diff -uprN palemoon-28.12.0-original/platform/dom/plugins/ipc/PluginModuleChild.cpp palemoon-28.12.0-patched/platform/dom/plugins/ipc/PluginModuleChild.cpp
+--- palemoon-28.12.0-original/platform/dom/plugins/ipc/PluginModuleChild.cpp 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/dom/plugins/ipc/PluginModuleChild.cpp 2020-08-19 12:52:01.880284378 -0400
+@@ -13,6 +13,7 @@
+
+ #ifdef MOZ_WIDGET_GTK
+ #include <gtk/gtk.h>
++#include <gtk/gtkx.h>
+ #endif
+
+ #include "nsIFile.h"
+@@ -1094,7 +1095,7 @@ _getvalue(NPP aNPP,
+ case NPNVSupportsWindowless:
+ *(NPBool*)aValue = PluginModuleChild::GetChrome()->Settings().supportsWindowless();
+ return NPERR_NO_ERROR;
+-#if defined(MOZ_WIDGET_GTK)
++#if MOZ_WIDGET_GTK == 2
+ case NPNVxDisplay: {
+ if (aNPP) {
+ return InstCast(aNPP)->NPN_GetValue(aVariable, aValue);
+diff -uprN palemoon-28.12.0-original/platform/dom/plugins/test/testplugin/testplugin.mozbuild palemoon-28.12.0-patched/platform/dom/plugins/test/testplugin/testplugin.mozbuild
+--- palemoon-28.12.0-original/platform/dom/plugins/test/testplugin/testplugin.mozbuild 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/dom/plugins/test/testplugin/testplugin.mozbuild 2020-08-18 14:56:31.168144491 -0400
+@@ -49,13 +49,20 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wind
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa' and '64' in CONFIG['OS_TEST']:
+ OS_LIBS += ['-framework Carbon']
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in 'gtk2':
+ CXXFLAGS += CONFIG['MOZ_GTK2_CFLAGS']
+ CFLAGS += CONFIG['MOZ_GTK2_CFLAGS']
+ OS_LIBS += CONFIG['MOZ_GTK2_LIBS']
+ OS_LIBS += CONFIG['XLDFLAGS']
+ OS_LIBS += CONFIG['XLIBS']
+ OS_LIBS += CONFIG['XEXT_LIBS']
++elif CONFIG['MOZ_WIDGET_TOOLKIT'] in 'gtk3':
++ CXXFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
++ CFLAGS += CONFIG['MOZ_GTK3_CFLAGS']
++ OS_LIBS += CONFIG['MOZ_GTK3_LIBS']
++ OS_LIBS += CONFIG['XLDFLAGS']
++ OS_LIBS += CONFIG['XLIBS']
++ OS_LIBS += CONFIG['XEXT_LIBS']
+
+ if CONFIG['_MSC_VER']:
+ # This is intended as a temporary hack to support building with VS2015.
+diff -uprN palemoon-28.12.0-original/platform/old-configure.in palemoon-28.12.0-patched/platform/old-configure.in
+--- palemoon-28.12.0-original/platform/old-configure.in 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/old-configure.in 2020-08-18 14:54:27.952141735 -0400
+@@ -2324,8 +2324,6 @@ if test "$COMPILE_ENVIRONMENT"; then
+ fi
+ if test "$MOZ_WIDGET_TOOLKIT" = gtk2; then
+ GLIB_VERSION_MAX_ALLOWED=$GLIB_VERSION_MIN_REQUIRED
+- fi
+- if test "$MOZ_ENABLE_GTK"; then
+ if test "$MOZ_X11"; then
+ GDK_PACKAGES=gdk-x11-2.0
+ fi
+@@ -2334,8 +2332,6 @@ if test "$COMPILE_ENVIRONMENT"; then
+
+ 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)
+ MOZ_GTK2_CFLAGS="-I${_topsrcdir}/widget/gtk/compat $MOZ_GTK2_CFLAGS"
+- fi
+- if test "$MOZ_WIDGET_TOOLKIT" = gtk2; then
+ TK_CFLAGS=$MOZ_GTK2_CFLAGS
+ TK_LIBS=$MOZ_GTK2_LIBS
+ fi
+diff -uprN palemoon-28.12.0-original/platform/toolkit/library/moz.build palemoon-28.12.0-patched/platform/toolkit/library/moz.build
+--- palemoon-28.12.0-original/platform/toolkit/library/moz.build 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/toolkit/library/moz.build 2020-08-19 14:14:17.820487430 -0400
+@@ -117,10 +117,10 @@ if CONFIG['USE_ICU']:
+ 'icu',
+ ]
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
+- USE_LIBS += [
+- 'mozgtk_stub',
+- ]
++#if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
++# USE_LIBS += [
++# 'mozgtk_stub',
++# ]
+
+ if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT'] or \
+ CONFIG['MOZ_TREE_FREETYPE']:
+@@ -231,16 +231,18 @@ if CONFIG['MOZ_ENABLE_DBUS']:
+ OS_LIBS += CONFIG['MOZ_DBUS_GLIB_LIBS']
+
+ if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
+- if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
+- OS_LIBS += [l for l in CONFIG['TK_LIBS']
+- if l not in ('-lgtk-3', '-lgdk-3')]
+- else:
+- OS_LIBS += CONFIG['TK_LIBS']
++# if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
++# OS_LIBS += [l for l in CONFIG['TK_LIBS']
++# if l not in ('-lgtk-3', '-lgdk-3')]
++# else:
++# OS_LIBS += CONFIG['TK_LIBS']
++ OS_LIBS += CONFIG['TK_LIBS']
+ OS_LIBS += CONFIG['XLDFLAGS']
+ OS_LIBS += CONFIG['XLIBS']
+ OS_LIBS += CONFIG['XEXT_LIBS']
+ OS_LIBS += CONFIG['MOZ_PANGO_LIBS']
+- OS_LIBS += CONFIG['XT_LIBS']
++ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk2':
++ OS_LIBS += CONFIG['XT_LIBS']
+ OS_LIBS += [
+ 'gthread-2.0',
+ ]
+diff -uprN palemoon-28.12.0-original/platform/widget/gtk/moz.build palemoon-28.12.0-patched/platform/widget/gtk/moz.build
+--- palemoon-28.12.0-original/platform/widget/gtk/moz.build 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/widget/gtk/moz.build 2020-08-19 12:31:16.304233138 -0400
+@@ -4,8 +4,8 @@
+ # 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/.
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
+- DIRS += ['mozgtk']
++#if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk3':
++# DIRS += ['mozgtk']
+
+ EXPORTS += [
+ 'mozcontainer.h',
+diff -uprN palemoon-28.12.0-original/platform/widget/moz.build palemoon-28.12.0-patched/platform/widget/moz.build
+--- palemoon-28.12.0-original/platform/widget/moz.build 2020-07-30 05:37:13.000000000 -0400
++++ palemoon-28.12.0-patched/platform/widget/moz.build 2020-08-18 15:01:26.856151106 -0400
+@@ -53,7 +53,7 @@ if toolkit in ('cocoa', 'gtk2', 'gtk3'):
+ if 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
+ DIRS += ['gtk']
+
+- if CONFIG['MOZ_X11']:
++ if CONFIG['MOZ_X11'] and CONFIG['MOZ_WIDGET_TOOKIT'] == 'gtk2':
+ DIRS += ['gtkxtbin']
+
+ XPIDL_SOURCES += [
+Date: 2020-08-20
+Message: The following was added in revision 1 of this patch. The location of the UXP
+application's package manifest must be changed before this patch is applied
+to any UXP application other than Pale Moon. However, this patch works
+without modification on Pale Moon.
+diff -uprN palemoon-28.12.0-original/palemoon/installer/package-manifest.in palemoon-28.12.0-patched/palemoon/installer/package-manifest.in
+--- palemoon-28.12.0-original/palemoon/installer/package-manifest.in 2020-07-30 06:09:43.000000000 -0400
++++ palemoon-28.12.0-patched/palemoon/installer/package-manifest.in 2020-08-20 20:57:55.116007204 -0400
+@@ -103,10 +103,6 @@
+ #ifdef MOZ_ICU_DATA_ARCHIVE
+ @RESPATH@/@ICU_DATA_FILE@
+ #endif
+-#ifdef MOZ_GTK3
+-@BINPATH@/@DLL_PREFIX@mozgtk@DLL_SUFFIX@
+-@BINPATH@/gtk2/@DLL_PREFIX@mozgtk@DLL_SUFFIX@
+-#endif
+
+ [browser]
+ ; [Base Browser Files]
+# CHANGES MADE IN REVISION 2
+#
+# Hooray GTK+ 3 users! UXP does not play well with Cairo! Therefore we
+# need this separate file. This code was borrowed from mozgtk.c.
+# According to bug # 1271100, basically if you scroll (or do almost anything)
+# while UXP is rendering something on the page, UXP is not designed properly
+# to handle this situation and a race condition results. The race condition
+# ends up with the scratch buffer drawable UXP uses getting deleted. When
+# this happens, the next operation UXP performs is a CopyArea request, to
+# copy the drawable to the actual window where this stuff is getting displayed.
+# The X server recognizes that the drawable has been deleted, signals an
+# error condition, and GTK, which catches the error, throws up its hands and
+# kills the whole #$@% application.
+#
+# This all apparently has something to do with the usage of the X MIT-SHM
+# extension. Apparently by disabling Cairo's, and ultimately GTK's, use
+# of the SHM extension, this bug does not occur. It turns out that the
+# dynamic linker will load this function first and the real function second;
+# Cairo will use this function and failures will be no more. UXP however
+# uses XCB instead of XLib, so UXP still uses SHM.
+#
+# In other words, the Mozilla codebase does not play well with other libraries.
+# Now, the Mozilla and UXP people can say that the other libraries should play
+# well with Mozilla and UXP, but the fact is code should always adapt to error
+# conditions if possible -- error conditions should not adapt to code.
+#
+# But at the very least this stuff works!
+#
+diff -uprN palemoon-28.12.0-original/platform/widget/gtk/gtk3frictionworkarounds.c palemoon-28.12.0-patched/platform/widget/gtk/gtk3frictionworkarounds.c
+--- palemoon-28.12.0-original/platform/widget/gtk/gtk3frictionworkarounds.c 1969-12-31 19:00:00.000000000 -0500
++++ palemoon-28.12.0-patched/platform/widget/gtk/gtk3frictionworkarounds.c 2020-08-21 20:30:01.616049093 -0400
+@@ -0,0 +1,16 @@
++/*
++ * This file was added by Gordon N. Squash. Please see his original patch
++ * for details on what this code is for. If you have not received his patch
++ * then at least understand that THIS IS NOT THE OFFICIAL UXP SOURCE CODE IN
++ * ANY WAY, SHAPE OR FORM: IT IS A PATCHED VERSION. DO NOT CONTACT THE
++ * ORIGINAL DEVELOPERS OF UXP OR MOZILLA FOR SUPPORT OF THIS CODE.
++ */
++
++#include "mozilla/Types.h"
++#include <X11/Xlib.h>
++
++MOZ_EXPORT Bool
++XShmQueryExtension(Display* aDisplay)
++{
++ return False;
++}
+diff -uprN palemoon-28.12.0-original/platform/widget/gtk/moz.build palemoon-28.12.0-patched/platform/widget/gtk/moz.build
+--- palemoon-28.12.0-original/platform/widget/gtk/moz.build 2020-08-20 21:24:39.148073190 -0400
++++ palemoon-28.12.0-patched/platform/widget/gtk/moz.build 2020-08-21 20:31:09.660050615 -0400
+@@ -104,6 +104,7 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk2
+ else:
+ UNIFIED_SOURCES += [
+ 'gtk3drawing.cpp',
++ 'gtk3frictionworkarounds.c',
+ 'nsApplicationChooser.cpp',
+ 'WidgetStyleCache.cpp',
+ ]
+
bgstack15