slock-dpms-1.4.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slock-dpms-1.4.diff (1751B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index 9855e21..d01bd38 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = {
            6  
            7  /* treat a cleared input like a wrong password (color) */
            8  static const int failonclear = 1;
            9 +
           10 +/* time in seconds before the monitor shuts down */
           11 +static const int monitortime = 5;
           12 diff --git a/slock.c b/slock.c
           13 index d2f0886..f65a43b 100644
           14 --- a/slock.c
           15 +++ b/slock.c
           16 @@ -15,6 +15,7 @@
           17  #include <unistd.h>
           18  #include <sys/types.h>
           19  #include <X11/extensions/Xrandr.h>
           20 +#include <X11/extensions/dpms.h>
           21  #include <X11/keysym.h>
           22  #include <X11/Xlib.h>
           23  #include <X11/Xutil.h>
           24 @@ -306,6 +307,7 @@ main(int argc, char **argv) {
           25          const char *hash;
           26          Display *dpy;
           27          int s, nlocks, nscreens;
           28 +        CARD16 standby, suspend, off;
           29  
           30          ARGBEGIN {
           31          case 'v':
           32 @@ -366,6 +368,20 @@ main(int argc, char **argv) {
           33          if (nlocks != nscreens)
           34                  return 1;
           35  
           36 +        /* DPMS magic to disable the monitor */
           37 +        if (!DPMSCapable(dpy))
           38 +                die("slock: DPMSCapable failed\n");
           39 +        if (!DPMSEnable(dpy))
           40 +                die("slock: DPMSEnable failed\n");
           41 +        if (!DPMSGetTimeouts(dpy, &standby, &suspend, &off))
           42 +                die("slock: DPMSGetTimeouts failed\n");
           43 +        if (!standby || !suspend || !off)
           44 +                die("slock: at least one DPMS variable is zero\n");
           45 +        if (!DPMSSetTimeouts(dpy, monitortime, monitortime, monitortime))
           46 +                die("slock: DPMSSetTimeouts failed\n");
           47 +
           48 +        XSync(dpy, 0);
           49 +
           50          /* run post-lock command */
           51          if (argc > 0) {
           52                  switch (fork()) {
           53 @@ -383,5 +399,9 @@ main(int argc, char **argv) {
           54          /* everything is now blank. Wait for the correct password */
           55          readpw(dpy, &rr, locks, nscreens, hash);
           56  
           57 +        /* reset DPMS values to inital ones */
           58 +        DPMSSetTimeouts(dpy, standby, suspend, off);
           59 +        XSync(dpy, 0);
           60 +
           61          return 0;
           62  }