mirror of https://github.com/encounter/SDL.git
parent
e551384a99
commit
7d7ec9c951
|
@ -423,7 +423,7 @@ set_option(SDL_RPATH "Use an rpath when linking SDL" ${UNIX_SYS})
|
|||
set_option(SDL_CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" ${UNIX_SYS})
|
||||
set_option(SDL_X11 "Use X11 video driver" ${UNIX_SYS})
|
||||
dep_option(SDL_X11_SHARED "Dynamically load X11 support" ON "SDL_X11" OFF)
|
||||
set(SDL_X11_OPTIONS Xcursor Xdbe Xinerama XInput Xfixes Xrandr Xscrnsaver XShape Xvm)
|
||||
set(SDL_X11_OPTIONS Xcursor Xdbe XInput Xfixes Xrandr Xscrnsaver XShape)
|
||||
foreach(_SUB ${SDL_X11_OPTIONS})
|
||||
string(TOUPPER "SDL_X11_${_SUB}" _OPT)
|
||||
dep_option(${_OPT} "Enable ${_SUB} support" ON "SDL_X11" OFF)
|
||||
|
|
|
@ -393,7 +393,7 @@ endmacro()
|
|||
# - HAVE_SDL_LOADSO opt
|
||||
macro(CheckX11)
|
||||
if(SDL_X11)
|
||||
foreach(_LIB X11 Xext Xcursor Xinerama Xi Xfixes Xrandr Xrender Xss Xxf86vm)
|
||||
foreach(_LIB X11 Xext Xcursor Xi Xfixes Xrandr Xrender Xss)
|
||||
FindLibraryAndSONAME("${_LIB}")
|
||||
endforeach()
|
||||
|
||||
|
@ -415,7 +415,6 @@ macro(CheckX11)
|
|||
endif()
|
||||
|
||||
check_include_file(X11/Xcursor/Xcursor.h HAVE_XCURSOR_H)
|
||||
check_include_file(X11/extensions/Xinerama.h HAVE_XINERAMA_H)
|
||||
check_include_file(X11/extensions/XInput2.h HAVE_XINPUT2_H)
|
||||
check_include_file(X11/extensions/Xrandr.h HAVE_XRANDR_H)
|
||||
check_include_file(X11/extensions/Xfixes.h HAVE_XFIXES_H_)
|
||||
|
@ -423,7 +422,6 @@ macro(CheckX11)
|
|||
check_include_file(X11/extensions/scrnsaver.h HAVE_XSS_H)
|
||||
check_include_file(X11/extensions/shape.h HAVE_XSHAPE_H)
|
||||
check_include_files("X11/Xlib.h;X11/extensions/Xdbe.h" HAVE_XDBE_H)
|
||||
check_include_files("X11/Xlib.h;X11/extensions/xf86vmode.h" HAVE_XF86VM_H)
|
||||
check_include_files("X11/Xlib.h;X11/Xproto.h;X11/extensions/Xext.h" HAVE_XEXT_H)
|
||||
|
||||
if(X11_LIB)
|
||||
|
@ -504,16 +502,6 @@ macro(CheckX11)
|
|||
set(SDL_VIDEO_DRIVER_X11_XDBE 1)
|
||||
endif()
|
||||
|
||||
if(SDL_X11_XINERAMA AND HAVE_XINERAMA_H)
|
||||
set(HAVE_X11_XINERAMA TRUE)
|
||||
if(HAVE_X11_SHARED AND XINERAMA_LIB)
|
||||
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "\"${XINERAMA_LIB_SONAME}\"")
|
||||
else()
|
||||
list(APPEND EXTRA_LIBS ${XINERAMA_LIB})
|
||||
endif()
|
||||
set(SDL_VIDEO_DRIVER_X11_XINERAMA 1)
|
||||
endif()
|
||||
|
||||
if(SDL_X11_XINPUT AND HAVE_XINPUT2_H)
|
||||
set(HAVE_X11_XINPUT TRUE)
|
||||
if(HAVE_X11_SHARED AND XI_LIB)
|
||||
|
@ -584,16 +572,6 @@ macro(CheckX11)
|
|||
set(HAVE_X11_XSHAPE TRUE)
|
||||
endif()
|
||||
|
||||
if(SDL_X11_XVM AND HAVE_XF86VM_H)
|
||||
if(HAVE_X11_SHARED AND XXF86VM_LIB)
|
||||
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "\"${XXF86VM_LIB_SONAME}\"")
|
||||
else()
|
||||
list(APPEND EXTRA_LIBS ${XXF86VM_LIB})
|
||||
endif()
|
||||
set(SDL_VIDEO_DRIVER_X11_XVIDMODE 1)
|
||||
set(HAVE_X11_XVM TRUE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_REQUIRED_LIBRARIES)
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -878,13 +878,11 @@ with_x
|
|||
enable_x11_shared
|
||||
enable_video_x11_xcursor
|
||||
enable_video_x11_xdbe
|
||||
enable_video_x11_xinerama
|
||||
enable_video_x11_xinput
|
||||
enable_video_x11_xfixes
|
||||
enable_video_x11_xrandr
|
||||
enable_video_x11_scrnsaver
|
||||
enable_video_x11_xshape
|
||||
enable_video_x11_vm
|
||||
enable_video_vivante
|
||||
enable_video_cocoa
|
||||
enable_video_metal
|
||||
|
@ -1668,8 +1666,6 @@ Optional Features:
|
|||
--enable-video-x11-xcursor
|
||||
enable X11 Xcursor support [default=yes]
|
||||
--enable-video-x11-xdbe enable X11 Xdbe support [default=yes]
|
||||
--enable-video-x11-xinerama
|
||||
enable X11 Xinerama support [default=yes]
|
||||
--enable-video-x11-xinput
|
||||
enable X11 XInput extension for manymouse, tablets,
|
||||
etc [default=yes]
|
||||
|
@ -1682,7 +1678,6 @@ Optional Features:
|
|||
enable X11 screensaver extension [default=yes]
|
||||
--enable-video-x11-xshape
|
||||
enable X11 XShape support [default=yes]
|
||||
--enable-video-x11-vm use X11 VM extension for fullscreen [default=yes]
|
||||
--enable-video-vivante use Vivante EGL video driver [default=yes]
|
||||
--enable-video-cocoa use Cocoa video driver [default=yes]
|
||||
--enable-video-metal include Metal support [default=yes]
|
||||
|
@ -21741,37 +21736,31 @@ fi
|
|||
x11_lib='/opt/X11/lib/libX11.6.dylib'
|
||||
x11ext_lib='/opt/X11/lib/libXext.6.dylib'
|
||||
xcursor_lib='/opt/X11/lib/libXcursor.1.dylib'
|
||||
xinerama_lib='/opt/X11/lib/libXinerama.1.dylib'
|
||||
xinput_lib='/opt/X11/lib/libXi.6.dylib'
|
||||
xfixes_lib='/opt/X11/lib/libXfixes.3.dylib'
|
||||
xrandr_lib='/opt/X11/lib/libXrandr.2.dylib'
|
||||
xrender_lib='/opt/X11/lib/libXrender.1.dylib'
|
||||
xss_lib='/opt/X11/lib/libXss.1.dylib'
|
||||
xvidmode_lib='/opt/X11/lib/libXxf86vm.1.dylib'
|
||||
;;
|
||||
*-*-openbsd*)
|
||||
x11_lib='libX11.so'
|
||||
x11ext_lib='libXext.so'
|
||||
xcursor_lib='libXcursor.so'
|
||||
xinerama_lib='libXinerama.so'
|
||||
xinput_lib='libXi.so'
|
||||
xfixes_lib='libXfixes.so'
|
||||
xrandr_lib='libXrandr.so'
|
||||
xrender_lib='libXrender.so'
|
||||
xss_lib='libXss.so'
|
||||
xvidmode_lib='libXxf86vm.so'
|
||||
;;
|
||||
*)
|
||||
x11_lib=`find_lib "libX11.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
x11ext_lib=`find_lib "libXext.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xcursor_lib=`find_lib "libXcursor.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xinerama_lib=`find_lib "libXinerama.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xinput_lib=`find_lib "libXi.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xfixes_lib=`find_lib "libXfixes.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xrandr_lib=`find_lib "libXrandr.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xrender_lib=`find_lib "libXrender.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xss_lib=`find_lib "libXss.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
xvidmode_lib=`find_lib "libXxf86vm.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@ -22023,88 +22012,6 @@ $as_echo "#define SDL_VIDEO_DRIVER_X11_XDBE 1" >>confdefs.h
|
|||
SUMMARY_video_x11="${SUMMARY_video_x11} xdbe"
|
||||
fi
|
||||
fi
|
||||
# Check whether --enable-video-x11-xinerama was given.
|
||||
if test "${enable_video_x11_xinerama+set}" = set; then :
|
||||
enableval=$enable_video_x11_xinerama;
|
||||
else
|
||||
enable_video_x11_xinerama=yes
|
||||
fi
|
||||
|
||||
if test x$enable_video_x11_xinerama = xyes; then
|
||||
definitely_enable_video_x11_xinerama=no
|
||||
ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xinerama.h" "ac_cv_header_X11_extensions_Xinerama_h" "#include <X11/Xlib.h>
|
||||
|
||||
"
|
||||
if test "x$ac_cv_header_X11_extensions_Xinerama_h" = xyes; then :
|
||||
have_xinerama_h_hdr=yes
|
||||
else
|
||||
have_xinerama_h_hdr=no
|
||||
fi
|
||||
|
||||
|
||||
if test x$have_xinerama_h_hdr = xyes; then
|
||||
if test x$enable_x11_shared = xyes && test x$xinerama_lib != x ; then
|
||||
echo "-- dynamic libXinerama -> $xinerama_lib"
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "$xinerama_lib"
|
||||
_ACEOF
|
||||
|
||||
definitely_enable_video_x11_xinerama=yes
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryExtension in -lXinerama" >&5
|
||||
$as_echo_n "checking for XineramaQueryExtension in -lXinerama... " >&6; }
|
||||
if ${ac_cv_lib_Xinerama_XineramaQueryExtension+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lXinerama $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char XineramaQueryExtension ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return XineramaQueryExtension ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_Xinerama_XineramaQueryExtension=yes
|
||||
else
|
||||
ac_cv_lib_Xinerama_XineramaQueryExtension=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xinerama_XineramaQueryExtension" >&5
|
||||
$as_echo "$ac_cv_lib_Xinerama_XineramaQueryExtension" >&6; }
|
||||
if test "x$ac_cv_lib_Xinerama_XineramaQueryExtension" = xyes; then :
|
||||
have_xinerama_lib=yes
|
||||
fi
|
||||
|
||||
if test x$have_xinerama_lib = xyes ; then
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXinerama"
|
||||
definitely_enable_video_x11_xinerama=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$definitely_enable_video_x11_xinerama = xyes; then
|
||||
|
||||
$as_echo "#define SDL_VIDEO_DRIVER_X11_XINERAMA 1" >>confdefs.h
|
||||
|
||||
SUMMARY_video_x11="${SUMMARY_video_x11} xinerama"
|
||||
fi
|
||||
# Check whether --enable-video-x11-xinput was given.
|
||||
if test "${enable_video_x11_xinput+set}" = set; then :
|
||||
enableval=$enable_video_x11_xinput;
|
||||
|
@ -22517,88 +22424,6 @@ $as_echo "#define SDL_VIDEO_DRIVER_X11_XSHAPE 1" >>confdefs.h
|
|||
SUMMARY_video_x11="${SUMMARY_video_x11} xshape"
|
||||
fi
|
||||
fi
|
||||
# Check whether --enable-video-x11-vm was given.
|
||||
if test "${enable_video_x11_vm+set}" = set; then :
|
||||
enableval=$enable_video_x11_vm;
|
||||
else
|
||||
enable_video_x11_vm=yes
|
||||
fi
|
||||
|
||||
if test x$enable_video_x11_vm = xyes; then
|
||||
definitely_enable_video_x11_vm=no
|
||||
ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include <X11/Xlib.h>
|
||||
|
||||
"
|
||||
if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then :
|
||||
have_vm_h_hdr=yes
|
||||
else
|
||||
have_vm_h_hdr=no
|
||||
fi
|
||||
|
||||
|
||||
if test x$have_vm_h_hdr = xyes; then
|
||||
if test x$enable_x11_shared = xyes && test x$xvidmode_lib != x ; then
|
||||
echo "-- dynamic libXxf86vm -> $xvidmode_lib"
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "$xvidmode_lib"
|
||||
_ACEOF
|
||||
|
||||
definitely_enable_video_x11_vm=yes
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeQueryVersion in -lXxf86vm" >&5
|
||||
$as_echo_n "checking for XF86VidModeQueryVersion in -lXxf86vm... " >&6; }
|
||||
if ${ac_cv_lib_Xxf86vm_XF86VidModeQueryVersion+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lXxf86vm $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char XF86VidModeQueryVersion ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return XF86VidModeQueryVersion ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_Xxf86vm_XF86VidModeQueryVersion=yes
|
||||
else
|
||||
ac_cv_lib_Xxf86vm_XF86VidModeQueryVersion=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeQueryVersion" >&5
|
||||
$as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeQueryVersion" >&6; }
|
||||
if test "x$ac_cv_lib_Xxf86vm_XF86VidModeQueryVersion" = xyes; then :
|
||||
have_vm_lib=yes
|
||||
fi
|
||||
|
||||
if test x$have_vm_lib = xyes ; then
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXxf86vm"
|
||||
definitely_enable_video_x11_vm=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$definitely_enable_video_x11_vm = xyes; then
|
||||
|
||||
$as_echo "#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1" >>confdefs.h
|
||||
|
||||
SUMMARY_video_x11="${SUMMARY_video_x11} xvidmode"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$have_x != xyes; then
|
||||
|
|
62
configure.ac
62
configure.ac
|
@ -1768,37 +1768,31 @@ CheckX11()
|
|||
x11_lib='/opt/X11/lib/libX11.6.dylib'
|
||||
x11ext_lib='/opt/X11/lib/libXext.6.dylib'
|
||||
xcursor_lib='/opt/X11/lib/libXcursor.1.dylib'
|
||||
xinerama_lib='/opt/X11/lib/libXinerama.1.dylib'
|
||||
xinput_lib='/opt/X11/lib/libXi.6.dylib'
|
||||
xfixes_lib='/opt/X11/lib/libXfixes.3.dylib'
|
||||
xrandr_lib='/opt/X11/lib/libXrandr.2.dylib'
|
||||
xrender_lib='/opt/X11/lib/libXrender.1.dylib'
|
||||
xss_lib='/opt/X11/lib/libXss.1.dylib'
|
||||
xvidmode_lib='/opt/X11/lib/libXxf86vm.1.dylib'
|
||||
;;
|
||||
*-*-openbsd*)
|
||||
x11_lib='libX11.so'
|
||||
x11ext_lib='libXext.so'
|
||||
xcursor_lib='libXcursor.so'
|
||||
xinerama_lib='libXinerama.so'
|
||||
xinput_lib='libXi.so'
|
||||
xfixes_lib='libXfixes.so'
|
||||
xrandr_lib='libXrandr.so'
|
||||
xrender_lib='libXrender.so'
|
||||
xss_lib='libXss.so'
|
||||
xvidmode_lib='libXxf86vm.so'
|
||||
;;
|
||||
*)
|
||||
x11_lib=[`find_lib "libX11.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
x11ext_lib=[`find_lib "libXext.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xcursor_lib=[`find_lib "libXcursor.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xinerama_lib=[`find_lib "libXinerama.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xinput_lib=[`find_lib "libXi.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xfixes_lib=[`find_lib "libXfixes.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xrandr_lib=[`find_lib "libXrandr.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xrender_lib=[`find_lib "libXrender.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xss_lib=[`find_lib "libXss.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
xvidmode_lib=[`find_lib "libXxf86vm.so.*" "$X_LIBS -L/usr/X11/$base_libdir -L/usr/X11R6/$base_libdir" | sed 's/.*\/\(.*\)/\1/; q'`]
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@ -1910,34 +1904,6 @@ XFreeEventData(display, cookie);
|
|||
SUMMARY_video_x11="${SUMMARY_video_x11} xdbe"
|
||||
fi
|
||||
fi
|
||||
AC_ARG_ENABLE(video-x11-xinerama,
|
||||
[AS_HELP_STRING([--enable-video-x11-xinerama], [enable X11 Xinerama support [default=yes]])],
|
||||
, enable_video_x11_xinerama=yes)
|
||||
if test x$enable_video_x11_xinerama = xyes; then
|
||||
definitely_enable_video_x11_xinerama=no
|
||||
AC_CHECK_HEADER(X11/extensions/Xinerama.h,
|
||||
have_xinerama_h_hdr=yes,
|
||||
have_xinerama_h_hdr=no,
|
||||
[#include <X11/Xlib.h>
|
||||
])
|
||||
if test x$have_xinerama_h_hdr = xyes; then
|
||||
if test x$enable_x11_shared = xyes && test x$xinerama_lib != x ; then
|
||||
echo "-- dynamic libXinerama -> $xinerama_lib"
|
||||
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA, "$xinerama_lib", [ ])
|
||||
definitely_enable_video_x11_xinerama=yes
|
||||
else
|
||||
AC_CHECK_LIB(Xinerama, XineramaQueryExtension, have_xinerama_lib=yes)
|
||||
if test x$have_xinerama_lib = xyes ; then
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXinerama"
|
||||
definitely_enable_video_x11_xinerama=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$definitely_enable_video_x11_xinerama = xyes; then
|
||||
AC_DEFINE(SDL_VIDEO_DRIVER_X11_XINERAMA, 1, [ ])
|
||||
SUMMARY_video_x11="${SUMMARY_video_x11} xinerama"
|
||||
fi
|
||||
AC_ARG_ENABLE(video-x11-xinput,
|
||||
[AS_HELP_STRING([--enable-video-x11-xinput], [enable X11 XInput extension for manymouse, tablets, etc [default=yes]])],
|
||||
, enable_video_x11_xinput=yes)
|
||||
|
@ -2087,34 +2053,6 @@ dnl XRRScreenResources is only present in Xrandr >= 1.2, we use that
|
|||
SUMMARY_video_x11="${SUMMARY_video_x11} xshape"
|
||||
fi
|
||||
fi
|
||||
AC_ARG_ENABLE(video-x11-vm,
|
||||
[AS_HELP_STRING([--enable-video-x11-vm], [use X11 VM extension for fullscreen [default=yes]])],
|
||||
, enable_video_x11_vm=yes)
|
||||
if test x$enable_video_x11_vm = xyes; then
|
||||
definitely_enable_video_x11_vm=no
|
||||
AC_CHECK_HEADER(X11/extensions/xf86vmode.h,
|
||||
have_vm_h_hdr=yes,
|
||||
have_vm_h_hdr=no,
|
||||
[#include <X11/Xlib.h>
|
||||
])
|
||||
if test x$have_vm_h_hdr = xyes; then
|
||||
if test x$enable_x11_shared = xyes && test x$xvidmode_lib != x ; then
|
||||
echo "-- dynamic libXxf86vm -> $xvidmode_lib"
|
||||
AC_DEFINE_UNQUOTED(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE, "$xvidmode_lib", [ ])
|
||||
definitely_enable_video_x11_vm=yes
|
||||
else
|
||||
AC_CHECK_LIB(Xxf86vm, XF86VidModeQueryVersion, have_vm_lib=yes)
|
||||
if test x$have_vm_lib = xyes ; then
|
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lXxf86vm"
|
||||
definitely_enable_video_x11_vm=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$definitely_enable_video_x11_vm = xyes; then
|
||||
AC_DEFINE(SDL_VIDEO_DRIVER_X11_XVIDMODE, 1, [ ])
|
||||
SUMMARY_video_x11="${SUMMARY_video_x11} xvidmode"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$have_x != xyes; then
|
||||
|
|
|
@ -3,8 +3,8 @@ Linux
|
|||
|
||||
By default SDL will only link against glibc, the rest of the features will be
|
||||
enabled dynamically at runtime depending on the available features on the target
|
||||
system. So, for example if you built SDL with Xinerama support and the target
|
||||
system does not have the Xinerama libraries installed, it will be disabled
|
||||
system. So, for example if you built SDL with XRandR support and the target
|
||||
system does not have the XRandR libraries installed, it will be disabled
|
||||
at runtime, and you won't get a missing library error, at least with the
|
||||
default configuration parameters.
|
||||
|
||||
|
@ -17,7 +17,7 @@ Ubuntu 20.04, all available features enabled:
|
|||
sudo apt-get install build-essential git make cmake autoconf automake \
|
||||
libtool pkg-config libasound2-dev libpulse-dev libaudio-dev libjack-dev \
|
||||
libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev \
|
||||
libxinerama-dev libxxf86vm-dev libxss-dev libgl1-mesa-dev libdbus-1-dev \
|
||||
libxss-dev libgl1-mesa-dev libdbus-1-dev \
|
||||
libudev-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev \
|
||||
fcitx-libs-dev libsamplerate0-dev libsndio-dev libwayland-dev \
|
||||
libxkbcommon-dev libdrm-dev libgbm-dev
|
||||
|
@ -27,12 +27,11 @@ Fedora 35, all available features enabled:
|
|||
sudo yum install gcc git-core make cmake autoconf automake libtool \
|
||||
alsa-lib-devel pulseaudio-libs-devel nas-devel pipewire-devel \
|
||||
libX11-devel libXext-devel libXrandr-devel libXcursor-devel libXfixes-devel \
|
||||
libXi-devel libXinerama-devel libXxf86vm-devel libXScrnSaver-devel \
|
||||
dbus-devel ibus-devel fcitx-devel systemd-devel mesa-libGL-devel \
|
||||
libxkbcommon-devel mesa-libGLES-devel mesa-libEGL-devel vulkan-devel \
|
||||
wayland-devel wayland-protocols-devel libdrm-devel mesa-libgbm-devel \
|
||||
libusb-devel pipewire-jack-audio-connection-kit-devel libdecor-devel \
|
||||
libsamplerate-devel
|
||||
libXi-devel libXScrnSaver-devel dbus-devel ibus-devel fcitx-devel \
|
||||
systemd-devel mesa-libGL-devel libxkbcommon-devel mesa-libGLES-devel
|
||||
mesa-libEGL-devel vulkan-devel wayland-devel wayland-protocols-devel
|
||||
libdrm-devel mesa-libgbm-devel libusb-devel libdecor-devel \
|
||||
libsamplerate-devel pipewire-jack-audio-connection-kit-devel \
|
||||
|
||||
NOTES:
|
||||
- This includes all the audio targets except arts and esd, because Ubuntu
|
||||
|
|
|
@ -63,7 +63,7 @@ Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
|
|||
edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
|
||||
|
||||
sudo chroot $SYSROOT
|
||||
apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev
|
||||
apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxss-dev
|
||||
exit
|
||||
sudo umount $SYSROOT/dev
|
||||
sudo umount $SYSROOT/proc
|
||||
|
|
|
@ -421,22 +421,18 @@
|
|||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC @SDL_VIDEO_DRIVER_X11_DYNAMIC@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT @SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR @SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA @SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 @SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES @SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR @SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS @SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE @SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XCURSOR @SDL_VIDEO_DRIVER_X11_XCURSOR@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XDBE @SDL_VIDEO_DRIVER_X11_XDBE@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XINERAMA @SDL_VIDEO_DRIVER_X11_XINERAMA@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2 @SDL_VIDEO_DRIVER_X11_XINPUT2@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH @SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XFIXES @SDL_VIDEO_DRIVER_X11_XFIXES@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XRANDR @SDL_VIDEO_DRIVER_X11_XRANDR@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XSCRNSAVER @SDL_VIDEO_DRIVER_X11_XSCRNSAVER@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XSHAPE @SDL_VIDEO_DRIVER_X11_XSHAPE@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_XVIDMODE @SDL_VIDEO_DRIVER_X11_XVIDMODE@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS @SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@
|
||||
#cmakedefine SDL_VIDEO_DRIVER_VITA @SDL_VIDEO_DRIVER_VITA@
|
||||
|
|
|
@ -388,22 +388,18 @@
|
|||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS
|
||||
#undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE
|
||||
#undef SDL_VIDEO_DRIVER_X11_XCURSOR
|
||||
#undef SDL_VIDEO_DRIVER_X11_XDBE
|
||||
#undef SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
#undef SDL_VIDEO_DRIVER_X11_XINPUT2
|
||||
#undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH
|
||||
#undef SDL_VIDEO_DRIVER_X11_XFIXES
|
||||
#undef SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
#undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER
|
||||
#undef SDL_VIDEO_DRIVER_X11_XSHAPE
|
||||
#undef SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
#undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS
|
||||
#undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
|
||||
#undef SDL_VIDEO_DRIVER_NACL
|
||||
|
|
|
@ -186,17 +186,13 @@
|
|||
#undef SDL_VIDEO_DRIVER_X11
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/opt/X11/lib/libX11.6.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/opt/X11/lib/libXext.6.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/opt/X11/lib/libXinerama.1.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/opt/X11/lib/libXi.6.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/opt/X11/lib/libXrandr.2.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/opt/X11/lib/libXss.1.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/opt/X11/lib/libXxf86vm.1.dylib"
|
||||
#define SDL_VIDEO_DRIVER_X11_XDBE 1
|
||||
#define SDL_VIDEO_DRIVER_X11_XINERAMA 1
|
||||
#define SDL_VIDEO_DRIVER_X11_XRANDR 1
|
||||
#define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1
|
||||
#define SDL_VIDEO_DRIVER_X11_XSHAPE 1
|
||||
#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1
|
||||
#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1
|
||||
|
||||
#ifdef MAC_OS_X_VERSION_10_8
|
||||
|
|
|
@ -1590,13 +1590,11 @@ extern "C" {
|
|||
#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
|
||||
|
||||
/**
|
||||
* \brief A variable controlling whether the X11 Xinerama extension should be used.
|
||||
* \brief A no-longer-used variable controlling whether the X11 Xinerama extension should be used.
|
||||
*
|
||||
* This variable can be set to the following values:
|
||||
* "0" - Disable Xinerama
|
||||
* "1" - Enable Xinerama
|
||||
*
|
||||
* By default SDL will use Xinerama if it is available.
|
||||
* Before SDL 2.0.24, this would let apps and users disable Xinerama support on X11.
|
||||
* Now SDL never uses Xinerama, and does not check for this hint at all.
|
||||
* The preprocessor define is left here for source compatibility.
|
||||
*/
|
||||
#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA"
|
||||
|
||||
|
@ -1607,18 +1605,16 @@ extern "C" {
|
|||
* "0" - Disable XRandR
|
||||
* "1" - Enable XRandR
|
||||
*
|
||||
* By default SDL will not use XRandR because of window manager issues.
|
||||
* By default SDL will use XRandR.
|
||||
*/
|
||||
#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR"
|
||||
|
||||
/**
|
||||
* \brief A variable controlling whether the X11 VidMode extension should be used.
|
||||
* \brief A no-longer-used variable controlling whether the X11 VidMode extension should be used.
|
||||
*
|
||||
* This variable can be set to the following values:
|
||||
* "0" - Disable XVidMode
|
||||
* "1" - Enable XVidMode
|
||||
*
|
||||
* By default SDL will use XVidMode if it is available.
|
||||
* Before SDL 2.0.24, this would let apps and users disable XVidMode support on X11.
|
||||
* Now SDL never uses XVidMode, and does not check for this hint at all.
|
||||
* The preprocessor define is left here for source compatibility.
|
||||
*/
|
||||
#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE"
|
||||
|
||||
|
|
|
@ -47,9 +47,6 @@ typedef struct
|
|||
#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR NULL
|
||||
#endif
|
||||
#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA NULL
|
||||
#endif
|
||||
#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 NULL
|
||||
#endif
|
||||
|
@ -62,20 +59,15 @@ typedef struct
|
|||
#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS NULL
|
||||
#endif
|
||||
#ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE
|
||||
#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE NULL
|
||||
#endif
|
||||
|
||||
static x11dynlib x11libs[] = {
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS},
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE}
|
||||
{NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS}
|
||||
};
|
||||
|
||||
static void *
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
#if SDL_VIDEO_DRIVER_X11_XDBE
|
||||
#include <X11/extensions/Xdbe.h>
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
#include <X11/extensions/Xinerama.h>
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XINPUT2
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#endif
|
||||
|
@ -70,9 +67,6 @@
|
|||
#if SDL_VIDEO_DRIVER_X11_XSHAPE
|
||||
#include <X11/extensions/shape.h>
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
#include <X11/extensions/xf86vmode.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
|
|
|
@ -148,62 +148,6 @@ X11_GetPixelFormatFromVisualInfo(Display * display, XVisualInfo * vinfo)
|
|||
return SDL_PIXELFORMAT_UNKNOWN;
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
static SDL_bool
|
||||
CheckXinerama(Display * display, int *major, int *minor)
|
||||
{
|
||||
int event_base = 0;
|
||||
int error_base = 0;
|
||||
|
||||
/* Default the extension not available */
|
||||
*major = *minor = 0;
|
||||
|
||||
/* Allow environment override */
|
||||
if (!SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_XINERAMA, SDL_TRUE)) {
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("Xinerama disabled due to hint\n");
|
||||
#endif
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!SDL_X11_HAVE_XINERAMA) {
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("Xinerama support not available\n");
|
||||
#endif
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
/* Query the extension version */
|
||||
if (!X11_XineramaQueryExtension(display, &event_base, &error_base) ||
|
||||
!X11_XineramaQueryVersion(display, major, minor) ||
|
||||
!X11_XineramaIsActive(display)) {
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("Xinerama not active on the display\n");
|
||||
#endif
|
||||
return SDL_FALSE;
|
||||
}
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("Xinerama available at version %d.%d!\n", *major, *minor);
|
||||
#endif
|
||||
return SDL_TRUE;
|
||||
}
|
||||
|
||||
/* !!! FIXME: remove this later. */
|
||||
/* we have a weird bug where XineramaQueryScreens() throws an X error, so this
|
||||
is here to help track it down (and not crash, too!). */
|
||||
static SDL_bool xinerama_triggered_error = SDL_FALSE;
|
||||
static int
|
||||
X11_XineramaFailed(Display * d, XErrorEvent * e)
|
||||
{
|
||||
xinerama_triggered_error = SDL_TRUE;
|
||||
fprintf(stderr, "XINERAMA X ERROR: type=%d serial=%lu err=%u req=%u minor=%u\n",
|
||||
e->type, e->serial, (unsigned int) e->error_code,
|
||||
(unsigned int) e->request_code, (unsigned int) e->minor_code);
|
||||
fflush(stderr);
|
||||
return 0;
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
static SDL_bool
|
||||
CheckXRandR(Display * display, int *major, int *minor)
|
||||
|
@ -506,7 +450,7 @@ X11_InitModes_XRandR(_THIS)
|
|||
displaydata->scanline_pad = scanline_pad;
|
||||
displaydata->x = display_x;
|
||||
displaydata->y = display_y;
|
||||
displaydata->use_xrandr = 1;
|
||||
displaydata->use_xrandr = SDL_TRUE;
|
||||
displaydata->xrandr_output = res->outputs[output];
|
||||
|
||||
SetXRandRModeInfo(dpy, res, output_crtc, modeID, &mode);
|
||||
|
@ -534,331 +478,25 @@ X11_InitModes_XRandR(_THIS)
|
|||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
static SDL_bool
|
||||
CheckVidMode(Display * display, int *major, int *minor)
|
||||
{
|
||||
int vm_event, vm_error = -1;
|
||||
/* Default the extension not available */
|
||||
*major = *minor = 0;
|
||||
|
||||
/* Allow environment override */
|
||||
if (!SDL_GetHintBoolean(SDL_HINT_VIDEO_X11_XVIDMODE, SDL_TRUE)) {
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("XVidMode disabled due to hint\n");
|
||||
#endif
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
if (!SDL_X11_HAVE_XVIDMODE) {
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("XVidMode support not available\n");
|
||||
#endif
|
||||
return SDL_FALSE;
|
||||
}
|
||||
|
||||
/* Query the extension version */
|
||||
if (!X11_XF86VidModeQueryExtension(display, &vm_event, &vm_error)
|
||||
|| !X11_XF86VidModeQueryVersion(display, major, minor)) {
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("XVidMode not active on the display\n");
|
||||
#endif
|
||||
return SDL_FALSE;
|
||||
}
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("XVidMode available at version %d.%d!\n", *major, *minor);
|
||||
#endif
|
||||
return SDL_TRUE;
|
||||
}
|
||||
|
||||
static
|
||||
Bool XF86VidModeGetModeInfo(Display * dpy, int scr,
|
||||
XF86VidModeModeInfo* info)
|
||||
{
|
||||
Bool retval;
|
||||
int dotclock;
|
||||
XF86VidModeModeLine l;
|
||||
SDL_zerop(info);
|
||||
SDL_zero(l);
|
||||
retval = X11_XF86VidModeGetModeLine(dpy, scr, &dotclock, &l);
|
||||
info->dotclock = dotclock;
|
||||
info->hdisplay = l.hdisplay;
|
||||
info->hsyncstart = l.hsyncstart;
|
||||
info->hsyncend = l.hsyncend;
|
||||
info->htotal = l.htotal;
|
||||
info->hskew = l.hskew;
|
||||
info->vdisplay = l.vdisplay;
|
||||
info->vsyncstart = l.vsyncstart;
|
||||
info->vsyncend = l.vsyncend;
|
||||
info->vtotal = l.vtotal;
|
||||
info->flags = l.flags;
|
||||
info->privsize = l.privsize;
|
||||
info->private = l.private;
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
CalculateXVidModeRefreshRate(const XF86VidModeModeInfo * info)
|
||||
{
|
||||
return (info->htotal
|
||||
&& info->vtotal) ? (1000 * info->dotclock / (info->htotal *
|
||||
info->vtotal)) : 0;
|
||||
}
|
||||
|
||||
static SDL_bool
|
||||
SetXVidModeModeInfo(const XF86VidModeModeInfo *info, SDL_DisplayMode *mode)
|
||||
{
|
||||
mode->w = info->hdisplay;
|
||||
mode->h = info->vdisplay;
|
||||
mode->refresh_rate = CalculateXVidModeRefreshRate(info);
|
||||
((SDL_DisplayModeData*)mode->driverdata)->vm_mode = *info;
|
||||
return SDL_TRUE;
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */
|
||||
|
||||
int
|
||||
X11_InitModes(_THIS)
|
||||
{
|
||||
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
|
||||
int snum, screen, screencount = 0;
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
int xinerama_major, xinerama_minor;
|
||||
int use_xinerama = 0;
|
||||
XineramaScreenInfo *xinerama = NULL;
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
int xrandr_major, xrandr_minor;
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
int vm_major, vm_minor;
|
||||
int use_vidmode = 0;
|
||||
#endif
|
||||
|
||||
/* XRandR is the One True Modern Way to do this on X11. If it's enabled and
|
||||
available, don't even look at other ways of doing things. */
|
||||
/* XRandR is the One True Modern Way to do this on X11. If this
|
||||
fails, we just won't report any display modes except the current
|
||||
desktop size. */
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
/* require at least XRandR v1.3 */
|
||||
if (CheckXRandR(data->display, &xrandr_major, &xrandr_minor) &&
|
||||
(xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 3))) {
|
||||
if (X11_InitModes_XRandR(_this) == 0)
|
||||
return 0;
|
||||
{
|
||||
int xrandr_major, xrandr_minor;
|
||||
/* require at least XRandR v1.3 */
|
||||
if (CheckXRandR(data->display, &xrandr_major, &xrandr_minor) &&
|
||||
(xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 3))) {
|
||||
X11_InitModes_XRandR(_this);
|
||||
}
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */
|
||||
|
||||
/* !!! FIXME: eventually remove support for Xinerama and XVidMode (everything below here). */
|
||||
|
||||
/* This is a workaround for some apps (UnrealEngine4, for example) until
|
||||
we sort out the ramifications of removing XVidMode support outright.
|
||||
This block should be removed with the XVidMode support. */
|
||||
{
|
||||
if (SDL_GetHintBoolean("SDL_VIDEO_X11_REQUIRE_XRANDR", SDL_FALSE)) {
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
return SDL_SetError("XRandR support is required but not available");
|
||||
#else
|
||||
return SDL_SetError("XRandR support is required but not built into SDL!");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
/* Query Xinerama extention
|
||||
* NOTE: This works with Nvidia Twinview correctly, but you need version 302.17 (released on June 2012)
|
||||
* or newer of the Nvidia binary drivers
|
||||
*/
|
||||
if (CheckXinerama(data->display, &xinerama_major, &xinerama_minor)) {
|
||||
int (*handler) (Display *, XErrorEvent *);
|
||||
X11_XSync(data->display, False);
|
||||
handler = X11_XSetErrorHandler(X11_XineramaFailed);
|
||||
xinerama = X11_XineramaQueryScreens(data->display, &screencount);
|
||||
X11_XSync(data->display, False);
|
||||
X11_XSetErrorHandler(handler);
|
||||
if (xinerama_triggered_error) {
|
||||
xinerama = 0;
|
||||
}
|
||||
if (xinerama) {
|
||||
use_xinerama = xinerama_major * 100 + xinerama_minor;
|
||||
}
|
||||
}
|
||||
if (!xinerama) {
|
||||
screencount = ScreenCount(data->display);
|
||||
}
|
||||
#else
|
||||
screencount = ScreenCount(data->display);
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
if (CheckVidMode(data->display, &vm_major, &vm_minor)) {
|
||||
use_vidmode = vm_major * 100 + vm_minor;
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */
|
||||
|
||||
for (snum = 0; snum < screencount; ++snum) {
|
||||
XVisualInfo vinfo;
|
||||
SDL_VideoDisplay display;
|
||||
SDL_DisplayData *displaydata;
|
||||
SDL_DisplayMode mode;
|
||||
SDL_DisplayModeData *modedata;
|
||||
XPixmapFormatValues *pixmapFormats;
|
||||
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) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (get_visualinfo(data->display, screen, &vinfo) < 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (get_visualinfo(data->display, screen, &vinfo) < 0) {
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
displaydata = (SDL_DisplayData *) SDL_calloc(1, sizeof(*displaydata));
|
||||
if (!displaydata) {
|
||||
continue;
|
||||
}
|
||||
display_name[0] = '\0';
|
||||
|
||||
mode.format = X11_GetPixelFormatFromVisualInfo(data->display, &vinfo);
|
||||
if (SDL_ISPIXELFORMAT_INDEXED(mode.format)) {
|
||||
/* We don't support palettized modes now */
|
||||
SDL_free(displaydata);
|
||||
continue;
|
||||
}
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
if (xinerama) {
|
||||
mode.w = xinerama[screen].width;
|
||||
mode.h = xinerama[screen].height;
|
||||
} else {
|
||||
mode.w = DisplayWidth(data->display, screen);
|
||||
mode.h = DisplayHeight(data->display, screen);
|
||||
}
|
||||
#else
|
||||
mode.w = DisplayWidth(data->display, screen);
|
||||
mode.h = DisplayHeight(data->display, screen);
|
||||
#endif
|
||||
mode.refresh_rate = 0;
|
||||
|
||||
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData));
|
||||
if (!modedata) {
|
||||
SDL_free(displaydata);
|
||||
continue;
|
||||
}
|
||||
mode.driverdata = modedata;
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
/* Most of SDL's calls to X11 are unwaware of Xinerama, and to X11 standard calls, when Xinerama is active,
|
||||
* there's only one screen available. So we force the screen number to zero and
|
||||
* let Xinerama specific code handle specific functionality using displaydata->xinerama_info
|
||||
*/
|
||||
if (use_xinerama) {
|
||||
displaydata->screen = 0;
|
||||
displaydata->use_xinerama = use_xinerama;
|
||||
displaydata->xinerama_info = xinerama[screen];
|
||||
displaydata->xinerama_screen = screen;
|
||||
}
|
||||
else displaydata->screen = screen;
|
||||
#else
|
||||
displaydata->screen = screen;
|
||||
#endif
|
||||
displaydata->visual = vinfo.visual;
|
||||
displaydata->depth = vinfo.depth;
|
||||
|
||||
/* We use the displaydata screen index here so that this works
|
||||
for both the Xinerama case, where we get the overall DPI,
|
||||
and the regular X11 screen info case. */
|
||||
displaydata->hdpi = (float)DisplayWidth(data->display, displaydata->screen) * 25.4f /
|
||||
DisplayWidthMM(data->display, displaydata->screen);
|
||||
displaydata->vdpi = (float)DisplayHeight(data->display, displaydata->screen) * 25.4f /
|
||||
DisplayHeightMM(data->display, displaydata->screen);
|
||||
displaydata->ddpi = SDL_ComputeDiagonalDPI(DisplayWidth(data->display, displaydata->screen),
|
||||
DisplayHeight(data->display, displaydata->screen),
|
||||
(float)DisplayWidthMM(data->display, displaydata->screen) / 25.4f,
|
||||
(float)DisplayHeightMM(data->display, displaydata->screen) / 25.4f);
|
||||
|
||||
displaydata->scanline_pad = SDL_BYTESPERPIXEL(mode.format) * 8;
|
||||
pixmapFormats = X11_XListPixmapFormats(data->display, &n);
|
||||
if (pixmapFormats) {
|
||||
for (i = 0; i < n; ++i) {
|
||||
if (pixmapFormats[i].depth == displaydata->depth) {
|
||||
displaydata->scanline_pad = pixmapFormats[i].scanline_pad;
|
||||
break;
|
||||
}
|
||||
}
|
||||
X11_XFree(pixmapFormats);
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
if (use_xinerama) {
|
||||
displaydata->x = xinerama[screen].x_org;
|
||||
displaydata->y = xinerama[screen].y_org;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
displaydata->x = 0;
|
||||
displaydata->y = 0;
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
if (!displaydata->use_xrandr &&
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
/* XVidMode only works on the screen at the origin */
|
||||
(!displaydata->use_xinerama ||
|
||||
(displaydata->x == 0 && displaydata->y == 0)) &&
|
||||
#endif
|
||||
use_vidmode) {
|
||||
displaydata->use_vidmode = use_vidmode;
|
||||
if (displaydata->use_xinerama) {
|
||||
displaydata->vidmode_screen = 0;
|
||||
} else {
|
||||
displaydata->vidmode_screen = screen;
|
||||
}
|
||||
XF86VidModeGetModeInfo(data->display, displaydata->vidmode_screen, &modedata->vm_mode);
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */
|
||||
|
||||
SDL_zero(display);
|
||||
if (*display_name) {
|
||||
display.name = display_name;
|
||||
}
|
||||
display.desktop_mode = mode;
|
||||
display.current_mode = mode;
|
||||
display.driverdata = displaydata;
|
||||
SDL_AddVideoDisplay(&display, SDL_FALSE);
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
if (xinerama) X11_XFree(xinerama);
|
||||
#endif
|
||||
|
||||
if (_this->num_displays == 0) {
|
||||
return SDL_SetError("No available displays");
|
||||
}
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
if (use_vidmode) { /* we intend to remove support for XVidMode soon. */
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "SDL is using XVidMode to manage your displays!");
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "This almost always means either SDL was misbuilt");
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "or your X server is insufficient. Please check your setup!");
|
||||
SDL_LogWarn(SDL_LOG_CATEGORY_VIDEO, "Fullscreen and/or multiple displays will not work well.");
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -867,10 +505,6 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display)
|
|||
{
|
||||
Display *display = ((SDL_VideoData *) _this->driverdata)->display;
|
||||
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata;
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
int nmodes;
|
||||
XF86VidModeModeInfo ** modes;
|
||||
#endif
|
||||
SDL_DisplayMode mode;
|
||||
|
||||
/* Unfortunately X11 requires the window to be created with the correct
|
||||
|
@ -882,52 +516,6 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display)
|
|||
mode.format = sdl_display->current_mode.format;
|
||||
mode.driverdata = NULL;
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
if (data->use_xinerama) {
|
||||
int screen_w;
|
||||
int screen_h;
|
||||
|
||||
screen_w = DisplayWidth(display, data->screen);
|
||||
screen_h = DisplayHeight(display, data->screen);
|
||||
|
||||
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)) {
|
||||
SDL_DisplayModeData *modedata;
|
||||
/* 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;
|
||||
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData));
|
||||
if (modedata) {
|
||||
*modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata;
|
||||
}
|
||||
mode.driverdata = modedata;
|
||||
if (!SDL_AddDisplayMode(sdl_display, &mode)) {
|
||||
SDL_free(modedata);
|
||||
}
|
||||
}
|
||||
else if (!data->use_xrandr)
|
||||
{
|
||||
SDL_DisplayModeData *modedata;
|
||||
/* Add the current mode of each monitor otherwise if we can't get them from xrandr */
|
||||
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;
|
||||
if (!SDL_AddDisplayMode(sdl_display, &mode)) {
|
||||
SDL_free(modedata);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
if (data->use_xrandr) {
|
||||
XRRScreenResources *res;
|
||||
|
@ -960,37 +548,7 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display)
|
|||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
if (data->use_vidmode &&
|
||||
X11_XF86VidModeGetAllModeLines(display, data->vidmode_screen, &nmodes, &modes)) {
|
||||
int i;
|
||||
SDL_DisplayModeData *modedata;
|
||||
|
||||
#ifdef X11MODES_DEBUG
|
||||
printf("VidMode modes: (unsorted)\n");
|
||||
for (i = 0; i < nmodes; ++i) {
|
||||
printf("Mode %d: %d x %d @ %d, flags: 0x%x\n", i,
|
||||
modes[i]->hdisplay, modes[i]->vdisplay,
|
||||
CalculateXVidModeRefreshRate(modes[i]), modes[i]->flags);
|
||||
}
|
||||
#endif
|
||||
for (i = 0; i < nmodes; ++i) {
|
||||
modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData));
|
||||
if (!modedata) {
|
||||
continue;
|
||||
}
|
||||
mode.driverdata = modedata;
|
||||
|
||||
if (!SetXVidModeModeInfo(modes[i], &mode) || !SDL_AddDisplayMode(sdl_display, &mode)) {
|
||||
SDL_free(modedata);
|
||||
}
|
||||
}
|
||||
X11_XFree(modes);
|
||||
return;
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */
|
||||
|
||||
if (!data->use_xrandr && !data->use_vidmode) {
|
||||
if (!data->use_xrandr) {
|
||||
SDL_DisplayModeData *modedata;
|
||||
/* Add the desktop mode */
|
||||
mode = sdl_display->desktop_mode;
|
||||
|
@ -1105,12 +663,6 @@ freeInfo:
|
|||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
if (data->use_vidmode) {
|
||||
X11_XF86VidModeSwitchToMode(display, data->vidmode_screen, &modedata->vm_mode);
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1129,19 +681,6 @@ X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect)
|
|||
rect->w = sdl_display->current_mode.w;
|
||||
rect->h = sdl_display->current_mode.h;
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
/* Get the real current bounds of the display */
|
||||
if (data->use_xinerama) {
|
||||
Display *display = ((SDL_VideoData *) _this->driverdata)->display;
|
||||
int screencount;
|
||||
XineramaScreenInfo *xinerama = X11_XineramaQueryScreens(display, &screencount);
|
||||
if (xinerama) {
|
||||
rect->x = xinerama[data->xinerama_screen].x_org;
|
||||
rect->y = xinerama[data->xinerama_screen].y_org;
|
||||
X11_XFree(xinerama);
|
||||
}
|
||||
}
|
||||
#endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,35 +35,20 @@ typedef struct
|
|||
float hdpi;
|
||||
float vdpi;
|
||||
|
||||
int use_xinerama;
|
||||
int use_xrandr;
|
||||
int use_vidmode;
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
XineramaScreenInfo xinerama_info;
|
||||
int xinerama_screen;
|
||||
#endif
|
||||
SDL_bool use_xrandr;
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
RROutput xrandr_output;
|
||||
#endif
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
int vidmode_screen;
|
||||
#endif
|
||||
|
||||
} SDL_DisplayData;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
#if SDL_VIDEO_DRIVER_X11_XRANDR
|
||||
RRMode xrandr_mode;
|
||||
#else
|
||||
int unused; /* just so struct isn't empty. */
|
||||
#endif
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
XF86VidModeModeInfo vm_mode;
|
||||
#endif
|
||||
|
||||
} SDL_DisplayModeData;
|
||||
|
||||
extern int X11_InitModes(_THIS);
|
||||
|
|
|
@ -260,15 +260,6 @@ SDL_X11_SYM(void,XdbeFreeVisualInfo,(XdbeScreenVisualInfo *visual_info),(visual_
|
|||
SDL_X11_SYM(XdbeBackBufferAttributes*,XdbeGetBackBufferAttributes,(Display *dpy,XdbeBackBuffer buffer),(dpy,buffer),return)
|
||||
#endif
|
||||
|
||||
/* Xinerama support */
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
SDL_X11_MODULE(XINERAMA)
|
||||
SDL_X11_SYM(Bool,XineramaIsActive,(Display *a),(a),return)
|
||||
SDL_X11_SYM(Bool,XineramaQueryExtension,(Display *a,int *b,int *c),(a,b,c),return)
|
||||
SDL_X11_SYM(Status,XineramaQueryVersion,(Display *a,int *b,int *c),(a,b,c),return)
|
||||
SDL_X11_SYM(XineramaScreenInfo*,XineramaQueryScreens,(Display *a, int *b),(a,b),return)
|
||||
#endif
|
||||
|
||||
/* XInput2 support for multiple mice, tablets, etc. */
|
||||
#if SDL_VIDEO_DRIVER_X11_XINPUT2
|
||||
SDL_X11_MODULE(XINPUT2)
|
||||
|
@ -321,17 +312,6 @@ SDL_X11_MODULE(XSHAPE)
|
|||
SDL_X11_SYM(void,XShapeCombineMask,(Display *dpy,Window dest,int dest_kind,int x_off,int y_off,Pixmap src,int op),(dpy,dest,dest_kind,x_off,y_off,src,op),)
|
||||
#endif
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
SDL_X11_MODULE(XVIDMODE)
|
||||
SDL_X11_SYM(Bool,XF86VidModeGetAllModeLines,(Display *a,int b,int *c,XF86VidModeModeInfo ***d),(a,b,c,d),return)
|
||||
SDL_X11_SYM(Bool,XF86VidModeGetModeLine,(Display *a,int b,int *c,XF86VidModeModeLine *d),(a,b,c,d),return)
|
||||
SDL_X11_SYM(Bool,XF86VidModeGetViewPort,(Display *a,int b,int *c,int *d),(a,b,c,d),return)
|
||||
SDL_X11_SYM(Bool,XF86VidModeQueryExtension,(Display *a,int *b,int *c),(a,b,c),return)
|
||||
SDL_X11_SYM(Bool,XF86VidModeQueryVersion,(Display *a,int *b,int *c),(a,b,c),return)
|
||||
SDL_X11_SYM(Bool,XF86VidModeSwitchToMode,(Display *a,int b,XF86VidModeModeInfo *c),(a,b,c),return)
|
||||
SDL_X11_SYM(Bool,XF86VidModeLockModeSwitch,(Display *a,int b,int c),(a,b,c),return)
|
||||
#endif
|
||||
|
||||
#undef SDL_X11_MODULE
|
||||
#undef SDL_X11_SYM
|
||||
|
||||
|
|
|
@ -37,9 +37,6 @@
|
|||
#if SDL_VIDEO_DRIVER_X11_XDBE
|
||||
#include <X11/extensions/Xdbe.h>
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XINERAMA
|
||||
#include <X11/extensions/Xinerama.h>
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XINPUT2
|
||||
#include <X11/extensions/XInput2.h>
|
||||
#endif
|
||||
|
@ -52,9 +49,6 @@
|
|||
#if SDL_VIDEO_DRIVER_X11_XSHAPE
|
||||
#include <X11/extensions/shape.h>
|
||||
#endif
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
#include <X11/extensions/xf86vmode.h>
|
||||
#endif
|
||||
|
||||
#include "../../core/linux/SDL_dbus.h"
|
||||
#include "../../core/linux/SDL_ime.h"
|
||||
|
|
|
@ -72,13 +72,6 @@ X11_XIfEventTimeout(Display *display, XEvent *event_return, Bool (*predicate)(),
|
|||
}
|
||||
*/
|
||||
|
||||
static SDL_bool
|
||||
X11_IsWindowLegacyFullscreen(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||
return (data->fswindow != 0);
|
||||
}
|
||||
|
||||
static SDL_bool
|
||||
X11_IsWindowMapped(_THIS, SDL_Window * window)
|
||||
{
|
||||
|
@ -1433,161 +1426,12 @@ X11_SetWindowFullscreenViaWM(_THIS, SDL_Window * window, SDL_VideoDisplay * _dis
|
|||
X11_XFlush(display);
|
||||
}
|
||||
|
||||
/* This handles fullscreen itself, outside the Window Manager. */
|
||||
static void
|
||||
X11_BeginWindowFullscreenLegacy(_THIS, SDL_Window * window, SDL_VideoDisplay * _display)
|
||||
{
|
||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||
SDL_DisplayData *displaydata = (SDL_DisplayData *) _display->driverdata;
|
||||
Visual *visual = data->visual;
|
||||
Display *display = data->videodata->display;
|
||||
const int screen = displaydata->screen;
|
||||
Window root = RootWindow(display, screen);
|
||||
const int def_vis = (visual == DefaultVisual(display, screen));
|
||||
unsigned long xattrmask = 0;
|
||||
XSetWindowAttributes xattr;
|
||||
XEvent ev;
|
||||
SDL_Rect rect;
|
||||
|
||||
if ( data->fswindow ) {
|
||||
return; /* already fullscreen, I hope. */
|
||||
}
|
||||
|
||||
X11_GetDisplayBounds(_this, _display, &rect);
|
||||
|
||||
SDL_zero(xattr);
|
||||
xattr.override_redirect = True;
|
||||
xattrmask |= CWOverrideRedirect;
|
||||
xattr.background_pixel = def_vis ? BlackPixel(display, screen) : 0;
|
||||
xattrmask |= CWBackPixel;
|
||||
xattr.border_pixel = 0;
|
||||
xattrmask |= CWBorderPixel;
|
||||
xattr.colormap = data->colormap;
|
||||
xattrmask |= CWColormap;
|
||||
|
||||
data->fswindow = X11_XCreateWindow(display, root,
|
||||
rect.x, rect.y, rect.w, rect.h, 0,
|
||||
displaydata->depth, InputOutput,
|
||||
visual, xattrmask, &xattr);
|
||||
|
||||
X11_XSelectInput(display, data->fswindow, StructureNotifyMask);
|
||||
X11_XSetWindowBackground(display, data->fswindow, 0);
|
||||
X11_XInstallColormap(display, data->colormap);
|
||||
X11_XClearWindow(display, data->fswindow);
|
||||
X11_XMapRaised(display, data->fswindow);
|
||||
|
||||
/* Make sure the fswindow is in view by warping mouse to the corner */
|
||||
X11_XUngrabPointer(display, CurrentTime);
|
||||
X11_XWarpPointer(display, None, root, 0, 0, 0, 0, rect.x, rect.y);
|
||||
|
||||
/* Wait to be mapped, filter Unmap event out if it arrives. */
|
||||
X11_XIfEvent(display, &ev, &isMapNotify, (XPointer)&data->fswindow);
|
||||
X11_XCheckIfEvent(display, &ev, &isUnmapNotify, (XPointer)&data->fswindow);
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_XVIDMODE
|
||||
if ( displaydata->use_vidmode ) {
|
||||
X11_XF86VidModeLockModeSwitch(display, screen, True);
|
||||
}
|
||||
#endif
|
||||
|
||||
SetWindowBordered(display, displaydata->screen, data->xwindow, SDL_FALSE);
|
||||
|
||||
/* Center actual window within our cover-the-screen window. */
|
||||
X11_XReparentWindow(display, data->xwindow, data->fswindow,
|
||||
(rect.w - window->w) / 2, (rect.h - window->h) / 2);
|
||||
|
||||
/* Move the mouse to the upper left to make sure it's on-screen */
|
||||
X11_XWarpPointer(display, None, root, 0, 0, 0, 0, rect.x, rect.y);
|
||||
|
||||
/* Center mouse in the fullscreen window. */
|
||||
rect.x += (rect.w / 2);
|
||||
rect.y += (rect.h / 2);
|
||||
X11_XWarpPointer(display, None, root, 0, 0, 0, 0, rect.x, rect.y);
|
||||
|
||||
/* Wait to be mapped, filter Unmap event out if it arrives. */
|
||||
X11_XIfEvent(display, &ev, &isMapNotify, (XPointer)&data->xwindow);
|
||||
X11_XCheckIfEvent(display, &ev, &isUnmapNotify, (XPointer)&data->xwindow);
|
||||
|
||||
SDL_UpdateWindowGrab(window);
|
||||
}
|
||||
|
||||
static void
|
||||
X11_EndWindowFullscreenLegacy(_THIS, SDL_Window * window, SDL_VideoDisplay * _display)
|
||||
{
|
||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||
SDL_DisplayData *displaydata = (SDL_DisplayData *) _display->driverdata;
|
||||
Display *display = data->videodata->display;
|
||||
const int screen = displaydata->screen;
|
||||
Window root = RootWindow(display, screen);
|
||||
Window fswindow = data->fswindow;
|
||||
XEvent ev;
|
||||
|
||||
if (!data->fswindow) {
|
||||
return; /* already not fullscreen, I hope. */
|
||||
}
|
||||
|
||||
data->fswindow = None;
|
||||
|
||||
#if SDL_VIDEO_DRIVER_X11_VIDMODE
|
||||
if ( displaydata->use_vidmode ) {
|
||||
X11_XF86VidModeLockModeSwitch(display, screen, False);
|
||||
}
|
||||
#endif
|
||||
|
||||
SDL_UpdateWindowGrab(window);
|
||||
|
||||
X11_XReparentWindow(display, data->xwindow, root, window->x, window->y);
|
||||
|
||||
/* flush these events so they don't confuse normal event handling */
|
||||
X11_XSync(display, False);
|
||||
X11_XCheckIfEvent(display, &ev, &isMapNotify, (XPointer)&data->xwindow);
|
||||
X11_XCheckIfEvent(display, &ev, &isUnmapNotify, (XPointer)&data->xwindow);
|
||||
|
||||
SetWindowBordered(display, screen, data->xwindow,
|
||||
(window->flags & SDL_WINDOW_BORDERLESS) == 0);
|
||||
|
||||
X11_XWithdrawWindow(display, fswindow, screen);
|
||||
|
||||
/* Wait to be unmapped. */
|
||||
X11_XIfEvent(display, &ev, &isUnmapNotify, (XPointer)&fswindow);
|
||||
X11_XDestroyWindow(display, fswindow);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
X11_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * _display, SDL_bool fullscreen)
|
||||
{
|
||||
/* !!! FIXME: SDL_Hint? */
|
||||
SDL_bool legacy = SDL_FALSE;
|
||||
const char *env = SDL_getenv("SDL_VIDEO_X11_LEGACY_FULLSCREEN");
|
||||
if (env) {
|
||||
legacy = SDL_atoi(env);
|
||||
} else {
|
||||
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
|
||||
SDL_DisplayData *displaydata = (SDL_DisplayData *) _display->driverdata;
|
||||
if ( displaydata->use_vidmode ) {
|
||||
legacy = SDL_TRUE; /* the new stuff only works with XRandR. */
|
||||
} else if ( !videodata->net_wm ) {
|
||||
legacy = SDL_TRUE; /* The window manager doesn't support it */
|
||||
} else {
|
||||
/* !!! FIXME: look at the window manager name, and blacklist certain ones? */
|
||||
/* http://stackoverflow.com/questions/758648/find-the-name-of-the-x-window-manager */
|
||||
legacy = SDL_FALSE; /* try the new way. */
|
||||
}
|
||||
}
|
||||
|
||||
if (legacy) {
|
||||
if (fullscreen) {
|
||||
X11_BeginWindowFullscreenLegacy(_this, window, _display);
|
||||
} else {
|
||||
X11_EndWindowFullscreenLegacy(_this, window, _display);
|
||||
}
|
||||
} else {
|
||||
X11_SetWindowFullscreenViaWM(_this, window, _display, fullscreen);
|
||||
}
|
||||
X11_SetWindowFullscreenViaWM(_this, window, _display, fullscreen);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
X11_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp)
|
||||
{
|
||||
|
@ -1699,7 +1543,7 @@ X11_GetWindowICCProfile(_THIS, SDL_Window * window, size_t * size)
|
|||
unsigned long real_nitems;
|
||||
SDL_x11Prop atomProp;
|
||||
|
||||
X11_XGetWindowAttributes(display, X11_IsWindowLegacyFullscreen(_this, window) ? data->fswindow : data->xwindow, &attributes);
|
||||
X11_XGetWindowAttributes(display, data->xwindow, &attributes);
|
||||
if (X11_XScreenNumberOfScreen(attributes.screen) > 0) {
|
||||
SDL_snprintf(icc_atom_string, sizeof("_ICC_PROFILE_") + 12, "%s%d", "_ICC_PROFILE_", X11_XScreenNumberOfScreen(attributes.screen));
|
||||
} else {
|
||||
|
@ -1740,7 +1584,6 @@ X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
|
|||
{
|
||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||
Display *display;
|
||||
SDL_bool oldstyle_fullscreen;
|
||||
|
||||
if (data == NULL) {
|
||||
return;
|
||||
|
@ -1748,13 +1591,7 @@ X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
|
|||
|
||||
display = data->videodata->display;
|
||||
|
||||
/* ICCCM2.0-compliant window managers can handle fullscreen windows
|
||||
If we're using XVidMode to change resolution we need to confine
|
||||
the cursor so we don't pan around the virtual desktop.
|
||||
*/
|
||||
oldstyle_fullscreen = X11_IsWindowLegacyFullscreen(_this, window);
|
||||
|
||||
if (oldstyle_fullscreen || grabbed) {
|
||||
if (grabbed) {
|
||||
/* If the window is unmapped, XGrab calls return GrabNotViewable,
|
||||
so when we get a MapNotify later, we'll try to update the grab as
|
||||
appropriate. */
|
||||
|
@ -1788,11 +1625,6 @@ X11_SetWindowMouseGrab(_THIS, SDL_Window * window, SDL_bool grabbed)
|
|||
|
||||
/* Raise the window if we grab the mouse */
|
||||
X11_XRaiseWindow(display, data->xwindow);
|
||||
|
||||
/* Now grab the keyboard on old-style fullscreen */
|
||||
if (oldstyle_fullscreen) {
|
||||
X11_SetWindowKeyboardGrab(_this, window, SDL_TRUE);
|
||||
}
|
||||
} else {
|
||||
X11_XUngrabPointer(display, CurrentTime);
|
||||
|
||||
|
|
|
@ -44,7 +44,6 @@ typedef struct
|
|||
{
|
||||
SDL_Window *window;
|
||||
Window xwindow;
|
||||
Window fswindow; /* used if we can't have the WM handle fullscreen. */
|
||||
Visual *visual;
|
||||
Colormap colormap;
|
||||
#ifndef NO_SHARED_MEMORY
|
||||
|
|
|
@ -32,9 +32,7 @@ const char* _HintsEnum[] =
|
|||
SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS,
|
||||
SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT,
|
||||
SDL_HINT_VIDEO_WIN_D3DCOMPILER,
|
||||
SDL_HINT_VIDEO_X11_XINERAMA,
|
||||
SDL_HINT_VIDEO_X11_XRANDR,
|
||||
SDL_HINT_VIDEO_X11_XVIDMODE,
|
||||
SDL_HINT_XINPUT_ENABLED,
|
||||
};
|
||||
const char* _HintsVerbose[] =
|
||||
|
@ -60,9 +58,7 @@ const char* _HintsVerbose[] =
|
|||
"SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS",
|
||||
"SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT",
|
||||
"SDL_VIDEO_WIN_D3DCOMPILER",
|
||||
"SDL_VIDEO_X11_XINERAMA",
|
||||
"SDL_VIDEO_X11_XRANDR",
|
||||
"SDL_VIDEO_X11_XVIDMODE",
|
||||
"SDL_XINPUT_ENABLED"
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue