Mercurial > sdl-ios-xcode
diff src/video/x11/SDL_x11modes.c @ 227:24878c14b391
Added X11 Xinerama support - fullscreen starts on screen 0
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 03 Nov 2001 17:03:16 +0000 |
parents | a1c973c35fef |
children | 275a934573a7 |
line wrap: on
line diff
--- a/src/video/x11/SDL_x11modes.c Fri Nov 02 22:41:32 2001 +0000 +++ b/src/video/x11/SDL_x11modes.c Sat Nov 03 17:03:16 2001 +0000 @@ -39,6 +39,9 @@ #include "SDL_x11modes_c.h" #include "SDL_x11image_c.h" +#ifdef HAVE_XINERAMA +#include <X11/extensions/Xinerama.h> +#endif #ifdef XFREE86_VM Bool XVidMode(GetModeInfo, (Display *dpy, int scr, XF86VidModeModeInfo *info)) @@ -99,10 +102,11 @@ XVidMode(GetAllModeLines, (SDL_Display,SDL_Screen,&nmodes,&modes))){ qsort(modes, nmodes, sizeof *modes, cmpmodes); #ifdef XFREE86_DEBUG - printf("Available modes:\n"); - for ( i = 0; i < nmodes; ++i ) { - printf("Mode %d: %dx%d\n", i, modes[i]->hdisplay, modes[i]->vdisplay); - } + printf("Available modes:\n"); + for ( i = 0; i < nmodes; ++i ) { + printf("Mode %d: %dx%d\n", i, + modes[i]->hdisplay, modes[i]->vdisplay); + } #endif for ( i = nmodes-1; i > 0 ; --i ) { if ( (modes[i]->hdisplay >= width) && @@ -238,8 +242,8 @@ #ifdef X_XF86VidModeGetDotClocks /* Compiled under XFree86 4.0 */ /* Earlier X servers hang when doing vidmode */ if ( vm_major < 2 ) { -#ifdef DEBUG_XF86 - printf("Compiled under XFree86 4.0, server is XFree86 3.X\n"); +#ifdef XFREE86_DEBUG + printf("Compiled under XFree86 4.0, server is XFree86 3.X\n"); #endif buggy_X11 = 1; } @@ -335,18 +339,50 @@ } } -#ifdef DEBUG_XF86 +#ifdef XFREE86_DEBUG if ( use_vidmode ) { - fprintf(stderr, "XFree86 VidMode is enabled\n"); + printf("XFree86 VidMode is enabled\n"); } if ( SDL_modelist ) { - fprintf(stderr, "X11 video mode list:\n"); + printf("X11 video mode list:\n"); for ( i=0; SDL_modelist[i]; ++i ) { - fprintf(stderr, "\t%dx%d\n", - SDL_modelist[i]->w, SDL_modelist[i]->h); + printf("\t%dx%d\n", SDL_modelist[i]->w, SDL_modelist[i]->h); } } -#endif /* DEBUG_XF86 */ +#endif /* XFREE86_DEBUG */ + + /* The default X/Y fullscreen offset is 0/0 */ + xinerama_x = 0; + xinerama_y = 0; + +#ifdef HAVE_XINERAMA + /* Query Xinerama extention */ + if ( XineramaQueryExtension(SDL_Display, &i, &i) && + XineramaIsActive(SDL_Display) ) { + /* Find out which screen is the zero'th one */ + int screens; + XineramaScreenInfo *xinerama; + +#ifdef XINERAMA_DEBUG + printf("X11 detected Xinerama:\n"); +#endif + xinerama = XineramaQueryScreens(SDL_Display, &screens); + for ( i = 0; i < screens; i++ ) { +#ifdef XINERAMA_DEBUG + printf("xinerama %d: %dx%d+%d+%d\n", + xinerama[i].screen_number, + xinerama[i].width, xinerama[i].height, + xinerama[i].x_org, xinerama[i].y_org); +#endif + if ( xinerama[i].screen_number == 0 ) { + xinerama_x = xinerama[i].x_org; + xinerama_y = xinerama[i].y_org; + } + } + XFree(xinerama); + } +#endif /* HAVE_XINERAMA */ + return 0; } @@ -390,13 +426,15 @@ int x, y; int real_w, real_h; + x = xinerama_x; + y = xinerama_y; if ( currently_fullscreen ) { /* Switch resolution and cover it with the FSwindow */ - move_cursor_to(this, 0, 0); + move_cursor_to(this, x, y); set_best_resolution(this, current_w, current_h); - move_cursor_to(this, 0, 0); + move_cursor_to(this, x, y); get_real_resolution(this, &real_w, &real_h); - XMoveResizeWindow(SDL_Display, FSwindow, 0, 0, real_w, real_h); + XMoveResizeWindow(SDL_Display, FSwindow, x, y, real_w, real_h); move_cursor_to(this, real_w/2, real_h/2); /* Center and reparent the drawing window */