From d75ba9c2d24f030522e0b345cb4c63cddd8c72fd Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 5 Mar 2025 08:20:00 -0800
Subject: [PATCH] Added SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT
(cherry picked from commit fe9bdcf50807f4c3952be9b29c80644dcb7ef206)
---
WhatsNew.txt | 10 ++++++++++
include/SDL3/SDL_hints.h | 14 ++++++++++++++
src/video/x11/SDL_x11window.c | 4 +++-
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/WhatsNew.txt b/WhatsNew.txt
index 22b1a0f8bc212..0d10ee672acad 100644
--- a/WhatsNew.txt
+++ b/WhatsNew.txt
@@ -1,6 +1,16 @@
This is a list of major changes in SDL's version history.
+---------------------------------------------------------------------------
+3.2.10:
+---------------------------------------------------------------------------
+* Added SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT to control whether XSelectInput() should be called on external windows to enable input events.
+
+---------------------------------------------------------------------------
+3.2.4:
+---------------------------------------------------------------------------
+* Added SDL_StretchSurface()
+
---------------------------------------------------------------------------
3.2.0:
---------------------------------------------------------------------------
diff --git a/include/SDL3/SDL_hints.h b/include/SDL3/SDL_hints.h
index 3206dc13de50b..97d1563a3112a 100644
--- a/include/SDL3/SDL_hints.h
+++ b/include/SDL3/SDL_hints.h
@@ -3607,6 +3607,20 @@ extern "C" {
*/
#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER"
+/**
+ * A variable controlling whether SDL should call XSelectInput() to enable input events on X11 windows wrapped by SDL windows.
+ *
+ * The variable can be set to the following values:
+ *
+ * - "0": Don't call XSelectInput(), assuming the native window code has done it already.
+ * - "1": Call XSelectInput() to enable input events. (default)
+ *
+ * This hint should be set before creating a window.
+ *
+ * \since This hint is available since SDL 3.2.10.
+ */
+#define SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT "SDL_VIDEO_X11_EXTERNAL_WINDOW_INPUT"
+
/**
* A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint
* should be used.
diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index 55620533eb27d..7b3b379b9b4bb 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -521,7 +521,9 @@ bool X11_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_Properties
return false;
}
- SetupWindowInput(_this, window);
+ if (SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT, true)) {
+ SetupWindowInput(_this, window);
+ }
return true;
}