diff options
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.patch | 382 |
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', + ] + |