From 29eb6e9b3cc2a3e82a41903376c194c48f243642 Mon Sep 17 00:00:00 2001
From: Gabriel Jacobo <gabomdq@gmail.com>
Date: Wed, 15 Oct 2014 18:33:43 -0300
Subject: [PATCH] [X11] Obey DISPLAY environment variable when selecting screen
 (Steaphan Greene)

Discussed in bug #2192, tested with Xvfb in dual head configuration.
---
 src/video/x11/SDL_x11modes.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/video/x11/SDL_x11modes.c b/src/video/x11/SDL_x11modes.c
index cd7b38c50..0fc6d2386 100644
--- a/src/video/x11/SDL_x11modes.c
+++ b/src/video/x11/SDL_x11modes.c
@@ -375,7 +375,7 @@ int
 X11_InitModes(_THIS)
 {
     SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
-    int screen, screencount;
+    int snum, screen, screencount;
 #if SDL_VIDEO_DRIVER_X11_XINERAMA
     int xinerama_major, xinerama_minor;
     int use_xinerama = 0;
@@ -423,7 +423,7 @@ X11_InitModes(_THIS)
     }
 #endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */
 
-    for (screen = 0; screen < screencount; ++screen) {
+    for (snum = 0; snum < screencount; ++snum) {
         XVisualInfo vinfo;
         SDL_VideoDisplay display;
         SDL_DisplayData *displaydata;
@@ -433,6 +433,15 @@ X11_InitModes(_THIS)
         char display_name[128];
         int i, n;
 
+        /* Re-order screens to always put default screen first */
+        if (snum == 0) {
+            screen = DefaultScreen(data->display);
+        } else if (snum == DefaultScreen(data->display)) {
+            screen = 0;
+        } else {
+            screen = snum;
+        }
+
 #if SDL_VIDEO_DRIVER_X11_XINERAMA
         if (xinerama) {
             if (get_visualinfo(data->display, 0, &vinfo) < 0) {