diff options
Diffstat (limited to 'x11vnc/pm.c')
-rw-r--r-- | x11vnc/pm.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/x11vnc/pm.c b/x11vnc/pm.c index cb13ab1..50fb49c 100644 --- a/x11vnc/pm.c +++ b/x11vnc/pm.c @@ -3,6 +3,7 @@ #include "cleanup.h" void check_pm(void); +void set_dpms_mode(char *mode); static void check_fbpm(void); static void check_dpms(void); @@ -104,6 +105,57 @@ static void check_fbpm(void) { #endif } +void set_dpms_mode(char *mode) { +#if NO_X11 + return; +#else + RAWFB_RET_VOID +#if LIBVNCSERVER_HAVE_DPMS + if (dpy && DPMSCapable(dpy)) { + CARD16 level; + CARD16 want; + BOOL enabled; + if (!strcmp(mode, "off")) { + want = DPMSModeOff; + } else if (!strcmp(mode, "on")) { + want = DPMSModeOn; + } else if (!strcmp(mode, "standby")) { + want = DPMSModeStandby; + } else if (!strcmp(mode, "suspend")) { + want = DPMSModeSuspend; + } else { + return; + } + if (DPMSInfo(dpy, &level, &enabled)) { + char *from; + fprintf(stderr, "DPMSInfo level: %d enabled: %d\n", level, enabled); + if (enabled && level != want) { + XErrorHandler old_handler = XSetErrorHandler(trap_xerror); + trapped_xerror = 0; + + if (level == DPMSModeStandby) { + from = "DPMSModeStandby"; + } else if (level == DPMSModeSuspend) { + from = "DPMSModeSuspend"; + } else if (level == DPMSModeOff) { + from = "DPMSModeOff"; + } else if (level == DPMSModeOn) { + from = "DPMSModeOn"; + } + + rfbLog("switching DPMS state from %s to %s\n", from, mode); + + DPMSForceLevel(dpy, want); + + XSetErrorHandler(old_handler); + trapped_xerror = 0; + } + } + } +#endif +#endif +} + static void check_dpms(void) { static int init_dpms = 0; #if LIBVNCSERVER_HAVE_DPMS |