Simple Directmedia Layer

Fixed crashes when a window has NULL driverdata

+12 -4
+12 -4
src/video/x11/SDL_x11window.c
··· 1387 1387 { 1388 1388 SDL_WindowData *data = window->driverdata; 1389 1389 SDL_DisplayData *displaydata = SDL_GetDisplayDriverDataForWindow(window); 1390 + int screen = (displaydata ? displaydata->screen : 0); 1390 1391 Display *display = data->videodata->display; 1391 1392 XEvent event; 1392 1393 1393 1394 if (X11_IsWindowMapped(_this, window)) { 1394 - X11_XWithdrawWindow(display, data->xwindow, displaydata->screen); 1395 + X11_XWithdrawWindow(display, data->xwindow, screen); 1395 1396 /* Blocking wait for "UnmapNotify" event */ 1396 1397 if (!(window->flags & SDL_WINDOW_EXTERNAL)) { 1397 1398 X11_XIfEvent(display, &event, &isUnmapNotify, (XPointer)&data->xwindow); ··· 1417 1418 X11_PumpEvents(_this); 1418 1419 } 1419 1420 1420 - static void X11_SetWindowActive(SDL_VideoDevice *_this, SDL_Window *window) 1421 + static int X11_SetWindowActive(SDL_VideoDevice *_this, SDL_Window *window) 1421 1422 { 1423 + CHECK_WINDOW_DATA(window); 1424 + 1422 1425 SDL_WindowData *data = window->driverdata; 1423 1426 SDL_DisplayData *displaydata = SDL_GetDisplayDriverDataForWindow(window); 1424 1427 Display *display = data->videodata->display; ··· 1443 1446 1444 1447 X11_XFlush(display); 1445 1448 } 1449 + return 0; 1446 1450 } 1447 1451 1448 1452 void X11_RaiseWindow(SDL_VideoDevice *_this, SDL_Window *window) ··· 1458 1462 X11_XFlush(display); 1459 1463 } 1460 1464 1461 - static void X11_SetWindowMaximized(SDL_VideoDevice *_this, SDL_Window *window, SDL_bool maximized) 1465 + static int X11_SetWindowMaximized(SDL_VideoDevice *_this, SDL_Window *window, SDL_bool maximized) 1462 1466 { 1467 + CHECK_WINDOW_DATA(window); 1468 + 1463 1469 SDL_WindowData *data = window->driverdata; 1464 1470 SDL_DisplayData *displaydata = SDL_GetDisplayDriverDataForWindow(window); 1465 1471 Display *display = data->videodata->display; ··· 1472 1478 and this is functional behavior, so don't remove that state 1473 1479 now, we'll take care of it when we leave fullscreen mode. 1474 1480 */ 1475 - return; 1481 + return 0; 1476 1482 } 1477 1483 1478 1484 if (X11_IsWindowMapped(_this, window)) { ··· 1513 1519 X11_SetNetWMState(_this, data->xwindow, window->flags); 1514 1520 } 1515 1521 X11_XFlush(display); 1522 + 1523 + return 0; 1516 1524 } 1517 1525 1518 1526 void X11_MaximizeWindow(SDL_VideoDevice *_this, SDL_Window *window)
test/gamepad_battery.h