summarylogtreecommitdiffstats
path: root/0002-wayland-proxy.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-wayland-proxy.patch')
-rw-r--r--0002-wayland-proxy.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/0002-wayland-proxy.patch b/0002-wayland-proxy.patch
new file mode 100644
index 000000000000..c76bc21924e0
--- /dev/null
+++ b/0002-wayland-proxy.patch
@@ -0,0 +1,88 @@
+diff --color --unified --recursive --text firefox-121.0.orig/toolkit/xre/nsAppRunner.cpp firefox-121.0.new/toolkit/xre/nsAppRunner.cpp
+--- firefox-121.0.orig/toolkit/xre/nsAppRunner.cpp 2024-01-09 02:00:34.503779191 +0100
++++ firefox-121.0.new/toolkit/xre/nsAppRunner.cpp 2024-01-09 02:01:28.333190186 +0100
+@@ -340,13 +340,24 @@
+ # ifdef MOZ_WAYLAND
+ # include <gdk/gdkwayland.h>
+ # include "mozilla/widget/nsWaylandDisplay.h"
++# include "wayland-proxy.h"
+ # endif
+ # ifdef MOZ_X11
+ # include <gdk/gdkx.h>
+ # endif /* MOZ_X11 */
+ #endif
++
++#if defined(MOZ_WAYLAND)
++std::unique_ptr<WaylandProxy> gWaylandProxy;
++#endif
++
+ #include "BinaryPath.h"
+
++#ifdef MOZ_LOGGING
++# include "mozilla/Logging.h"
++extern mozilla::LazyLogModule gWidgetWaylandLog;
++#endif /* MOZ_LOGGING */
++
+ #ifdef FUZZING
+ # include "FuzzerRunner.h"
+
+@@ -2788,6 +2799,9 @@
+ gRemoteService = nullptr;
+ }
+ #endif
++#if defined(MOZ_WAYLAND)
++ gWaylandProxy = nullptr;
++#endif
+ return LaunchChild(false, true);
+ }
+ } else {
+@@ -2902,6 +2916,9 @@
+ gRemoteService = nullptr;
+ }
+ #endif
++#if defined(MOZ_WAYLAND)
++ gWaylandProxy = nullptr;
++#endif
+ return LaunchChild(false, true);
+ }
+
+@@ -4707,6 +4724,23 @@
+ const char* display_name = nullptr;
+ bool saveDisplayArg = false;
+
++ bool waylandEnabled = IsWaylandEnabled();
++# ifdef MOZ_WAYLAND
++ auto* proxyEnv = getenv("MOZ_DISABLE_WAYLAND_PROXY");
++ bool disableWaylandProxy = proxyEnv && *proxyEnv;
++ if (!disableWaylandProxy && XRE_IsParentProcess() && waylandEnabled) {
++# ifdef MOZ_LOGGING
++ if (MOZ_LOG_TEST(gWidgetWaylandLog, mozilla::LogLevel::Debug)) {
++ WaylandProxy::SetVerbose(true);
++ }
++# endif
++ gWaylandProxy = WaylandProxy::Create();
++ if (gWaylandProxy) {
++ gWaylandProxy->RunThread();
++ }
++ }
++# endif
++
+ // display_name is owned by gdk.
+ display_name = gdk_get_display_arg_name();
+ // if --display argument is given make sure it's
+@@ -4716,7 +4750,6 @@
+ saveDisplayArg = true;
+ }
+
+- bool waylandEnabled = IsWaylandEnabled();
+ // On Wayland disabled builds read X11 DISPLAY env exclusively
+ // and don't care about different displays.
+ if (!waylandEnabled && !display_name) {
+@@ -5918,6 +5951,7 @@
+ if (!gfxPlatform::IsHeadless()) {
+ # ifdef MOZ_WAYLAND
+ WaylandDisplayRelease();
++ gWaylandProxy = nullptr;
+ # endif
+ }
+ #endif