repo/extra/firefox/patches/no-x11.patch
2022-03-06 17:40:08 +05:30

1715 lines
55 KiB
Diff

diff --git a/dom/media/systemservices/video_engine/desktop_device_info_x11.cc b/dom/media/systemservices/video_engine/desktop_device_info_x11.cc
index a9f88f0f90..7cfe45533c 100644
--- a/dom/media/systemservices/video_engine/desktop_device_info_x11.cc
+++ b/dom/media/systemservices/video_engine/desktop_device_info_x11.cc
@@ -7,10 +7,6 @@
#include <inttypes.h>
-#if !defined(WEBRTC_USE_X11) || !defined(MOZ_X11)
-# error Bad build setup, some X11 defines are missing
-#endif
-
namespace webrtc {
DesktopDeviceInfo* DesktopDeviceInfoImpl::Create() {
diff --git a/gfx/angle/moz.build.common b/gfx/angle/moz.build.common
index 8769a2fe96..6976853b35 100644
--- a/gfx/angle/moz.build.common
+++ b/gfx/angle/moz.build.common
@@ -12,6 +12,9 @@ CXXFLAGS += CONFIG['MOZ_X11_CFLAGS']
if CONFIG['INTEL_ARCHITECTURE']:
CXXFLAGS += CONFIG['SSE2_FLAGS']
+if not CONFIG['MOZ_X11']:
+ DEFINES['EGL_NO_X11'] = True
+
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
DEFINES['ANGLE_IS_WIN'] = True
diff --git a/gfx/cairo/cairo/src/cairo-features.h b/gfx/cairo/cairo/src/cairo-features.h
index cfed9d9a2f..ad9abeaab1 100644
--- a/gfx/cairo/cairo/src/cairo-features.h
+++ b/gfx/cairo/cairo/src/cairo-features.h
@@ -56,7 +56,6 @@
#endif
#ifdef MOZ_X11
-#define CAIRO_HAS_PS_SURFACE 1
#define CAIRO_HAS_XLIB_XRENDER_SURFACE 0
#define CAIRO_HAS_XLIB_SURFACE 1
#endif
@@ -78,6 +77,7 @@
#endif
#define CAIRO_HAS_TEE_SURFACE 1
+#define CAIRO_HAS_PS_SURFACE 1
#ifdef USE_FC_FREETYPE
#define CAIRO_HAS_FC_FONT 1
diff --git a/gfx/gl/moz.build b/gfx/gl/moz.build
index 03434957cc..c4727d79a1 100644
--- a/gfx/gl/moz.build
+++ b/gfx/gl/moz.build
@@ -13,10 +13,10 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "uikit":
gl_provider = "EAGL"
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
- if CONFIG["MOZ_EGL_XRENDER_COMPOSITE"]:
- gl_provider = "EGL"
- else:
+ if CONFIG["MOZ_X11"]:
gl_provider = "GLX"
+ else:
+ gl_provider = "EGL"
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
gl_provider = "EGL"
@@ -117,7 +117,10 @@ elif gl_provider == "GLX":
EXPORTS += ["GLContextGLX.h", "GLXLibrary.h"]
if CONFIG["MOZ_WAYLAND"]:
- SOURCES += ["GLContextProviderWayland.cpp", "SharedSurfaceDMABUF.cpp"]
+ SOURCES += ["SharedSurfaceDMABUF.cpp"]
+
+if CONFIG["MOZ_X11"] and CONFIG["MOZ_WAYLAND"]:
+ SOURCES += ["GLContextProviderWayland.cpp"]
UNIFIED_SOURCES += [
"AndroidSurfaceTexture.cpp",
diff --git a/gfx/layers/client/TextureClient.cpp b/gfx/layers/client/TextureClient.cpp
index aaec3c3510..65bee9f869 100644
--- a/gfx/layers/client/TextureClient.cpp
+++ b/gfx/layers/client/TextureClient.cpp
@@ -48,8 +48,6 @@
# include "mozilla/layers/TextureD3D11.h"
#endif
#ifdef MOZ_WAYLAND
-# include <gtk/gtkx.h>
-
# include "gfxPlatformGtk.h"
# include "mozilla/layers/DMABUFTextureClientOGL.h"
# include "mozilla/widget/nsWaylandDisplay.h"
diff --git a/gfx/thebes/gfxPlatformGtk.cpp b/gfx/thebes/gfxPlatformGtk.cpp
index 1b46a2aab8..4a487e0b78 100644
--- a/gfx/thebes/gfxPlatformGtk.cpp
+++ b/gfx/thebes/gfxPlatformGtk.cpp
@@ -31,11 +31,11 @@
#include "mozilla/FontPropertyTypes.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/gfx/Logging.h"
-#include "mozilla/gfx/XlibDisplay.h"
#include "mozilla/Monitor.h"
#include "mozilla/Preferences.h"
#include "mozilla/StaticPrefs_gfx.h"
#include "mozilla/StaticPrefs_layers.h"
+#include "mozilla/WidgetUtilsGtk.h"
#include "nsAppRunner.h"
#include "nsIGfxInfo.h"
#include "nsMathUtils.h"
@@ -52,6 +52,7 @@
# include "GLXLibrary.h"
# include "mozilla/X11Util.h"
# include "SoftwareVsyncSource.h"
+# include "mozilla/gfx/XlibDisplay.h"
/* Undefine the Status from Xlib since it will conflict with system headers on
* OSX */
diff --git a/gfx/webrender_bindings/RenderCompositorOGLSWGL.cpp b/gfx/webrender_bindings/RenderCompositorOGLSWGL.cpp
index 00a6c3ef6d..78c4235268 100644
--- a/gfx/webrender_bindings/RenderCompositorOGLSWGL.cpp
+++ b/gfx/webrender_bindings/RenderCompositorOGLSWGL.cpp
@@ -27,7 +27,6 @@
#ifdef MOZ_WIDGET_GTK
# include "mozilla/widget/GtkCompositorWidget.h"
# include <gdk/gdk.h>
-# include <gdk/gdkx.h>
#endif
namespace mozilla {
diff --git a/python/mozboot/mozboot/gentoo.py b/python/mozboot/mozboot/gentoo.py
index a33677a0a1..cb9e3dd338 100644
--- a/python/mozboot/mozboot/gentoo.py
+++ b/python/mozboot/mozboot/gentoo.py
@@ -33,7 +33,6 @@ class GentooBootstrapper(LinuxBootstrapper, BaseBootstrapper):
"dev-libs/dbus-glib",
"media-sound/pulseaudio",
"x11-libs/gtk+:3",
- "x11-libs/libXt",
]
)
diff --git a/third_party/libwebrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build b/third_party/libwebrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
index a5cf9234d1..ddce223c19 100644
--- a/third_party/libwebrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
+++ b/third_party/libwebrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
@@ -93,11 +93,9 @@ if CONFIG["OS_TARGET"] == "Linux":
DEFINES["USE_NSS_CERTS"] = "1"
DEFINES["USE_OZONE"] = "1"
DEFINES["USE_UDEV"] = True
- DEFINES["USE_X11"] = "1"
DEFINES["WEBRTC_LINUX"] = True
DEFINES["WEBRTC_POSIX"] = True
DEFINES["WEBRTC_USE_PIPEWIRE"] = True
- DEFINES["WEBRTC_USE_X11"] = True
DEFINES["_FILE_OFFSET_BITS"] = "64"
DEFINES["_GNU_SOURCE"] = True
DEFINES["_LARGEFILE64_SOURCE"] = True
@@ -115,14 +113,6 @@ if CONFIG["OS_TARGET"] == "Linux":
OS_LIBS += [
"dl",
"rt",
- "X11",
- "Xcomposite",
- "Xdamage",
- "Xext",
- "Xfixes",
- "Xrandr",
- "Xrender",
- "Xtst"
]
SOURCES += [
@@ -130,22 +120,26 @@ if CONFIG["OS_TARGET"] == "Linux":
]
UNIFIED_SOURCES += [
- "/third_party/libwebrtc/modules/desktop_capture/linux/mouse_cursor_monitor_x11.cc",
"/third_party/libwebrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/screen_capturer_x11.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/shared_x_display.cc",
"/third_party/libwebrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/window_capturer_x11.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/window_finder_x11.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/window_list_utils.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/x_atom_cache.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/x_error_trap.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/x_server_pixel_buffer.cc",
- "/third_party/libwebrtc/modules/desktop_capture/linux/x_window_property.cc",
"/third_party/libwebrtc/modules/desktop_capture/mouse_cursor_monitor_linux.cc",
"/third_party/libwebrtc/modules/desktop_capture/screen_capturer_linux.cc",
"/third_party/libwebrtc/modules/desktop_capture/window_capturer_linux.cc"
]
+
+ if CONFIG["MOZ_X11"]:
+ UNIFIED_SOURCES += [
+ "/third_party/libwebrtc/modules/desktop_capture/linux/mouse_cursor_monitor_x11.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/screen_capturer_x11.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/shared_x_display.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/window_capturer_x11.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/window_finder_x11.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/window_list_utils.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/x_atom_cache.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/x_error_trap.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/x_server_pixel_buffer.cc",
+ "/third_party/libwebrtc/modules/desktop_capture/linux/x_window_property.cc"
+ ]
if CONFIG["OS_TARGET"] == "OpenBSD":
diff --git a/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build b/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build
index 4cf85ddfa7..e5873468ca 100644
--- a/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build
+++ b/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn/moz.build
@@ -53,10 +53,8 @@ if CONFIG["OS_TARGET"] == "Linux":
DEFINES["USE_NSS_CERTS"] = "1"
DEFINES["USE_OZONE"] = "1"
DEFINES["USE_UDEV"] = True
- DEFINES["USE_X11"] = "1"
DEFINES["WEBRTC_LINUX"] = True
DEFINES["WEBRTC_POSIX"] = True
- DEFINES["WEBRTC_USE_X11"] = True
DEFINES["_FILE_OFFSET_BITS"] = "64"
DEFINES["_GNU_SOURCE"] = True
DEFINES["_LARGEFILE64_SOURCE"] = True
@@ -67,14 +65,6 @@ if CONFIG["OS_TARGET"] == "Linux":
OS_LIBS += [
"dl",
"rt",
- "X11",
- "Xcomposite",
- "Xdamage",
- "Xext",
- "Xfixes",
- "Xrandr",
- "Xrender",
- "Xtst"
]
if CONFIG["OS_TARGET"] == "OpenBSD":
diff --git a/third_party/libwebrtc/webrtc_gn/moz.build b/third_party/libwebrtc/webrtc_gn/moz.build
index 625bd0b5dd..2b0e2276c6 100644
--- a/third_party/libwebrtc/webrtc_gn/moz.build
+++ b/third_party/libwebrtc/webrtc_gn/moz.build
@@ -71,7 +71,6 @@ if CONFIG["OS_TARGET"] == "Linux":
DEFINES["USE_NSS_CERTS"] = "1"
DEFINES["USE_OZONE"] = "1"
DEFINES["USE_UDEV"] = True
- DEFINES["USE_X11"] = "1"
DEFINES["WEBRTC_LINUX"] = True
DEFINES["WEBRTC_POSIX"] = True
DEFINES["_FILE_OFFSET_BITS"] = "64"
@@ -85,14 +84,6 @@ if CONFIG["OS_TARGET"] == "Linux":
"dl",
"m",
"rt",
- "X11",
- "Xcomposite",
- "Xdamage",
- "Xext",
- "Xfixes",
- "Xrandr",
- "Xrender",
- "Xtst"
]
if CONFIG["OS_TARGET"] == "OpenBSD":
diff --git a/toolkit/components/remote/moz.build b/toolkit/components/remote/moz.build
index d3bab6cf9a..656b32c7fa 100644
--- a/toolkit/components/remote/moz.build
+++ b/toolkit/components/remote/moz.build
@@ -26,7 +26,7 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
"nsUnixRemoteServer.h",
"RemoteUtils.h",
]
- else:
+ elif CONFIG["MOZ_X11"]:
SOURCES += [
"nsGTKRemoteServer.cpp",
"nsXRemoteClient.cpp",
diff --git a/toolkit/components/remote/nsRemoteService.cpp b/toolkit/components/remote/nsRemoteService.cpp
index b2499d8191..1d1dc42e9f 100644
--- a/toolkit/components/remote/nsRemoteService.cpp
+++ b/toolkit/components/remote/nsRemoteService.cpp
@@ -12,12 +12,14 @@
#ifdef MOZ_WIDGET_GTK
# include "mozilla/WidgetUtilsGtk.h"
-# include "nsGTKRemoteServer.h"
-# ifdef MOZ_ENABLE_DBUS
+# if defined(MOZ_ENABLE_DBUS)
# include "nsDBusRemoteServer.h"
# include "nsDBusRemoteClient.h"
-# else
+# elif defined(MOZ_X11)
# include "nsXRemoteClient.h"
+# include "nsGTKRemoteServer.h"
+# else
+# include "nsRemoteClient.h"
# endif
#elif defined(XP_WIN)
# include "nsWinRemoteServer.h"
@@ -102,8 +104,10 @@ RemoteResult nsRemoteService::StartClient(const char* aDesktopStartupID) {
#ifdef MOZ_WIDGET_GTK
# if defined(MOZ_ENABLE_DBUS)
client = MakeUnique<nsDBusRemoteClient>();
-# else
+# elif defined(MOZ_X11)
client = MakeUnique<nsXRemoteClient>();
+# else
+ return REMOTE_NOT_FOUND;
# endif
#elif defined(XP_WIN)
client = MakeUnique<nsWinRemoteClient>();
@@ -146,8 +150,10 @@ void nsRemoteService::StartupServer() {
#ifdef MOZ_WIDGET_GTK
# if defined(MOZ_ENABLE_DBUS)
mRemoteServer = MakeUnique<nsDBusRemoteServer>();
-# else
+# elif defined(MOZ_X11)
mRemoteServer = MakeUnique<nsGTKRemoteServer>();
+# else
+ return;
# endif
#elif defined(XP_WIN)
mRemoteServer = MakeUnique<nsWinRemoteServer>();
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
index 539433a6ef..8599a3b838 100644
--- a/toolkit/moz.configure
+++ b/toolkit/moz.configure
@@ -286,7 +286,7 @@ def toolkit_choices(target):
elif target.os == "Android":
return ("cairo-android",)
else:
- return ("cairo-gtk3", "cairo-gtk3-wayland")
+ return ("cairo-gtk3",)
@depends(toolkit_choices)
@@ -338,23 +338,24 @@ def toolkit_gtk(toolkit):
# Wayland support
# ==============================================================
-wayland_headers = pkg_check_modules(
- "MOZ_WAYLAND",
- "gtk+-wayland-3.0 >= 3.14 xkbcommon >= 0.4.1 libdrm >= 2.4",
- allow_missing=depends(full_toolkit)(lambda t: t == "cairo-gtk3"),
- when=depends(full_toolkit)(lambda t: t in ("cairo-gtk3", "cairo-gtk3-wayland")),
+option(
+ "--with-wayland",
+ help="{Enable wayland support|Disable wayland support}",
)
-
-@depends(wayland_headers, toolkit_gtk, artifact_builds)
-def wayland_headers(wayland, toolkit_gtk, artifacts):
- if toolkit_gtk and artifacts:
+@depends("--with-wayland", toolkit_gtk, artifact_builds)
+def with_wayland(value, toolkit_gtk, artifacts):
+ if value and toolkit_gtk or artifacts:
return True
- return wayland
+wayland_headers = pkg_check_modules(
+ "MOZ_WAYLAND",
+ "gtk+-wayland-3.0 >= 3.14 xkbcommon >= 0.4.1 libdrm >= 2.4",
+ when=with_wayland,
+)
-set_config("MOZ_WAYLAND", depends_if(wayland_headers)(lambda _: True))
-set_define("MOZ_WAYLAND", depends_if(wayland_headers)(lambda _: True))
+set_config("MOZ_WAYLAND", True, when=with_wayland)
+set_define("MOZ_WAYLAND", True, when=with_wayland)
# GL Provider
# ==============================================================
@@ -376,7 +377,7 @@ def gl_provider_define(provider):
set_define("MOZ_GL_PROVIDER", gl_provider_define)
-@depends(gl_provider, wayland_headers, toolkit_gtk)
+@depends(gl_provider, with_wayland, toolkit_gtk)
def gl_default_provider(value, wayland, toolkit_gtk):
if value:
return value
@@ -1197,11 +1198,20 @@ set_define("MOZ_RAW", depends_if("--enable-raw")(lambda _: True))
# X11
# ==============================================================
-set_config("MOZ_X11", True, when=toolkit_gtk)
-set_define("MOZ_X11", True, when=toolkit_gtk)
+option(
+ "--with-x",
+ help="{Enable X11 support|Disable X11 support}",
+)
+
+@depends("--with-x", toolkit_gtk)
+def with_x(value, toolkit_gtk):
+ if value and toolkit_gtk:
+ return True
+set_config("MOZ_X11", True, when=with_x)
+set_define("MOZ_X11", True, when=with_x)
-@depends(webrtc, when=toolkit_gtk)
+@depends(webrtc, when=with_x)
def x11_libs(webrtc):
libs = [
"x11",
@@ -1225,8 +1235,8 @@ def x11_libs(webrtc):
return libs
-pkg_check_modules("MOZ_X11", x11_libs, when=toolkit_gtk)
-pkg_check_modules("MOZ_X11_SM", ["ice", "sm"], cflags_only=True, when=toolkit_gtk)
+pkg_check_modules("MOZ_X11", x11_libs, when=with_x)
+pkg_check_modules("MOZ_X11_SM", ["ice", "sm"], cflags_only=True, when=with_x)
# ASan Reporter Addon
diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
index b1e2b58621..576ec91669 100644
--- a/toolkit/xre/moz.build
+++ b/toolkit/xre/moz.build
@@ -156,7 +156,7 @@ SOURCES += [
"ProfileReset.cpp",
]
-if CONFIG["MOZ_X11"]:
+if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]:
UNIFIED_SOURCES += [
"glxtest.cpp",
]
@@ -187,7 +187,7 @@ include("/ipc/chromium/chromium-config.mozbuild")
FINAL_LIBRARY = "xul"
-if CONFIG["MOZ_X11"]:
+if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]:
DEFINES["USE_GLX_TEST"] = True
for var in (
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
index ce001e9382..80d1694a11 100644
--- a/toolkit/xre/nsAppRunner.cpp
+++ b/toolkit/xre/nsAppRunner.cpp
@@ -4116,6 +4116,7 @@ static void PR_CALLBACK ReadAheadDlls_ThreadStart(void* arg) {
#if defined(MOZ_WAYLAND)
bool IsWaylandEnabled() {
+# ifdef MOZ_X11
const char* waylandDisplay = PR_GetEnv("WAYLAND_DISPLAY");
if (!waylandDisplay) {
return false;
@@ -4145,6 +4146,9 @@ bool IsWaylandEnabled() {
"Running Wayland backend on Gtk3 < 3.22. Expect issues/glitches");
}
return enabled;
+# else
+ return true;
+# endif
}
#endif
diff --git a/toolkit/xre/nsGDKErrorHandler.cpp b/toolkit/xre/nsGDKErrorHandler.cpp
index 421abdf12f..c7803cf973 100644
--- a/toolkit/xre/nsGDKErrorHandler.cpp
+++ b/toolkit/xre/nsGDKErrorHandler.cpp
@@ -6,14 +6,18 @@
#include "nsGDKErrorHandler.h"
#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
+#ifdef MOZ_X11
+# include <gdk/gdkx.h>
+#endif
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include "nsDebug.h"
#include "nsString.h"
-#include "nsX11ErrorHandler.h"
+#ifdef MOZ_X11
+# include "nsX11ErrorHandler.h"
+#endif
#include "prenv.h"
@@ -26,6 +30,7 @@
*/
static void GdkErrorHandler(const gchar* log_domain, GLogLevelFlags log_level,
const gchar* message, gpointer user_data) {
+#ifdef MOZ_X11
if (strstr(message, "X Window System error")) {
XErrorEvent event;
nsDependentCString buffer(message);
@@ -96,6 +101,10 @@ static void GdkErrorHandler(const gchar* log_domain, GLogLevelFlags log_level,
g_log_default_handler(log_domain, log_level, message, user_data);
MOZ_CRASH_UNSAFE(message);
}
+#else
+ g_log_default_handler(log_domain, log_level, message, user_data);
+ MOZ_CRASH_UNSAFE(message);
+#endif
}
void InstallGdkErrorHandler() {
@@ -103,7 +112,9 @@ void InstallGdkErrorHandler() {
(GLogLevelFlags)(G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL |
G_LOG_FLAG_RECURSION),
GdkErrorHandler, nullptr);
+#ifdef MOZ_X11
if (PR_GetEnv("MOZ_X_SYNC")) {
XSynchronize(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), X11True);
}
+#endif
}
diff --git a/widget/CompositorWidget.h b/widget/CompositorWidget.h
index 4d38bc6220..09e19945a9 100644
--- a/widget/CompositorWidget.h
+++ b/widget/CompositorWidget.h
@@ -62,7 +62,7 @@ class CompositorWidgetDelegate {
};
// Platforms that support out-of-process widgets.
-#if defined(XP_WIN) || defined(MOZ_X11) || defined(MOZ_WIDGET_ANDROID)
+#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
// CompositorWidgetParent should implement CompositorWidget and
// PCompositorWidgetParent.
class CompositorWidgetParent;
diff --git a/widget/gtk/GtkCompositorWidget.cpp b/widget/gtk/GtkCompositorWidget.cpp
index 89a8248bc0..2454006d0d 100644
--- a/widget/gtk/GtkCompositorWidget.cpp
+++ b/widget/gtk/GtkCompositorWidget.cpp
@@ -49,9 +49,9 @@ GtkCompositorWidget::GtkCompositorWidget(
auto size = mClientSize.Lock();
*size = aInitData.InitialClientSize();
- LOG("GtkCompositorWidget::GtkCompositorWidget() [%p] mXWindow %p "
+ LOG("GtkCompositorWidget::GtkCompositorWidget() [%p] aWindow %p "
"mIsRenderingSuspended %d\n",
- (void*)mWidget.get(), (void*)mXWindow, !!mIsRenderingSuspended);
+ (void*)mWidget.get(), (void*)aWindow, !!mIsRenderingSuspended);
}
GtkCompositorWidget::~GtkCompositorWidget() {
diff --git a/widget/gtk/MozContainer.cpp b/widget/gtk/MozContainer.cpp
index 95832dc03d..0d6585c2d4 100644
--- a/widget/gtk/MozContainer.cpp
+++ b/widget/gtk/MozContainer.cpp
@@ -9,7 +9,6 @@
#include <glib.h>
#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
#include <stdio.h>
#include "mozilla/WidgetUtilsGtk.h"
diff --git a/widget/gtk/TaskbarProgress.cpp b/widget/gtk/TaskbarProgress.cpp
index 2aad109eab..396f39b5e7 100644
--- a/widget/gtk/TaskbarProgress.cpp
+++ b/widget/gtk/TaskbarProgress.cpp
@@ -33,7 +33,6 @@ TaskbarProgress::~TaskbarProgress() {
NS_IMETHODIMP
TaskbarProgress::SetProgressState(nsTaskbarProgressState aState,
uint64_t aCurrentValue, uint64_t aMaxValue) {
-#ifdef MOZ_X11
NS_ENSURE_ARG_RANGE(aState, 0, STATE_PAUSED);
if (aState == STATE_NO_PROGRESS || aState == STATE_INDETERMINATE) {
@@ -72,7 +71,6 @@ TaskbarProgress::SetProgressState(nsTaskbarProgressState aState,
("GtkTaskbarProgress::SetProgressState progress: %lu", progress));
mPrimaryWindow->SetProgress(progress);
-#endif
return NS_OK;
}
diff --git a/widget/gtk/WindowSurfaceProvider.cpp b/widget/gtk/WindowSurfaceProvider.cpp
index 403af8e445..94ba1be0ff 100644
--- a/widget/gtk/WindowSurfaceProvider.cpp
+++ b/widget/gtk/WindowSurfaceProvider.cpp
@@ -10,6 +10,7 @@
#include "mozilla/gfx/Logging.h"
#include "mozilla/layers/LayersTypes.h"
#include "nsWindow.h"
+#include "WidgetUtilsGtk.h"
#ifdef MOZ_WAYLAND
# include "mozilla/StaticPrefs_widget.h"
diff --git a/widget/gtk/components.conf b/widget/gtk/components.conf
index 38c07bd812..8f2c10894a 100644
--- a/widget/gtk/components.conf
+++ b/widget/gtk/components.conf
@@ -76,53 +76,49 @@ Classes = [
'headers': ['/widget/gtk/nsApplicationChooser.h'],
'processes': ProcessSelector.MAIN_PROCESS_ONLY,
},
+ {
+ 'name': 'GfxInfo',
+ 'cid': '{d755a760-9f27-11df-0800-200c9a664242}',
+ 'contract_ids': ['@mozilla.org/gfx/info;1'],
+ 'type': 'mozilla::widget::GfxInfo',
+ 'headers': ['/widget/gtk/GfxInfo.h'],
+ 'init_method': 'Init',
+ 'processes': ProcessSelector.ALLOW_IN_GPU_PROCESS,
+ },
+ {
+ 'js_name': 'clipboard',
+ 'cid': '{8b5314ba-db01-11d2-96ce-0060b0fb9956}',
+ 'contract_ids': ['@mozilla.org/widget/clipboard;1'],
+ 'interfaces': ['nsIClipboard'],
+ 'type': 'nsIClipboard',
+ 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
+ 'overridable': True,
+ },
+ {
+ 'cid': '{77221d5a-1dd2-11b2-8c69-c710f15d2ed5}',
+ 'contract_ids': ['@mozilla.org/widget/clipboardhelper;1'],
+ 'type': 'nsClipboardHelper',
+ 'headers': ['/widget/nsClipboardHelper.h'],
+ },
+ {
+ 'cid': '{8b5314bb-db01-11d2-96ce-0060b0fb9956}',
+ 'contract_ids': ['@mozilla.org/widget/dragservice;1'],
+ 'singleton': True,
+ 'type': 'nsDragService',
+ 'headers': ['/widget/gtk/nsDragService.h'],
+ 'constructor': 'nsDragService::GetInstance',
+ 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
+ },
+ {
+ 'cid': '{6987230e-0098-4e78-bc5f-1493ee7519fa}',
+ 'contract_ids': ['@mozilla.org/widget/useridleservice;1'],
+ 'singleton': True,
+ 'type': 'nsUserIdleService',
+ 'headers': ['/widget/gtk/nsUserIdleServiceGTK.h'],
+ 'constructor': 'nsUserIdleServiceGTK::GetInstance',
+ },
]
-if defined('MOZ_X11'):
- Classes += [
- {
- 'js_name': 'clipboard',
- 'cid': '{8b5314ba-db01-11d2-96ce-0060b0fb9956}',
- 'contract_ids': ['@mozilla.org/widget/clipboard;1'],
- 'interfaces': ['nsIClipboard'],
- 'type': 'nsIClipboard',
- 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
- 'overridable': True,
- },
- {
- 'cid': '{77221d5a-1dd2-11b2-8c69-c710f15d2ed5}',
- 'contract_ids': ['@mozilla.org/widget/clipboardhelper;1'],
- 'type': 'nsClipboardHelper',
- 'headers': ['/widget/nsClipboardHelper.h'],
- },
- {
- 'cid': '{8b5314bb-db01-11d2-96ce-0060b0fb9956}',
- 'contract_ids': ['@mozilla.org/widget/dragservice;1'],
- 'singleton': True,
- 'type': 'nsDragService',
- 'headers': ['/widget/gtk/nsDragService.h'],
- 'constructor': 'nsDragService::GetInstance',
- 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
- },
- {
- 'name': 'GfxInfo',
- 'cid': '{d755a760-9f27-11df-0800-200c9a664242}',
- 'contract_ids': ['@mozilla.org/gfx/info;1'],
- 'type': 'mozilla::widget::GfxInfo',
- 'headers': ['/widget/gtk/GfxInfo.h'],
- 'init_method': 'Init',
- 'processes': ProcessSelector.ALLOW_IN_GPU_PROCESS,
- },
- {
- 'cid': '{6987230e-0098-4e78-bc5f-1493ee7519fa}',
- 'contract_ids': ['@mozilla.org/widget/useridleservice;1'],
- 'singleton': True,
- 'type': 'nsUserIdleService',
- 'headers': ['/widget/gtk/nsUserIdleServiceGTK.h'],
- 'constructor': 'nsUserIdleServiceGTK::GetInstance',
- },
- ]
-
if defined('NS_PRINTING'):
Classes += [
{
diff --git a/widget/x11/keysym2ucs.c b/widget/gtk/keysym2ucs.c
similarity index 100%
rename from widget/x11/keysym2ucs.c
rename to widget/gtk/keysym2ucs.c
diff --git a/widget/x11/keysym2ucs.h b/widget/gtk/keysym2ucs.h
similarity index 100%
rename from widget/x11/keysym2ucs.h
rename to widget/gtk/keysym2ucs.h
diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
index 1d82fc36c2..98af9fca3d 100644
--- a/widget/gtk/moz.build
+++ b/widget/gtk/moz.build
@@ -34,15 +34,23 @@ EXPORTS += [
EXPORTS.mozilla += ["WidgetUtilsGtk.h"]
EXPORTS.mozilla.widget += [
+ "CompositorWidgetChild.h",
+ "CompositorWidgetParent.h",
+ "GtkCompositorWidget.h",
+ "InProcessGtkCompositorWidget.h",
"WindowSurface.h",
"WindowSurfaceProvider.h",
]
UNIFIED_SOURCES += [
+ "CompositorWidgetChild.cpp",
+ "CompositorWidgetParent.cpp",
"GfxInfo.cpp",
"gtk3drawing.cpp",
"GtkCompositorWidget.cpp",
"IMContextWrapper.cpp",
+ "InProcessGtkCompositorWidget.cpp",
+ "keysym2ucs.c",
"MozContainer.cpp",
"MPRISServiceHandler.cpp",
"NativeKeyBindings.cpp",
@@ -58,6 +66,7 @@ UNIFIED_SOURCES += [
"nsLookAndFeel.cpp",
"nsSound.cpp",
"nsToolkit.cpp",
+ "nsUserIdleServiceGTK.cpp",
"nsWidgetFactory.cpp",
"ScreenHelperGTK.cpp",
"TaskbarProgress.cpp",
@@ -101,22 +110,12 @@ if CONFIG["MOZ_WAYLAND"]:
if CONFIG["MOZ_X11"]:
UNIFIED_SOURCES += [
- "CompositorWidgetChild.cpp",
- "CompositorWidgetParent.cpp",
- "InProcessGtkCompositorWidget.cpp",
"nsClipboardX11.cpp",
"nsShmImage.cpp",
- "nsUserIdleServiceGTK.cpp",
"WindowSurfaceX11.cpp",
"WindowSurfaceX11Image.cpp",
"WindowSurfaceX11SHM.cpp",
]
- EXPORTS.mozilla.widget += [
- "CompositorWidgetChild.h",
- "CompositorWidgetParent.h",
- "GtkCompositorWidget.h",
- "InProcessGtkCompositorWidget.h",
- ]
if CONFIG["NS_PRINTING"]:
UNIFIED_SOURCES += [
diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
index 677f9b3561..e375cab31f 100644
--- a/widget/gtk/mozgtk/mozgtk.c
+++ b/widget/gtk/mozgtk/mozgtk.c
@@ -6,16 +6,4 @@
#include "mozilla/Types.h"
-#include <X11/Xlib.h>
-// Bug 1271100
-// We need to trick system Cairo into not using the XShm extension due to
-// a race condition in it that results in frequent BadAccess errors. Cairo
-// relies upon XShmQueryExtension to initially detect if XShm is available.
-// So we define our own stub that always indicates XShm not being present.
-// mozgtk loads before libXext/libcairo and so this stub will take priority.
-// Our tree usage goes through xcb and remains unaffected by this.
-//
-// This is also used to force libxul to depend on the mozgtk library. If we
-// ever can remove this workaround for system Cairo, we'll need something
-// to replace it for that purpose.
-MOZ_EXPORT Bool XShmQueryExtension(Display* aDisplay) { return False; }
+MOZ_EXPORT void PleaseLinkWithMe() {}
diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
index 1a86468b4f..eee67ed3a9 100644
--- a/widget/gtk/mozwayland/mozwayland.c
+++ b/widget/gtk/mozwayland/mozwayland.c
@@ -8,7 +8,6 @@
#include <stdlib.h>
#include "mozilla/Types.h"
#include <gtk/gtk.h>
-#include <gtk/gtkx.h>
#include <gdk/gdkwayland.h>
union wl_argument;
diff --git a/widget/gtk/nsClipboard.cpp b/widget/gtk/nsClipboard.cpp
index 8fdd8e38dc..ea0eaae2de 100644
--- a/widget/gtk/nsClipboard.cpp
+++ b/widget/gtk/nsClipboard.cpp
@@ -9,7 +9,9 @@
#include "nsArrayUtils.h"
#include "nsClipboard.h"
-#include "nsClipboardX11.h"
+#if defined(MOZ_X11)
+# include "nsClipboardX11.h"
+#endif
#if defined(MOZ_WAYLAND)
# include "nsClipboardWayland.h"
# include "nsClipboardWaylandAsync.h"
@@ -37,7 +39,6 @@
#include "imgIContainer.h"
#include <gtk/gtk.h>
-#include <gtk/gtkx.h>
#include "mozilla/Encoding.h"
@@ -106,17 +107,21 @@ nsClipboard::~nsClipboard() {
NS_IMPL_ISUPPORTS(nsClipboard, nsIClipboard, nsIObserver)
nsresult nsClipboard::Init(void) {
+#if defined(MOZ_X11)
if (widget::GdkIsX11Display()) {
mContext = new nsRetrievalContextX11();
+ }
+#endif
#if defined(MOZ_WAYLAND)
- } else if (widget::GdkIsWaylandDisplay()) {
+ if (widget::GdkIsWaylandDisplay()) {
if (StaticPrefs::widget_wayland_async_clipboard_enabled_AtStartup()) {
mContext = new nsRetrievalContextWaylandAsync();
} else {
mContext = new nsRetrievalContextWayland();
}
+ }
#endif
- } else {
+ if (!mContext) {
NS_WARNING("Missing nsRetrievalContext for nsClipboard!");
return NS_OK;
}
diff --git a/widget/gtk/nsDragService.cpp b/widget/gtk/nsDragService.cpp
index ea57c4f3c0..5355fbe467 100644
--- a/widget/gtk/nsDragService.cpp
+++ b/widget/gtk/nsDragService.cpp
@@ -23,7 +23,6 @@
#include "prthread.h"
#include <dlfcn.h>
#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
#include "nsCRT.h"
#include "mozilla/BasicEvents.h"
#include "mozilla/Services.h"
@@ -34,7 +33,6 @@
#include "mozilla/WidgetUtilsGtk.h"
#include "GRefPtr.h"
-#include "gfxXlibSurface.h"
#include "gfxContext.h"
#include "nsImageToPixbuf.h"
#include "nsPresContext.h"
diff --git a/widget/gtk/nsGtkKeyUtils.cpp b/widget/gtk/nsGtkKeyUtils.cpp
index 5f971b721a..d948ae58bf 100644
--- a/widget/gtk/nsGtkKeyUtils.cpp
+++ b/widget/gtk/nsGtkKeyUtils.cpp
@@ -12,15 +12,16 @@
#include <gdk/gdkkeysyms.h>
#include <algorithm>
#include <gdk/gdk.h>
-#include <gdk/gdkx.h>
+#ifdef MOZ_X11
+# include <gdk/gdkx.h>
+# include <X11/XKBlib.h>
+# include "X11UndefineNone.h"
+#endif
#include <dlfcn.h>
#include <gdk/gdkkeysyms-compat.h>
-#include <X11/XKBlib.h>
-#include "X11UndefineNone.h"
#include "IMContextWrapper.h"
#include "WidgetUtils.h"
#include "WidgetUtilsGtk.h"
-#include "keysym2ucs.h"
#include "nsContentUtils.h"
#include "nsGtkUtils.h"
#include "nsIBidiKeyboard.h"
@@ -28,6 +29,7 @@
#include "nsReadableUtils.h"
#include "nsServiceManagerUtils.h"
#include "nsWindow.h"
+#include "keysym2ucs.h"
#include "mozilla/ArrayUtils.h"
#include "mozilla/MouseEvents.h"
@@ -55,7 +57,9 @@ namespace widget {
KeymapWrapper* KeymapWrapper::sInstance = nullptr;
guint KeymapWrapper::sLastRepeatableHardwareKeyCode = 0;
+#ifdef MOZ_X11
Time KeymapWrapper::sLastRepeatableKeyTime = 0;
+#endif
KeymapWrapper::RepeatState KeymapWrapper::sRepeatState =
KeymapWrapper::NOT_PRESSED;
@@ -354,9 +358,11 @@ KeymapWrapper::KeymapWrapper()
g_object_ref(mGdkKeymap);
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
InitXKBExtension();
}
+#endif
Init();
}
@@ -373,17 +379,18 @@ void KeymapWrapper::Init() {
mModifierKeys.Clear();
memset(mModifierMasks, 0, sizeof(mModifierMasks));
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
InitBySystemSettingsX11();
}
+ gdk_window_add_filter(nullptr, FilterEvents, this);
+#endif
#ifdef MOZ_WAYLAND
- else {
+ if (GdkIsWaylandDisplay()) {
InitBySystemSettingsWayland();
}
#endif
- gdk_window_add_filter(nullptr, FilterEvents, this);
-
MOZ_LOG(gKeyLog, LogLevel::Info,
("%p Init, CapsLock=0x%X, NumLock=0x%X, "
"ScrollLock=0x%X, Level3=0x%X, Level5=0x%X, "
@@ -395,6 +402,7 @@ void KeymapWrapper::Init() {
GetModifierMask(SUPER), GetModifierMask(HYPER)));
}
+#ifdef MOZ_X11
void KeymapWrapper::InitXKBExtension() {
PodZero(&mKeyboardState);
@@ -626,6 +634,7 @@ void KeymapWrapper::InitBySystemSettingsX11() {
XFreeModifiermap(xmodmap);
XFree(xkeymap);
}
+#endif
#ifdef MOZ_WAYLAND
void KeymapWrapper::SetModifierMask(xkb_keymap* aKeymap,
@@ -789,7 +798,9 @@ void KeymapWrapper::InitBySystemSettingsWayland() {
#endif
KeymapWrapper::~KeymapWrapper() {
+#ifdef MOZ_X11
gdk_window_remove_filter(nullptr, FilterEvents, this);
+#endif
if (mOnKeysChangedSignalHandle) {
g_signal_handler_disconnect(mGdkKeymap, mOnKeysChangedSignalHandle);
}
@@ -800,6 +811,7 @@ KeymapWrapper::~KeymapWrapper() {
MOZ_LOG(gKeyLog, LogLevel::Info, ("%p Destructor", this));
}
+#ifdef MOZ_X11
/* static */
GdkFilterReturn KeymapWrapper::FilterEvents(GdkXEvent* aXEvent,
GdkEvent* aGdkEvent,
@@ -913,6 +925,7 @@ GdkFilterReturn KeymapWrapper::FilterEvents(GdkXEvent* aXEvent,
return GDK_FILTER_CONTINUE;
}
+#endif
static void ResetBidiKeyboard() {
// Reset the bidi keyboard settings for the new GdkKeymap
@@ -1773,6 +1786,7 @@ void KeymapWrapper::InitKeyEvent(WidgetKeyboardEvent& aKeyEvent,
// state. It means if there're some pending modifier key press or
// key release events, the result isn't what we want.
guint modifierState = aGdkKeyEvent->state;
+#ifdef MOZ_X11
GdkDisplay* gdkDisplay = gdk_display_get_default();
if (aGdkKeyEvent->is_modifier && GdkIsX11Display(gdkDisplay)) {
Display* display = gdk_x11_display_get_xdisplay(gdkDisplay);
@@ -1790,6 +1804,7 @@ void KeymapWrapper::InitKeyEvent(WidgetKeyboardEvent& aKeyEvent,
}
}
}
+#endif
InitInputEvent(aKeyEvent, modifierState);
switch (aGdkKeyEvent->keyval) {
@@ -2036,6 +2051,7 @@ bool KeymapWrapper::IsLatinGroup(guint8 aGroup) {
return result;
}
+#ifdef MOZ_X11
bool KeymapWrapper::IsAutoRepeatableKey(guint aHardwareKeyCode) {
uint8_t indexOfArray = aHardwareKeyCode / 8;
MOZ_ASSERT(indexOfArray < ArrayLength(mKeyboardState.auto_repeats),
@@ -2043,6 +2059,7 @@ bool KeymapWrapper::IsAutoRepeatableKey(guint aHardwareKeyCode) {
char bitMask = 1 << (aHardwareKeyCode % 8);
return (mKeyboardState.auto_repeats[indexOfArray] & bitMask) != 0;
}
+#endif
/* static */
bool KeymapWrapper::IsBasicLatinLetterOrNumeral(uint32_t aCharCode) {
diff --git a/widget/gtk/nsGtkKeyUtils.h b/widget/gtk/nsGtkKeyUtils.h
index 18188c9b00..59a61752bb 100644
--- a/widget/gtk/nsGtkKeyUtils.h
+++ b/widget/gtk/nsGtkKeyUtils.h
@@ -12,8 +12,10 @@
#include "nsIWidget.h"
#include "nsTArray.h"
-#include <gdk/gdk.h>
-#include <X11/XKBlib.h>
+#ifdef MOZ_X11
+# include <gdk/gdk.h>
+# include <X11/XKBlib.h>
+#endif
#ifdef MOZ_WAYLAND
# include <gdk/gdkwayland.h>
# include <xkbcommon/xkbcommon.h>
@@ -248,8 +250,10 @@ class KeymapWrapper {
* Initializing methods.
*/
void Init();
+#ifdef MOZ_X11
void InitXKBExtension();
void InitBySystemSettingsX11();
+#endif
#ifdef MOZ_WAYLAND
void InitBySystemSettingsWayland();
#endif
@@ -325,6 +329,7 @@ class KeymapWrapper {
*/
int mXKBBaseEventCode;
+#ifdef MOZ_X11
/**
* Only auto_repeats[] stores valid value. If you need to use other
* members, you need to listen notification events for them.
@@ -332,6 +337,7 @@ class KeymapWrapper {
* InitXKBExtension().
*/
XKeyboardState mKeyboardState;
+#endif
/**
* Pointer of the singleton instance.
@@ -342,15 +348,19 @@ class KeymapWrapper {
* Auto key repeat management.
*/
static guint sLastRepeatableHardwareKeyCode;
+#ifdef MOZ_X11
static Time sLastRepeatableKeyTime;
+#endif
enum RepeatState { NOT_PRESSED, FIRST_PRESS, REPEATING };
static RepeatState sRepeatState;
+#ifdef MOZ_X11
/**
* IsAutoRepeatableKey() returns true if the key supports auto repeat.
* Otherwise, false.
*/
bool IsAutoRepeatableKey(guint aHardwareKeyCode);
+#endif
/**
* Signal handlers.
diff --git a/widget/gtk/nsPrintDialogGTK.cpp b/widget/gtk/nsPrintDialogGTK.cpp
index 8fb56543b7..9a562eb124 100644
--- a/widget/gtk/nsPrintDialogGTK.cpp
+++ b/widget/gtk/nsPrintDialogGTK.cpp
@@ -5,6 +5,9 @@
#include <gtk/gtk.h>
#include <gtk/gtkunixprint.h>
+#ifdef MOZ_X11
+# include <gdk/gdkx.h>
+#endif
#include <stdlib.h>
#include "mozilla/ArrayUtils.h"
@@ -27,8 +30,6 @@
#include "WidgetUtilsGtk.h"
#include "nsIObserverService.h"
-// for gdk_x11_window_get_xid
-#include <gdk/gdkx.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -527,6 +528,7 @@ static void wayland_window_handle_exported(GdkWindow* window,
static gboolean window_export_handle(GtkWindow* window,
GtkWindowHandleExported callback,
gpointer user_data) {
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(window));
char* handle_str;
@@ -537,8 +539,9 @@ static gboolean window_export_handle(GtkWindow* window,
g_free(handle_str);
return true;
}
+#endif
#ifdef MOZ_WAYLAND
- else if (GdkIsWaylandDisplay()) {
+ if (GdkIsWaylandDisplay()) {
GdkWindow* gdk_window = gtk_widget_get_window(GTK_WIDGET(window));
WaylandWindowHandleExportedData* data;
diff --git a/widget/gtk/nsUserIdleServiceGTK.cpp b/widget/gtk/nsUserIdleServiceGTK.cpp
index 884d52a6ca..4b2b04f09a 100644
--- a/widget/gtk/nsUserIdleServiceGTK.cpp
+++ b/widget/gtk/nsUserIdleServiceGTK.cpp
@@ -17,6 +17,8 @@ using mozilla::LogLevel;
static mozilla::LazyLogModule sIdleLog("nsIUserIdleService");
+#ifdef MOZ_X11
+
typedef bool (*_XScreenSaverQueryExtension_fn)(Display* dpy, int* event_base,
int* error_base);
@@ -25,16 +27,20 @@ typedef XScreenSaverInfo* (*_XScreenSaverAllocInfo_fn)(void);
typedef void (*_XScreenSaverQueryInfo_fn)(Display* dpy, Drawable drw,
XScreenSaverInfo* info);
-static bool sInitialized = false;
static _XScreenSaverQueryExtension_fn _XSSQueryExtension = nullptr;
static _XScreenSaverAllocInfo_fn _XSSAllocInfo = nullptr;
static _XScreenSaverQueryInfo_fn _XSSQueryInfo = nullptr;
+#endif
+
+static bool sInitialized = false;
+
static void Initialize() {
if (!mozilla::widget::GdkIsX11Display()) {
return;
}
+#ifdef MOZ_X11
// This will leak - See comments in ~nsUserIdleServiceGTK().
PRLibrary* xsslib = PR_LoadLibrary("libXss.so.1");
if (!xsslib) // ouch.
@@ -59,14 +65,15 @@ static void Initialize() {
MOZ_LOG(sIdleLog, LogLevel::Warning, ("Failed to get XSSQueryInfo!\n"));
sInitialized = true;
+#endif
}
-nsUserIdleServiceGTK::nsUserIdleServiceGTK() : mXssInfo(nullptr) {
- Initialize();
-}
+nsUserIdleServiceGTK::nsUserIdleServiceGTK() { Initialize(); }
nsUserIdleServiceGTK::~nsUserIdleServiceGTK() {
+#ifdef MOZ_X11
if (mXssInfo) XFree(mXssInfo);
+#endif
// It is not safe to unload libXScrnSaver until each display is closed because
// the library registers callbacks through XESetCloseDisplay (Bug 397607).
@@ -84,6 +91,7 @@ bool nsUserIdleServiceGTK::PollIdleTime(uint32_t* aIdleTime) {
// For some reason, we could not find xscreensaver.
return false;
}
+#ifdef MOZ_X11
// Ask xscreensaver about idle time:
*aIdleTime = 0;
@@ -109,6 +117,7 @@ bool nsUserIdleServiceGTK::PollIdleTime(uint32_t* aIdleTime) {
}
// If we get here, we couldn't get to XScreenSaver:
MOZ_LOG(sIdleLog, LogLevel::Warning, ("XSSQueryExtension returned false!\n"));
+#endif
return false;
}
diff --git a/widget/gtk/nsUserIdleServiceGTK.h b/widget/gtk/nsUserIdleServiceGTK.h
index 9b9ba31846..f089f3b87d 100644
--- a/widget/gtk/nsUserIdleServiceGTK.h
+++ b/widget/gtk/nsUserIdleServiceGTK.h
@@ -9,9 +9,11 @@
#define nsUserIdleServiceGTK_h__
#include "nsUserIdleService.h"
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <gdk/gdkx.h>
+
+#ifdef MOZ_X11
+# include <X11/Xlib.h>
+# include <X11/Xutil.h>
+# include <gdk/gdkx.h>
typedef struct {
Window window; // Screen saver window
@@ -21,6 +23,7 @@ typedef struct {
unsigned long idle; // milliseconds idle
unsigned long event_mask; // event stuff
} XScreenSaverInfo;
+#endif
class nsUserIdleServiceGTK : public nsUserIdleService {
public:
@@ -40,7 +43,9 @@ class nsUserIdleServiceGTK : public nsUserIdleService {
private:
~nsUserIdleServiceGTK();
- XScreenSaverInfo* mXssInfo;
+#ifdef MOZ_X11
+ XScreenSaverInfo* mXssInfo = nullptr;
+#endif
protected:
nsUserIdleServiceGTK();
diff --git a/widget/gtk/nsWidgetFactory.cpp b/widget/gtk/nsWidgetFactory.cpp
index d649c7e0bf..70b47d5124 100644
--- a/widget/gtk/nsWidgetFactory.cpp
+++ b/widget/gtk/nsWidgetFactory.cpp
@@ -20,9 +20,7 @@
#include "nsHTMLFormatConverter.h"
#include "HeadlessClipboard.h"
#include "IMContextWrapper.h"
-#ifdef MOZ_X11
-# include "nsClipboard.h"
-#endif
+#include "nsClipboard.h"
#include "TaskbarProgress.h"
#include "nsFilePicker.h"
#include "nsSound.h"
@@ -36,7 +34,6 @@
using namespace mozilla;
using namespace mozilla::widget;
-#ifdef MOZ_X11
NS_IMPL_COMPONENT_FACTORY(nsIClipboard) {
nsCOMPtr<nsIClipboard> inst;
if (gfxPlatform::IsHeadless()) {
@@ -51,7 +48,6 @@ NS_IMPL_COMPONENT_FACTORY(nsIClipboard) {
return inst.forget().downcast<nsISupports>();
}
-#endif
nsresult nsWidgetGtk2ModuleCtor() { return nsAppShellInit(); }
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
index 59e01f0fea..12bdda1cd4 100644
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -58,7 +58,6 @@
#include "mozilla/UniquePtrExtensions.h"
#include "mozilla/WidgetUtils.h"
#include "mozilla/WritingModes.h"
-#include "mozilla/X11Util.h"
#include "mozilla/XREAppData.h"
#include "NativeKeyBindings.h"
#include "nsAppDirectoryServiceDefs.h"
@@ -90,7 +89,6 @@
#include "ScreenHelperGTK.h"
#include "SystemTimeConverter.h"
#include "WidgetUtilsGtk.h"
-#include "mozilla/X11Util.h"
#ifdef ACCESSIBILITY
# include "mozilla/a11y/LocalAccessible.h"
@@ -108,6 +106,9 @@
# include "GLContextEGL.h" // for GLContextEGL::FindVisual()
# include "WindowSurfaceX11Image.h"
# include "WindowSurfaceX11SHM.h"
+# include "mozilla/X11Util.h"
+using mozilla::gl::GLContextEGL;
+using mozilla::gl::GLContextGLX;
#endif
#ifdef MOZ_WAYLAND
# include "nsIClipboard.h"
@@ -118,8 +119,6 @@ using namespace mozilla;
using namespace mozilla::gfx;
using namespace mozilla::layers;
using namespace mozilla::widget;
-using mozilla::gl::GLContextEGL;
-using mozilla::gl::GLContextGLX;
// Don't put more than this many rects in the dirty region, just fluff
// out to the bounding-box if there are more
@@ -267,15 +266,18 @@ static nsresult initialize_prefs(void);
static guint32 sLastUserInputTime = GDK_CURRENT_TIME;
static guint32 sRetryGrabTime;
+#ifdef MOZ_X11
static SystemTimeConverter<guint32>& TimeConverter() {
static SystemTimeConverter<guint32> sTimeConverterSingleton;
return sTimeConverterSingleton;
}
+#endif
bool nsWindow::sTransparentMainWindow = false;
namespace mozilla {
+#ifdef MOZ_X11
class CurrentX11TimeGetter {
public:
explicit CurrentX11TimeGetter(GdkWindow* aWindow)
@@ -323,6 +325,7 @@ class CurrentX11TimeGetter {
GdkWindow* mWindow;
TimeStamp mAsyncUpdateStart;
};
+#endif
} // namespace mozilla
@@ -2510,6 +2513,7 @@ void nsWindow::SetSizeMode(nsSizeMode aMode) {
mSizeState = mSizeMode;
}
+#ifdef MOZ_X11
static bool GetWindowManagerName(GdkWindow* gdk_window, nsACString& wmName) {
if (!GdkIsX11Display()) {
return false;
@@ -2579,10 +2583,12 @@ static bool GetWindowManagerName(GdkWindow* gdk_window, nsACString& wmName) {
wmName = reinterpret_cast<const char*>(prop_return);
return true;
}
+#endif
#define kDesktopMutterSchema "org.gnome.mutter"
#define kDesktopDynamicWorkspacesKey "dynamic-workspaces"
+#ifdef MOZ_X11
static bool WorkspaceManagementDisabled(GdkWindow* gdk_window) {
if (Preferences::GetBool("widget.disable-workspace-management", false)) {
return true;
@@ -2627,8 +2633,10 @@ static bool WorkspaceManagementDisabled(GdkWindow* gdk_window) {
return false;
}
+#endif
void nsWindow::GetWorkspaceID(nsAString& workspaceID) {
+#ifdef MOZ_X11
workspaceID.Truncate();
if (!GdkIsX11Display() || !mShell) {
@@ -2669,9 +2677,11 @@ void nsWindow::GetWorkspaceID(nsAString& workspaceID) {
LOG(" got workspace ID %d", (int32_t)wm_desktop[0]);
workspaceID.AppendInt((int32_t)wm_desktop[0]);
g_free(wm_desktop);
+#endif
}
void nsWindow::MoveToWorkspace(const nsAString& workspaceIDStr) {
+#ifdef MOZ_X11
nsresult rv = NS_OK;
int32_t workspaceID = workspaceIDStr.ToInteger(&rv);
@@ -2716,6 +2726,7 @@ void nsWindow::MoveToWorkspace(const nsAString& workspaceIDStr) {
XFlush(xdisplay);
LOG(" moved to workspace");
+#endif
}
using SetUserTimeFunc = void (*)(GdkWindow*, guint32);
@@ -2755,10 +2766,7 @@ guint32 nsWindow::GetLastUserInputTime() {
// WM_DELETE_WINDOW delete events, but not usually mouse motion nor
// button and key releases. Therefore use the most recent of
// gdk_x11_display_get_user_time and the last time that we have seen.
- GdkDisplay* gdkDisplay = gdk_display_get_default();
- guint32 timestamp = GdkIsX11Display(gdkDisplay)
- ? gdk_x11_display_get_user_time(gdkDisplay)
- : gtk_get_current_event_time();
+ guint32 timestamp = gtk_get_current_event_time();
if (sLastUserInputTime != GDK_CURRENT_TIME &&
TimestampIsNewerThan(sLastUserInputTime, timestamp)) {
@@ -3013,6 +3021,7 @@ void nsWindow::UpdateClientOffsetFromFrameExtents() {
return;
}
+#ifdef MOZ_X11
GdkAtom cardinal_atom = gdk_x11_xatom_to_atom(XA_CARDINAL);
GdkAtom type_returned;
@@ -3038,6 +3047,7 @@ void nsWindow::UpdateClientOffsetFromFrameExtents() {
mClientOffset = nsIntPoint(left, top);
}
+#endif
// Send a WindowMoved notification. This ensures that BrowserParent
// picks up the new client offset and sends it to the child process
@@ -3063,9 +3073,11 @@ gboolean nsWindow::OnPropertyNotifyEvent(GtkWidget* aWidget,
if (!mGdkWindow) {
return FALSE;
}
+#ifdef MOZ_X11
if (GetCurrentTimeGetter()->PropertyNotifyHandler(aWidget, aEvent)) {
return TRUE;
}
+#endif
return FALSE;
}
@@ -3203,9 +3215,11 @@ void* nsWindow::GetNativeData(uint32_t aDataType) {
return GetToplevelWidget();
case NS_NATIVE_WINDOW_WEBRTC_DEVICE_ID:
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
return (void*)GDK_WINDOW_XID(gdk_window_get_toplevel(mGdkWindow));
}
+#endif
NS_WARNING(
"nsWindow::GetNativeData(): NS_NATIVE_WINDOW_WEBRTC_DEVICE_ID is not "
"handled on Wayland!");
@@ -3226,11 +3240,13 @@ void* nsWindow::GetNativeData(uint32_t aDataType) {
return nullptr;
case NS_NATIVE_EGL_WINDOW: {
void* eglWindow = nullptr;
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
eglWindow = mGdkWindow ? (void*)GDK_WINDOW_XID(mGdkWindow) : nullptr;
}
+#endif
#ifdef MOZ_WAYLAND
- else {
+ if (GdkIsWaylandDisplay()) {
eglWindow = moz_container_wayland_get_egl_window(
mContainer, FractionalScaleFactor());
}
@@ -3520,8 +3536,6 @@ gboolean nsWindow::OnExposeEvent(cairo_t* cr) {
nsIWidgetListener* listener = GetListener();
if (!listener) return FALSE;
- LOG("received expose event %p 0x%lx (rects follow):\n", mGdkWindow,
- GdkIsX11Display() ? gdk_x11_window_get_xid(mGdkWindow) : 0);
LayoutDeviceIntRegion exposeRegion;
if (!ExtractExposeRegion(exposeRegion, cr)) {
return FALSE;
@@ -4068,6 +4082,7 @@ void nsWindow::OnMotionNotifyEvent(GdkEventMotion* aEvent) {
MOZ_ASSERT(gdk_window, "gdk_window_get_toplevel should not return null");
bool canDrag = true;
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
// Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=789054
// To avoid crashes disable double-click on WM without _NET_WM_MOVERESIZE.
@@ -4078,6 +4093,7 @@ void nsWindow::OnMotionNotifyEvent(GdkEventMotion* aEvent) {
canDrag = false;
}
}
+#endif
if (canDrag) {
gdk_window_begin_move_drag(gdk_window, 1, aEvent->x_root, aEvent->y_root,
@@ -4519,6 +4535,7 @@ TimeStamp nsWindow::GetEventTimeStamp(guint32 aEventTime) {
TimeStamp eventTimeStamp;
+#ifdef MOZ_WAYLAND
if (GdkIsWaylandDisplay()) {
// Wayland compositors use monotonic time to set timestamps.
int64_t timestampTime = g_get_monotonic_time() / 1000;
@@ -4528,16 +4545,21 @@ TimeStamp nsWindow::GetEventTimeStamp(guint32 aEventTime) {
int64_t tick =
BaseTimeDurationPlatformUtils::TicksFromMilliseconds(timestampTime);
eventTimeStamp = TimeStamp::FromSystemTime(tick);
- } else {
+ }
+#endif
+#ifdef MOZ_X11
+ if (GdkIsX11Display()) {
CurrentX11TimeGetter* getCurrentTime = GetCurrentTimeGetter();
MOZ_ASSERT(getCurrentTime,
"Null current time getter despite having a window");
eventTimeStamp =
TimeConverter().GetTimeStampFromSystemTime(aEventTime, *getCurrentTime);
}
+#endif
return eventTimeStamp;
}
+#ifdef MOZ_X11
mozilla::CurrentX11TimeGetter* nsWindow::GetCurrentTimeGetter() {
MOZ_ASSERT(mGdkWindow, "Expected mGdkWindow to be set");
if (MOZ_UNLIKELY(!mCurrentTimeGetter)) {
@@ -4545,6 +4567,7 @@ mozilla::CurrentX11TimeGetter* nsWindow::GetCurrentTimeGetter() {
}
return mCurrentTimeGetter.get();
}
+#endif
gboolean nsWindow::OnKeyPressEvent(GdkEventKey* aEvent) {
LOG("OnKeyPressEvent");
@@ -5210,8 +5233,8 @@ void nsWindow::EnableRenderingToWindow() {
GetShapedState());
}
- if (GdkIsWaylandDisplay()) {
#ifdef MOZ_WAYLAND
+ if (GdkIsWaylandDisplay()) {
moz_container_wayland_add_initial_draw_callback(
mContainer, [self = RefPtr{this}, this]() -> void {
LOG("moz_container_wayland initial create "
@@ -5219,11 +5242,15 @@ void nsWindow::EnableRenderingToWindow() {
self->ResumeCompositorHiddenWindow();
self->WaylandStartVsync();
});
+ }
#endif
- } else {
+
+#ifdef MOZ_X11
+ if (GdkIsX11Display()) {
ResumeCompositorHiddenWindow();
WaylandStartVsync();
}
+#endif
}
void nsWindow::DisableRenderingToWindow() {
@@ -5236,9 +5263,12 @@ void nsWindow::DisableRenderingToWindow() {
}
}
-Window nsWindow::GetX11Window() {
- return GdkIsX11Display() && mGdkWindow ? gdk_x11_window_get_xid(mGdkWindow)
- : X11None;
+uintptr_t nsWindow::GetX11Window() {
+#ifdef MOZ_X11
+ return (uintptr_t)(GdkIsX11Display() && mGdkWindow ? gdk_x11_window_get_xid(mGdkWindow) : X11None);
+#else
+ return (uintptr_t) nullptr;
+#endif
}
void nsWindow::EnsureGdkWindow() {
@@ -5324,9 +5354,6 @@ void nsWindow::ConfigureGdkWindow() {
if (mHasMappedToplevel) {
EnsureGrabs();
}
-
- LOG(" finished, new GdkWindow %p XID 0x%lx\n", mGdkWindow,
- GdkIsX11Display() ? gdk_x11_window_get_xid(mGdkWindow) : 0);
}
void nsWindow::ReleaseGdkWindow() {
@@ -5343,11 +5370,18 @@ void nsWindow::ReleaseGdkWindow() {
mSurfaceProvider.CleanupResources();
}
+extern "C" {
+// Make sure mozgtk gets linked
+MOZ_EXPORT void PleaseLinkWithMe();
+}
+
nsresult nsWindow::Create(nsIWidget* aParent, nsNativeWidget aNativeParent,
const LayoutDeviceIntRect& aRect,
nsWidgetInitData* aInitData) {
LOG("nsWindow::Create\n");
+ PleaseLinkWithMe();
+
// only set the base parent if we're going to be a dialog or a
// toplevel
nsIWidget* baseParent =
@@ -5865,10 +5899,6 @@ nsresult nsWindow::Create(nsIWidget* aParent, nsNativeWidget aNativeParent,
nullptr);
LOG(" nsWindow type %d %s\n", mWindowType, mIsPIPWindow ? "PIP window" : "");
- LOG(" mShell %p mContainer %p mGdkWindow %p XID 0x%lx\n", mShell, mContainer,
- mGdkWindow,
- (GdkIsX11Display() && mGdkWindow) ? gdk_x11_window_get_xid(mGdkWindow)
- : 0);
// Set default application name when it's empty.
if (mGtkWindowAppName.IsEmpty()) {
@@ -6720,6 +6750,7 @@ void nsWindow::UpdateTitlebarTransparencyBitmap() {
cairo_surface_destroy(surface);
}
+#ifdef MOZ_X11
if (!mNeedsShow) {
Display* xDisplay = GDK_WINDOW_XDISPLAY(mGdkWindow);
Window xDrawable = GDK_WINDOW_XID(mGdkWindow);
@@ -6740,6 +6771,7 @@ void nsWindow::UpdateTitlebarTransparencyBitmap() {
XFreePixmap(xDisplay, maskPixmap);
}
+#endif
}
void nsWindow::GrabPointer(guint32 aTime) {
@@ -7013,7 +7045,7 @@ static bool IsFullscreenSupported(GtkWidget* aShell) {
GdkScreen* screen = gtk_widget_get_screen(aShell);
GdkAtom atom = gdk_atom_intern("_NET_WM_STATE_FULLSCREEN", FALSE);
return gdk_x11_screen_supports_net_wm_hint(screen, atom);
-#elif
+#else
return true;
#endif
}
@@ -8297,6 +8329,7 @@ bool nsWindow::GetDragInfo(WidgetMouseEvent* aMouseEvent, GdkWindow** aWindow,
return false;
}
+#ifdef MOZ_X11
if (GdkIsX11Display()) {
// Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=789054
// To avoid crashes disable double-click on WM without _NET_WM_MOVERESIZE.
@@ -8312,6 +8345,7 @@ bool nsWindow::GetDragInfo(WidgetMouseEvent* aMouseEvent, GdkWindow** aWindow,
}
}
}
+#endif
// FIXME: It would be nice to have the widget position at the time
// of the event, but it's relatively unlikely that the widget has
diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
index 9baa034477..cfd4a6c178 100644
--- a/widget/gtk/nsWindow.h
+++ b/widget/gtk/nsWindow.h
@@ -98,7 +98,9 @@ typedef struct _GdkEventTouchpadPinch GdkEventTouchpadPinch;
namespace mozilla {
class TimeStamp;
+#ifdef MOZ_X11
class CurrentX11TimeGetter;
+#endif
} // namespace mozilla
@@ -278,7 +280,9 @@ class nsWindow final : public nsBaseWidget {
WidgetEventTime GetWidgetEventTime(guint32 aEventTime);
mozilla::TimeStamp GetEventTimeStamp(guint32 aEventTime);
+#ifdef MOZ_X11
mozilla::CurrentX11TimeGetter* GetCurrentTimeGetter();
+#endif
void SetInputContext(const InputContext& aContext,
const InputContextAction& aAction) override;
@@ -473,7 +477,7 @@ class nsWindow final : public nsBaseWidget {
void DestroyChildWindows();
GtkWidget* GetToplevelWidget();
nsWindow* GetContainerWindow();
- Window GetX11Window();
+ uintptr_t GetX11Window();
bool GetShapedState();
void EnsureGdkWindow();
void SetUrgencyHint(GtkWidget* top_window, bool state);
@@ -835,7 +839,9 @@ class nsWindow final : public nsBaseWidget {
*/
RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
+#ifdef MOZ_X11
mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
+#endif
static GtkWindowDecoration sGtkWindowDecoration;
static bool sTransparentMainWindow;
diff --git a/widget/moz.build b/widget/moz.build
index 9cef92614b..8ad6c12c26 100644
--- a/widget/moz.build
+++ b/widget/moz.build
@@ -271,9 +271,6 @@ if CONFIG["MOZ_INSTRUMENT_EVENT_LOOP"]:
EXPORTS.ipc = ["nsGUIEventIPC.h"]
-if CONFIG["MOZ_X11"]:
- DIRS += ["x11"]
-
if toolkit in ("cocoa", "windows"):
UNIFIED_SOURCES += [
"nsBaseClipboard.cpp",
@@ -318,7 +315,7 @@ if toolkit == "windows":
"windows/PCompositorWidget.ipdl",
"windows/PlatformWidgetTypes.ipdlh",
]
-elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk" and CONFIG["MOZ_X11"]:
+elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
IPDL_SOURCES = [
"gtk/PCompositorWidget.ipdl",
"gtk/PlatformWidgetTypes.ipdlh",
diff --git a/widget/x11/moz.build b/widget/x11/moz.build
deleted file mode 100644
index 81d345c0af..0000000000
--- a/widget/x11/moz.build
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- Mode: python; 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/.
-
-with Files("**"):
- BUG_COMPONENT = ("Core", "Widget: Gtk")
-
-SOURCES += [
- "keysym2ucs.c",
-]
-
-FINAL_LIBRARY = "xul"
-
-CFLAGS += CONFIG["MOZ_X11_CFLAGS"]