X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_gamemode.c;fp=src%2Ffreeglut_gamemode.c;h=137f1ea54e6bb5a6e5553ff76d7bdda657689043;hb=d4846df601fa224353c65fa332f603a85735b5d8;hp=01086b371c22d067bfc9378187476c07f06c3e96;hpb=8833b224162c6e3c8491a89e77fcfd5f79bdff39;p=freeglut diff --git a/src/freeglut_gamemode.c b/src/freeglut_gamemode.c index 01086b3..137f1ea 100644 --- a/src/freeglut_gamemode.c +++ b/src/freeglut_gamemode.c @@ -40,6 +40,65 @@ /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */ +static int xrandr_resize(int xsz, int ysz, int just_checking) +{ + int res = -1; + +#ifdef HAVE_X11_EXTENSIONS_XRANDR_H + int event_base, error_base; + Status st; + XRRScreenConfiguration *xrr_config; + XRRScreenSize *ssizes; + Rotation rot; + int i, ssizes_count, curr; + Time timestamp, cfg_timestamp; + + /* must check at runtime for the availability of the extension */ + if(!XRRQueryExtension(fgDisplay.Display, &event_base, &error_base)) { + return -1; + } + + if(!(xrr_config = XRRGetScreenInfo(fgDisplay.Display, fgDisplay.RootWindow))) { + fgWarning("XRRGetScreenInfo failed"); + return -1; + } + ssizes = XRRConfigSizes(xrr_config, &ssizes_count); + curr = XRRConfigCurrentConfiguration(xrr_config, &rot); + timestamp = XRRConfigTimes(xrr_config, &cfg_timestamp); + + if(xsz == ssizes[curr].width && ysz == ssizes[curr].height) { + /* no need to switch, we're already in the requested mode */ + res = 0; + goto done; + } + + for(i=0; i