X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxset.c;h=677a8c0a2dc5b3f8082bf84513f11932746035b9;hb=bc7b7a8eb122206d239ec0e693676bcce31be1aa;hp=6dabdb2d156f9f3942ed070abbce2358f23a64ca;hpb=72c1f4c1dc6ab07fe121a327ff1c30bf51ef74c1;p=xscreensaver diff --git a/driver/xset.c b/driver/xset.c index 6dabdb2d..677a8c0a 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-1998 Jamie Zawinski + * xscreensaver, Copyright (c) 1991-2004 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 @@ -156,6 +156,44 @@ query_xidle_extension (saver_info *si) #endif /* HAVE_XIDLE_EXTENSION */ + +/* Resize and Rotate server extension hackery. + */ + +#ifdef HAVE_RANDR + +# include + +Bool +query_randr_extension (saver_info *si) +{ + saver_preferences *p = &si->prefs; + Bool ok = XRRQueryExtension (si->dpy, + &si->randr_event_number, + &si->randr_error_number); + + if (ok) + { + int nscreens = ScreenCount (si->dpy); /* number of *real* screens */ + int i; + + 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_RANDR */ + + /* Figuring out what the appropriate XSetScreenSaver() parameters are (one wouldn't expect this to be rocket science.) @@ -193,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) @@ -218,21 +256,22 @@ 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 || desired_allow_exp != current_allow_exp) { - if (p->verbose_p && unblank_screen_p) - /* Used to print this all the time, but really, nobody cares. - Now only print it when verbose. */ - fprintf (stderr, - "%s disabling server builtin screensaver.\n" - "%s: you can re-enable it with \"xset s on\".\n", - blurb(), blurb()); - if (p->verbose_p) - fprintf (stderr, "%s: (xset s %d %d; xset s %s; xset s %s)\n", blurb(), + fprintf (stderr, + "%s: disabling server builtin screensaver:\n" + "%s: (xset s %d %d; xset s %s; xset s %s)\n", + blurb(), blurb(), desired_server_timeout, desired_server_interval, (desired_prefer_blank ? "blank" : "noblank"), (desired_allow_exp ? "expose" : "noexpose"));