X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxset.c;h=99d11c2f96a18ae79a65428cbbed2ba36a6adec6;hb=3f438031d610c7e15fd33876a879b97e290e05fb;hp=d26ee1b25a08938164e8d2dbfa3429ed42b40616;hpb=9c9d475ff889ed8be02e8ce8c17da28b93278fca;p=xscreensaver diff --git a/driver/xset.c b/driver/xset.c index d26ee1b2..99d11c2f 100644 --- a/driver/xset.c +++ b/driver/xset.c @@ -1,5 +1,5 @@ /* xset.c --- interacting with server extensions and the builtin screensaver. - * xscreensaver, Copyright (c) 1991-2004 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2005 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 @@ -171,6 +171,7 @@ query_randr_extension (saver_info *si) Bool ok = XRRQueryExtension (si->dpy, &si->randr_event_number, &si->randr_error_number); + if (ok) { int nscreens = ScreenCount (si->dpy); /* number of *real* screens */ @@ -179,14 +180,18 @@ query_randr_extension (saver_info *si) if (p->verbose_p) fprintf (stderr, "%s: selecting RANDR events\n", blurb()); for (i = 0; i < nscreens; i++) +# ifdef RRScreenChangeNotifyMask /* randr.h 1.5, 2002/09/29 */ XRRSelectInput (si->dpy, RootWindow (si->dpy, i), RRScreenChangeNotifyMask); +# else /* !RRScreenChangeNotifyMask */ /* Xrandr.h 1.4, 2001/06/07 */ + XRRScreenChangeSelectInput (si->dpy, RootWindow (si->dpy, i), True); +# endif /* !RRScreenChangeNotifyMask */ } return ok; } -#endif /* HAVE_XIDLE_EXTENSION */ +#endif /* HAVE_RANDR */ @@ -226,7 +231,7 @@ disable_builtin_screensaver (saver_info *si, Bool unblank_screen_p) /* I suspect (but am not sure) that DontAllowExposures might have something to do with powering off the monitor as well, at least - on some systems that don't support XDPMS? Who know... */ + on some systems that don't support XDPMS? Who knows... */ desired_allow_exp = AllowExposures; if (si->using_mit_saver_extension || si->using_sgi_saver_extension) @@ -251,6 +256,12 @@ disable_builtin_screensaver (saver_info *si, Bool unblank_screen_p) desired_server_timeout = 0; } + /* XSetScreenSaver() generates BadValue if either timeout parameter + exceeds 15 bits (signed short.) That is 09:06:07. + */ + if (desired_server_timeout > 0x7FFF) desired_server_timeout = 0x7FFF; + if (desired_server_interval > 0x7FFF) desired_server_interval = 0x7FFF; + if (desired_server_timeout != current_server_timeout || desired_server_interval != current_server_interval || desired_prefer_blank != current_prefer_blank || @@ -292,125 +303,3 @@ disable_builtin_screensaver (saver_info *si, Bool unblank_screen_p) /* Turn off the server builtin saver if it is now running. */ XForceScreenSaver (si->dpy, ScreenSaverReset); } - - -/* Display Power Management System (DPMS.) - - On XFree86 systems, "man xset" reports: - - -dpms The -dpms option disables DPMS (Energy Star) features. - +dpms The +dpms option enables DPMS (Energy Star) features. - - dpms flags... - The dpms option allows the DPMS (Energy Star) - parameters to be set. The option can take up to three - numerical values, or the `force' flag followed by a - DPMS state. The `force' flags forces the server to - immediately switch to the DPMS state specified. The - DPMS state can be one of `standby', `suspend', or - `off'. When numerical values are given, they set the - inactivity period before the three modes are activated. - The first value given is for the `standby' mode, the - second is for the `suspend' mode, and the third is for - the `off' mode. Setting these values implicitly - enables the DPMS features. A value of zero disables a - particular mode. - - However, note that the implementation is more than a little bogus, - in that there is code in /usr/X11R6/lib/libXdpms.a to implement all - the usual server-extension-querying utilities -- but there are no - prototypes in any header file! Thus, the prototypes here. (The - stuff in X11/extensions/dpms.h and X11/extensions/dpmsstr.h define - the raw X protcol, they don't define the API to libXdpms.a.) - - Some documentation: - Library: ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/DPMSLib.ms - Protocol: ftp://ftp.x.org/pub/R6.4/xc/doc/specs/Xext/DPMS.ms - */ - -#ifdef HAVE_DPMS_EXTENSION - -#include /* for CARD16 */ -#include -#include - -extern Bool DPMSQueryExtension (Display *dpy, int *event_ret, int *error_ret); -extern Bool DPMSCapable (Display *dpy); -extern Status DPMSForceLevel (Display *dpy, CARD16 level); -extern Status DPMSInfo (Display *dpy, CARD16 *power_level, BOOL *state); - -#if 0 /* others we don't use */ -extern Status DPMSGetVersion (Display *dpy, int *major_ret, int *minor_ret); -extern Status DPMSSetTimeouts (Display *dpy, - CARD16 standby, CARD16 suspend, CARD16 off); -extern Bool DPMSGetTimeouts (Display *dpy, - CARD16 *standby, CARD16 *suspend, CARD16 *off); -extern Status DPMSEnable (Display *dpy); -extern Status DPMSDisable (Display *dpy); -#endif /* 0 */ - - -Bool -monitor_powered_on_p (saver_info *si) -{ - Bool result; - int event_number, error_number; - BOOL onoff = False; - CARD16 state; - - if (!DPMSQueryExtension(si->dpy, &event_number, &error_number)) - /* Server doesn't know -- assume the monitor is on. */ - result = True; - - else if (!DPMSCapable(si->dpy)) - /* Server says the monitor doesn't do power management -- so it's on. */ - result = True; - - else - { - DPMSInfo(si->dpy, &state, &onoff); - if (!onoff) - /* Server says DPMS is disabled -- so the monitor is on. */ - result = True; - else - switch (state) { - case DPMSModeOn: result = True; break; /* really on */ - case DPMSModeStandby: result = False; break; /* kinda off */ - case DPMSModeSuspend: result = False; break; /* pretty off */ - case DPMSModeOff: result = False; break; /* really off */ - default: result = True; break; /* protocol error? */ - } - } - - return result; -} - -void -monitor_power_on (saver_info *si) -{ - if (!monitor_powered_on_p (si)) - { - DPMSForceLevel(si->dpy, DPMSModeOn); - XSync(si->dpy, False); - if (!monitor_powered_on_p (si)) - fprintf (stderr, - "%s: DPMSForceLevel(dpy, DPMSModeOn) did not power the monitor on?\n", - blurb()); - } -} - -#else /* !HAVE_DPMS_EXTENSION */ - -Bool -monitor_powered_on_p (saver_info *si) -{ - return True; -} - -void -monitor_power_on (saver_info *si) -{ - return; -} - -#endif /* !HAVE_DPMS_EXTENSION */