Browse Source

Added SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT

Sam Lantinga 1 month ago
parent
commit
fe9bdcf508
3 changed files with 27 additions and 1 deletions
  1. 10 0
      WhatsNew.txt
  2. 14 0
      include/SDL3/SDL_hints.h
  3. 3 1
      src/video/x11/SDL_x11window.c

+ 10 - 0
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:
 ---------------------------------------------------------------------------

+ 14 - 0
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.

+ 3 - 1
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;
     }