Fixed crash if the IC isn't set up for some reason (bad X11 locale?)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index a5395ac..6bc2eb9 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -346,6 +346,7 @@ X11_CreateWindow(_THIS, SDL_Window * window)
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
SDL_DisplayData *displaydata =
(SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
+ SDL_WindowData *windowdata;
Display *display = data->display;
int screen = displaydata->screen;
Visual *visual;
@@ -547,6 +548,7 @@ X11_CreateWindow(_THIS, SDL_Window * window)
XDestroyWindow(display, w);
return -1;
}
+ windowdata = (SDL_WindowData *) window->driverdata;
#if SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2
if ((window->flags & SDL_WINDOW_OPENGL) && (_this->gl_config.use_egl == 1)) {
@@ -556,9 +558,9 @@ X11_CreateWindow(_THIS, SDL_Window * window)
}
/* Create the GLES window surface */
- ((SDL_WindowData *) window->driverdata)->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) w);
+ windowdata->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) w);
- if (((SDL_WindowData *) window->driverdata)->egl_surface == EGL_NO_SURFACE) {
+ if (windowdata->egl_surface == EGL_NO_SURFACE) {
XDestroyWindow(display, w);
return SDL_SetError("Could not create GLES window surface");
}
@@ -567,9 +569,8 @@ X11_CreateWindow(_THIS, SDL_Window * window)
#ifdef X_HAVE_UTF8_STRING
- if (SDL_X11_HAVE_UTF8) {
- pXGetICValues(((SDL_WindowData *) window->driverdata)->ic,
- XNFilterEvents, &fevent, NULL);
+ if (SDL_X11_HAVE_UTF8 && windowdata->ic) {
+ pXGetICValues(windowdata->ic, XNFilterEvents, &fevent, NULL);
}
#endif