From f5777f9c53db354e94b4a79bcb024e99c1bec21c Mon Sep 17 00:00:00 2001 From: David Gow Date: Tue, 25 Jun 2013 21:36:36 +0800 Subject: [PATCH] Remove full-desktop Xinerama mode when using XRandR --- src/video/x11/SDL_x11modes.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/video/x11/SDL_x11modes.c b/src/video/x11/SDL_x11modes.c index b1da7370f..ea2cb46ad 100644 --- a/src/video/x11/SDL_x11modes.c +++ b/src/video/x11/SDL_x11modes.c @@ -689,9 +689,11 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) #if SDL_VIDEO_DRIVER_X11_XINERAMA if (data->use_xinerama) { - /* Add the full (both screens combined) xinerama mode only on the display that starts at 0,0 */ - if (!data->xinerama_info.x_org && !data->xinerama_info.y_org && + if (data->use_vidmode && !data->xinerama_info.x_org && !data->xinerama_info.y_org && (screen_w > data->xinerama_info.width || screen_h > data->xinerama_info.height)) { + /* Add the full (both screens combined) xinerama mode only on the display that starts at 0,0 + * if we're using vidmode. + */ mode.w = screen_w; mode.h = screen_h; mode.refresh_rate = 0; @@ -702,6 +704,20 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) mode.driverdata = modedata; SDL_AddDisplayMode(sdl_display, &mode); } + else + { + /* Add the current mode of each monitor otherwise */ + mode.w = data->xinerama_info.width; + mode.h = data->xinerama_info.height; + mode.refresh_rate = 0; + modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); + if (modedata) { + *modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata; + } + mode.driverdata = modedata; + SDL_AddDisplayMode(sdl_display, &mode); + } + } #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */