summaryrefslogtreecommitdiffstats
path: root/driver/dpms.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/dpms.c')
-rw-r--r--driver/dpms.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/driver/dpms.c b/driver/dpms.c
index a0dd7b8..3a8803c 100644
--- a/driver/dpms.c
+++ b/driver/dpms.c
@@ -86,8 +86,12 @@
#ifdef HAVE_DPMS_EXTENSION
+#define CLAMP_DOWN(var,val,mi) do { int old = (var); (var) -= (val); if ((var) < (mi) || (var) > old) (var) = (mi); } while (0)
+
static Bool error_handler_hit_p = False;
+static int idle_offset = 0;
+
static int
ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error)
{
@@ -95,6 +99,12 @@ ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error)
return 0;
}
+void
+store_dpms_offset(int offset)
+{
+ idle_offset = offset < 15 ? 0 : offset;
+}
+
void
sync_server_dpms_settings (Display *dpy, Bool enabled_p, Bool dpms_quickoff_p,
@@ -125,6 +135,13 @@ sync_server_dpms_settings (Display *dpy, Bool enabled_p, Bool dpms_quickoff_p,
if (bogus_p) enabled_p = False;
+ if (idle_offset != 0)
+ {
+ CLAMP_DOWN (standby_secs, idle_offset, 10);
+ CLAMP_DOWN (suspend_secs, idle_offset, 10);
+ CLAMP_DOWN (off_secs, idle_offset, 10);
+ }
+
/* X protocol sends these values in a CARD16, so truncate them to 16 bits.
This means that the maximum timeout is 18:12:15.
*/
@@ -280,6 +297,12 @@ monitor_power_on (saver_info *si, Bool on_p)
#else /* !HAVE_DPMS_EXTENSION */
void
+store_dpms_offset(Display *dpy, Bool reset_p)
+{
+}
+
+
+void
sync_server_dpms_settings (Display *dpy, Bool enabled_p,
Bool dpms_quickoff_p,
int standby_secs, int suspend_secs, int off_secs,