[X11] Obey DISPLAY environment variable when selecting screen (Steaphan Greene) Discussed in bug #2192, tested with Xvfb in dual head configuration.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
diff --git a/src/video/x11/SDL_x11modes.c b/src/video/x11/SDL_x11modes.c
index cd7b38c..0fc6d23 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) {