X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxset.c;h=d26ee1b25a08938164e8d2dbfa3429ed42b40616;hb=9c9d475ff889ed8be02e8ce8c17da28b93278fca;hp=1e5cff499a67e6bc69d4d5ed79dfcf73667c204c;hpb=2a991a811de4c7b22f812682b267b616a809fd9a;p=xscreensaver diff --git a/driver/xset.c b/driver/xset.c index 1e5cff49..d26ee1b2 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 @@ -129,7 +129,7 @@ init_sgi_saver_extension (saver_info *si) "%s: SGI SCREEN_SAVER extension exists, but can't be initialized;\n\ perhaps some other screensaver program is already running?\n", blurb()); - p->use_sgi_saver_extension = False; + si->using_sgi_saver_extension = False; return; } } @@ -137,13 +137,65 @@ init_sgi_saver_extension (saver_info *si) #endif /* HAVE_SGI_SAVER_EXTENSION */ + +/* XIDLE server extension hackery. + */ + +#ifdef HAVE_XIDLE_EXTENSION + +# include + +Bool +query_xidle_extension (saver_info *si) +{ + int event_number; + int error_number; + return XidleQueryExtension (si->dpy, &event_number, &error_number); +} + +#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++) + XRRSelectInput (si->dpy, RootWindow (si->dpy, i), + RRScreenChangeNotifyMask); + } + + return ok; +} + +#endif /* HAVE_XIDLE_EXTENSION */ + + /* Figuring out what the appropriate XSetScreenSaver() parameters are (one wouldn't expect this to be rocket science.) */ void -disable_builtin_screensaver (saver_info *si, Bool turn_off_p) +disable_builtin_screensaver (saver_info *si, Bool unblank_screen_p) { saver_preferences *p = &si->prefs; int current_server_timeout, current_server_interval; @@ -173,24 +225,29 @@ disable_builtin_screensaver (saver_info *si, Bool turn_off_p) desired_server_interval = 0; /* I suspect (but am not sure) that DontAllowExposures might have - something to do with powering off the monitor as well. */ + something to do with powering off the monitor as well, at least + on some systems that don't support XDPMS? Who know... */ desired_allow_exp = AllowExposures; -#if defined(HAVE_MIT_SAVER_EXTENSION) || defined(HAVE_SGI_SAVER_EXTENSION) - if (p->use_mit_saver_extension || p->use_sgi_saver_extension) + if (si->using_mit_saver_extension || si->using_sgi_saver_extension) { desired_server_timeout = (p->timeout / 1000); /* The SGI extension won't give us events unless blanking is on. I think (unsure right now) that the MIT extension is the opposite. */ - if (p->use_sgi_saver_extension) + if (si->using_sgi_saver_extension) desired_prefer_blank = PreferBlanking; else desired_prefer_blank = DontPreferBlanking; } else -#endif /* HAVE_MIT_SAVER_EXTENSION || HAVE_SGI_SAVER_EXTENSION */ { + /* When we're not using an extension, set the server-side timeout to 0, + so that the server never gets involved with screen blanking, and we + do it all ourselves. (However, when we *are* using an extension, + we tell the server when to notify us, and rather than blanking the + screen, the server will send us an X event telling us to blank.) + */ desired_server_timeout = 0; } @@ -199,18 +256,14 @@ disable_builtin_screensaver (saver_info *si, Bool turn_off_p) desired_prefer_blank != current_prefer_blank || desired_allow_exp != current_allow_exp) { - if (desired_server_timeout == 0) - fprintf (stderr, - "%s%sisabling server builtin screensaver.\n" - "\tYou can re-enable it with \"xset s on\".\n", - (p->verbose_p ? "" : blurb()), - (p->verbose_p ? "\n\tD" : ": d")); - if (p->verbose_p) - fprintf (stderr, "%s: (xset s %d %d %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 ? "noexpose" : "expose")); + (desired_allow_exp ? "expose" : "noexpose")); XSetScreenSaver (si->dpy, desired_server_timeout, desired_server_interval, @@ -226,16 +279,16 @@ disable_builtin_screensaver (saver_info *si, Bool turn_off_p) { extension_initted = True; # ifdef HAVE_MIT_SAVER_EXTENSION - if (p->use_mit_saver_extension) init_mit_saver_extension(si); + if (si->using_mit_saver_extension) init_mit_saver_extension(si); # endif # ifdef HAVE_SGI_SAVER_EXTENSION - if (p->use_sgi_saver_extension) init_sgi_saver_extension(si); + if (si->using_sgi_saver_extension) init_sgi_saver_extension(si); # endif } } #endif /* HAVE_MIT_SAVER_EXTENSION || HAVE_SGI_SAVER_EXTENSION */ - if (turn_off_p) + if (unblank_screen_p) /* Turn off the server builtin saver if it is now running. */ XForceScreenSaver (si->dpy, ScreenSaverReset); }