diff options
author | runge <runge> | 2006-04-05 21:26:45 +0000 |
---|---|---|
committer | runge <runge> | 2006-04-05 21:26:45 +0000 |
commit | d14cf0a84c88a02222caad1692228584b610aacc (patch) | |
tree | 3482ef126e8b2bf3b9741f779539cfd74c77c698 /x11vnc/pm.c | |
parent | 1602b345f3e7e508b043133d5c289d9984e39f18 (diff) | |
download | libtdevnc-d14cf0a84c88a02222caad1692228584b610aacc.tar.gz libtdevnc-d14cf0a84c88a02222caad1692228584b610aacc.zip |
SSL Java viewer work thru proxy. -sslGenCA, etc key/cert management utils for x11vnc. FBPM "support".
Diffstat (limited to 'x11vnc/pm.c')
-rw-r--r-- | x11vnc/pm.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/x11vnc/pm.c b/x11vnc/pm.c new file mode 100644 index 0000000..8b3eab5 --- /dev/null +++ b/x11vnc/pm.c @@ -0,0 +1,93 @@ +/* -- pm.c -- */ +#include "x11vnc.h" +#include "cleanup.h" + +void check_pm(void); +static void check_fbpm(void); + +#if LIBVNCSERVER_HAVE_FBPM +#include <X11/Xmd.h> +#include <X11/extensions/fbpm.h> +#endif + +void check_pm(void) { + check_fbpm(); + /* someday dpms activities? */ +} + +static void check_fbpm(void) { + static int init_fbpm = 0; +#if LIBVNCSERVER_HAVE_FBPM + static int fbpm_capable = 0; + static time_t last_fbpm = 0; + int db = 1; + + CARD16 level; + BOOL enabled; + + if (raw_fb && ! dpy) return; /* raw_fb hack */ + + if (! init_fbpm) { + if (FBPMCapable(dpy)) { + fbpm_capable = 1; + rfbLog("X display is capable of FBPM.\n"); + if (watch_fbpm) { + rfbLog("Preventing low-power FBPM modes when" + " VNC clients are connected.\n"); + } + } else { + rfbLog("X display is not capable of FBPM.\n"); + fbpm_capable = 0; + } + init_fbpm = 1; + } + + if (! watch_fbpm) { + return; + } + if (! fbpm_capable) { + return; + } + if (! client_count) { + return; + } + if (time(0) < last_fbpm + 5) { + return; + } + last_fbpm = time(0); + + if (FBPMInfo(dpy, &level, &enabled)) { + if (db) fprintf(stderr, "FBPMInfo level: %d enabled: %d\n", level, enabled); + + if (enabled && level != FBPMModeOn) { + char *from = "unknown-fbpm-state"; + XErrorHandler old_handler = XSetErrorHandler(trap_xerror); + trapped_xerror = 0; + + if (level == FBPMModeStandby) { + from = "FBPMModeStandby"; + } else if (level == FBPMModeSuspend) { + from = "FBPMModeSuspend"; + } else if (level == FBPMModeOff) { + from = "FBPMModeOff"; + } + + rfbLog("switching FBPM state from %s to FBPMModeOn\n", from); + + FBPMForceLevel(dpy, FBPMModeOn); + + XSetErrorHandler(old_handler); + trapped_xerror = 0; + } + } else { + if (db) fprintf(stderr, "FBPMInfo failed.\n"); + } +#else + if (raw_fb && ! dpy) return; /* raw_fb hack */ + if (! init_fbpm) { + rfbLog("X FBPM extension not supported.\n"); + init_fbpm = 1; + } +#endif +} + |