SDL: Added SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT (d75ba)

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;
     }