SDL: X11 Segmentation fault with multiple windows and renderers (see #5256)

From 85e6500065bbe37e9131c0ff9cd7e5af6d256730 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Fri, 11 Feb 2022 11:08:08 +0100
Subject: [PATCH] X11 Segmentation fault with multiple windows and renderers
 (see #5256)

---
 src/video/x11/SDL_x11window.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index 709f813eeb1..a6bd91d72ad 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -1659,9 +1659,15 @@ void
 X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
 {
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
-    Display *display = data->videodata->display;
+    Display *display;
     SDL_bool oldstyle_fullscreen;
 
+    if (data == NULL) {
+        return;
+    }
+
+    display = data->videodata->display;
+
     /* ICCCM2.0-compliant window managers can handle fullscreen windows
        If we're using XVidMode to change resolution we need to confine
        the cursor so we don't pan around the virtual desktop.
@@ -1719,7 +1725,13 @@ void
 X11_SetWindowKeyboardGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
 {
     SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
-    Display *display = data->videodata->display;
+    Display *display;
+
+    if (data == NULL) {
+        return;
+    }
+
+    display = data->videodata->display;
 
     if (grabbed) {
         /* If the window is unmapped, XGrab calls return GrabNotViewable,