Created
January 15, 2012 05:38
-
-
Save jcayzac/1614516 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <unistd.h> | |
#include <cstdlib> | |
#include <X11/Xlib.h> | |
#include <X11/extensions/xf86vmode.h> | |
#include <iostream> | |
using ::std::cerr; | |
using ::std::endl; | |
int main(void) { | |
// catch the current display and open it | |
Display* d = XOpenDisplay(0L); | |
if (d==0L) exit(1); | |
// *UGLY* XF86VidModeModeInfo is equivalent to the struct below | |
// "mode" declaration, but it might change someday... | |
union { | |
XF86VidModeModeInfo mode; | |
struct { | |
int dotclock; | |
XF86VidModeModeLine line; | |
} line_info; | |
} old; | |
// save the current mode into "old". | |
XF86VidModeGetModeLine(d, DefaultScreen(d), &old.line_info.dotclock, &old.line_info.line); | |
cerr << "Mode saved: "; | |
cerr << old.mode.hdisplay << "x" << old.mode.vdisplay << endl; | |
// get a list of all available video modes | |
XF86VidModeModeInfo** my_modes = 0L; | |
int mode_count = 0; | |
XF86VidModeGetAllModeLines(d, DefaultScreen(d), &mode_count, &my_modes); | |
cerr << mode_count << " available modes:" << endl; | |
for (int i=0; i<mode_count; ++i) { | |
cerr << "\t" << my_modes[i]->hdisplay << "x" | |
<< my_modes[i]->vdisplay << endl; | |
} | |
// set mode to the last available one (typically the lowest | |
// resolution available) | |
XF86VidModeSwitchToMode(d, DefaultScreen(d), my_modes[mode_count-1]); | |
XF86VidModeSetViewPort(d,DefaultScreen(d),0,0); | |
// IMPORTANT, as screen's resolution might not be changed otherwise. | |
XFlush(d); | |
// sleep for ten seconds, so we can see the mode change. | |
sleep(10); | |
// switch back to old mode... | |
XF86VidModeSwitchToMode(d, DefaultScreen(d), &old.mode); | |
XF86VidModeSetViewPort(d,DefaultScreen(d),0,0); | |
XFlush(d); | |
// All done | |
XCloseDisplay(d); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment