X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=driver%2Fdpms.c;h=3de78f2d21d57a33593c99b463acf961b521474f;hp=526c4bdedb84a3bcd30b6dea84db6b95f4807df3;hb=5f9c47ca98dd43d8f59b7c27d3fde6edfde4fe21;hpb=50be9bb40dc60130c99ffa568e6677779904ff70 diff --git a/driver/dpms.c b/driver/dpms.c index 526c4bde..3de78f2d 100644 --- a/driver/dpms.c +++ b/driver/dpms.c @@ -1,5 +1,5 @@ /* dpms.c --- syncing the X Display Power Management values - * xscreensaver, Copyright (c) 2001-2009 Jamie Zawinski + * xscreensaver, Copyright (c) 2001-2011 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -217,16 +217,29 @@ monitor_powered_on_p (saver_info *si) } void -monitor_power_on (saver_info *si) +monitor_power_on (saver_info *si, Bool on_p) { - if (!monitor_powered_on_p (si)) + if ((!!on_p) != monitor_powered_on_p (si)) { - DPMSForceLevel(si->dpy, DPMSModeOn); + int event_number, error_number; + if (!DPMSQueryExtension(si->dpy, &event_number, &error_number) || + !DPMSCapable(si->dpy)) + { + if (si->prefs.verbose_p) + fprintf (stderr, + "%s: unable to power %s monitor: no DPMS extension.\n", + blurb(), (on_p ? "on" : "off")); + return; + } + + DPMSForceLevel(si->dpy, (on_p ? DPMSModeOn : DPMSModeOff)); XSync(si->dpy, False); - if (!monitor_powered_on_p (si)) + + if ((!!on_p) != monitor_powered_on_p (si)) /* double-check */ fprintf (stderr, - "%s: DPMSForceLevel(dpy, DPMSModeOn) did not power the monitor on?\n", - blurb()); + "%s: DPMSForceLevel(dpy, %s) did not change monitor power state.\n", + blurb(), + (on_p ? "DPMSModeOn" : "DPMSModeOff")); } } @@ -248,7 +261,7 @@ monitor_powered_on_p (saver_info *si) } void -monitor_power_on (saver_info *si) +monitor_power_on (saver_info *si, Bool on_p) { return; }