Remove full-desktop Xinerama mode when using XRandR
authorDavid Gow <david@ingeniumdigital.com>
Tue, 25 Jun 2013 21:36:36 +0800
changeset 7361 9b4430c49235
parent 7360 b86947ea2749
child 7362 fdf6c14b447c
Remove full-desktop Xinerama mode when using XRandR
src/video/x11/SDL_x11modes.c
--- a/src/video/x11/SDL_x11modes.c	Sat Jul 06 12:28:57 2013 -0700
+++ b/src/video/x11/SDL_x11modes.c	Tue Jun 25 21:36:36 2013 +0800
@@ -689,9 +689,11 @@
 
 #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 @@
             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 */