|
@@ -1002,6 +1002,7 @@ X11_SetDisplayMode(_THIS, SDL_VideoDisplay * sdl_display, SDL_DisplayMode * mode
|
|
|
Display *display = viddata->display;
|
|
|
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata;
|
|
|
SDL_DisplayModeData *modedata = (SDL_DisplayModeData *)mode->driverdata;
|
|
|
+ int mm_width, mm_height;
|
|
|
|
|
|
viddata->last_mode_change_deadline = SDL_GetTicks() + (PENDING_FOCUS_TIME * 2);
|
|
|
|
|
@@ -1030,10 +1031,23 @@ X11_SetDisplayMode(_THIS, SDL_VideoDisplay * sdl_display, SDL_DisplayMode * mode
|
|
|
return SDL_SetError("Couldn't get XRandR crtc info");
|
|
|
}
|
|
|
|
|
|
+ X11_XGrabServer(display);
|
|
|
+ status = X11_XRRSetCrtcConfig(display, res, output_info->crtc, CurrentTime,
|
|
|
+ 0, 0, None, crtc->rotation, NULL, 0);
|
|
|
+ if (status != Success) {
|
|
|
+ goto setCrtcError;
|
|
|
+ }
|
|
|
+
|
|
|
+ mm_width = mode->w * DisplayWidthMM(display, data->screen) / DisplayWidth(display, data->screen);
|
|
|
+ mm_height = mode->h * DisplayHeightMM(display, data->screen) / DisplayHeight(display, data->screen);
|
|
|
+ X11_XRRSetScreenSize(display, RootWindow(display, data->screen), mode->w, mode->h, mm_width, mm_height);
|
|
|
+
|
|
|
status = X11_XRRSetCrtcConfig (display, res, output_info->crtc, CurrentTime,
|
|
|
crtc->x, crtc->y, modedata->xrandr_mode, crtc->rotation,
|
|
|
&data->xrandr_output, 1);
|
|
|
|
|
|
+setCrtcError:
|
|
|
+ X11_XUngrabServer(display);
|
|
|
X11_XRRFreeCrtcInfo(crtc);
|
|
|
X11_XRRFreeOutputInfo(output_info);
|
|
|
X11_XRRFreeScreenResources(res);
|