From be7a5193c8b8549f1ca45961fa5f7f2e85ad06e2 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon"
Date: Wed, 22 Mar 2006 11:13:58 +0000
Subject: [PATCH] Xrandr support in the X11 target.
Fixes Bugzilla #109, and as a bonus, Bugzilla #145, too!
--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401594
---
configure.in | 42 ++++++++-
docs/html/sdlenvvars.html | 14 ++-
include/SDL_config.h.in | 3 +
src/video/x11/SDL_x11dyn.c | 22 ++++-
src/video/x11/SDL_x11dyn.h | 4 +
src/video/x11/SDL_x11modes.c | 161 ++++++++++++++++++++++++++++++++++-
src/video/x11/SDL_x11sym.h | 11 +++
src/video/x11/SDL_x11video.h | 13 +++
8 files changed, 260 insertions(+), 10 deletions(-)
diff --git a/configure.in b/configure.in
index bf7bd9f10..e4913277f 100644
--- a/configure.in
+++ b/configure.in
@@ -789,9 +789,11 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically load X11 support [default=yes
, enable_x11_shared=yes)
case "$host" in
- *-*-darwin*)
+ *-*-darwin*) # Latest Mac OS X actually ships with Xrandr/Xrender libs...
x11_lib='/usr/X11R6/lib/libX11.6.dylib'
x11ext_lib='/usr/X11R6/lib/libXext.6.dylib'
+ xrandr_lib='/usr/X11R6/lib/libXrandr.2.dylib'
+ xrender_lib='/usr/X11R6/lib/libXrender.1.dylib'
;;
*-*-osf*)
x11_lib='libX11.so'
@@ -810,6 +812,12 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically load X11 support [default=yes
if test "x$x11ext_lib" = "x"; then
x11ext_lib=[`ls $path/libXext.so.[0-9] 2>/dev/null | sort -r | sed 's/.*\/\(.*\)/\1/; q'`]
fi
+ if test "x$xrender_lib" = "x"; then
+ xrender_lib=[`ls $path/libXrender.so.[0-9] 2>/dev/null | sort -r | sed 's/.*\/\(.*\)/\1/; q'`]
+ fi
+ if test "x$xrandr_lib" = "x"; then
+ xrandr_lib=[`ls $path/libXrandr.so.[0-9] 2>/dev/null | sort -r | sed 's/.*\/\(.*\)/\1/; q'`]
+ fi
done
;;
esac
@@ -833,6 +841,7 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically load X11 support [default=yes
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC, "$x11_lib")
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT, "$x11ext_lib")
else
+ enable_x11_shared=no
EXTRA_LDFLAGS="$EXTRA_LDFLAGS $X_LIBS -lX11 -lXext"
fi
have_video=yes
@@ -884,6 +893,37 @@ AC_HELP_STRING([--enable-video-x11-xme], [enable Xi Graphics XME for fullscreen
AC_DEFINE(SDL_VIDEO_DRIVER_X11_XME)
SOURCES="$SOURCES $srcdir/src/video/Xext/XME/*.c"
fi
+ AC_ARG_ENABLE(video-x11-xrandr,
+AC_HELP_STRING([--enable-video-x11-xrandr], [enable X11 Xrandr extension for fullscreen [default=yes]]),
+ , enable_video_x11_xrandr=yes)
+ if test x$enable_video_x11_xrandr = xyes; then
+ definitely_enable_video_x11_xrandr=no
+ AC_CHECK_HEADER(X11/extensions/Xrandr.h,
+ have_xrandr_h_hdr=yes,
+ have_xrandr_h_hdr=no,
+ [#include
+ ])
+ if test x$have_xrandr_h_hdr = xyes; then
+ if test x$enable_x11_shared = xyes && test x$xrandr_lib != x ; then
+ echo "-- dynamic libXrender -> $xrender_lib"
+ echo "-- dynamic libXrandr -> $xrandr_lib"
+ AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER, "$xrender_lib")
+ AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR, "$xrandr_lib")
+ definitely_enable_video_x11_xrandr=yes
+ else
+ AC_CHECK_LIB(Xrender, XRenderQueryExtension, have_xrender_lib=yes)
+ AC_CHECK_LIB(Xrandr, XRRQueryExtension, have_xrandr_lib=yes)
+ if test x$have_xrender_lib = xyes && test x$have_xrandr_lib = xyes ; then
+ EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXrandr -lXrender"
+ definitely_enable_video_x11_xrandr=yes
+ fi
+ fi
+ fi
+ fi
+
+ if test x$definitely_enable_video_x11_xrandr = xyes; then
+ AC_DEFINE(SDL_VIDEO_DRIVER_X11_XRANDR)
+ fi
fi
fi
}
diff --git a/docs/html/sdlenvvars.html b/docs/html/sdlenvvars.html
index 6322d665d..0284e7e5f 100644
--- a/docs/html/sdlenvvars.html
+++ b/docs/html/sdlenvvars.html
@@ -576,6 +576,18 @@ algorithm. It can be in decimal or in hex (prefixed by 0x).
SDL_VIDEO_X11_NO_XRANDRIf set, don't attempt to use the Xrandr extension for resolution mode
+switching. Normally Xrandr takes precedence over the XF86VidMode
+extension, so setting this environment variable will cause the
+XF86VidMode extension to be used if it is available.
SDL_VIDEO_YUV_DIRECT