X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=driver%2Fdpms.c;h=553e476ee0886597ff6bfd4453a0e6c61732d1ad;hb=4361b69d3178d7fc98d0388f9a223af6c2651aba;hp=d88737eefd98340fe9412a6ce4f03f4c2179aec8;hpb=1d7308dd9032b39a92fda86e8c2db04218b45fbf;p=xscreensaver diff --git a/driver/dpms.c b/driver/dpms.c index d88737ee..553e476e 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-2011 Jamie Zawinski + * xscreensaver, Copyright (c) 2001-2017 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 @@ -97,7 +97,7 @@ ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) void -sync_server_dpms_settings (Display *dpy, Bool enabled_p, +sync_server_dpms_settings (Display *dpy, Bool enabled_p, Bool dpms_quickoff_p, int standby_secs, int suspend_secs, int off_secs, Bool verbose_p) { @@ -107,6 +107,12 @@ sync_server_dpms_settings (Display *dpy, Bool enabled_p, CARD16 o_standby = 0, o_suspend = 0, o_off = 0; Bool bogus_p = False; + if (dpms_quickoff_p && !off_secs) + { + /* To do this, we might need to temporarily re-enable DPMS first. */ + off_secs = 0xFFFF; + } + if (standby_secs == 0 && suspend_secs == 0 && off_secs == 0) /* all zero implies "DPMS disabled" */ enabled_p = False; @@ -260,6 +266,7 @@ monitor_power_on (saver_info *si, Bool on_p) XSync (si->dpy, False); DPMSForceLevel(si->dpy, (on_p ? DPMSModeOn : DPMSModeOff)); XSync (si->dpy, False); + XSetErrorHandler (old_handler); /* Ignore error_handler_hit_p, just probe monitor instead */ if ((!!on_p) != monitor_powered_on_p (si)) /* double-check */