X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fxscreensaver.c;h=5d948f655fd665e68b6e2a4eeda76da01251e107;hb=9c9d475ff889ed8be02e8ce8c17da28b93278fca;hp=de42a100c9980e0ae03fc68f087f24d4c392dc27;hpb=bbd0773f2adde4927a6196361d4061e70bf48cd9;p=xscreensaver diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index de42a100..5d948f65 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -255,7 +255,7 @@ do_help (saver_info *si) fflush (stdout); fflush (stderr); fprintf (stdout, "\ -xscreensaver %s, copyright (c) 1991-2003 by Jamie Zawinski \n\ +xscreensaver %s, copyright (c) 1991-2004 by Jamie Zawinski \n\ \n\ All xscreensaver configuration is via the `~/.xscreensaver' file.\n\ Rather than editing that file by hand, just run `xscreensaver-demo':\n\ @@ -719,7 +719,7 @@ print_banner (saver_info *si) if (p->verbose_p) fprintf (stderr, - "%s %s, copyright (c) 1991-2003 " + "%s %s, copyright (c) 1991-2004 " "by Jamie Zawinski .\n", progname, si->version); @@ -1034,6 +1034,10 @@ initialize_server_extensions (saver_info *si) blurb()); } +#ifdef HAVE_RANDR + query_randr_extension (si); +#endif + if (!system_has_proc_interrupts_p) { si->using_proc_interrupts = False; @@ -1372,27 +1376,33 @@ main_loop (saver_info *si) To avoid this: after un-blanking the screen, sleep for a second, and then really make sure the window is unmapped. + + Update: actually, let's do that once a second for 8 seconds, + because sometimes the machine is slow, and we miss... */ { - int i; - XSync (si->dpy, False); - sleep (1); - for (i = 0; i < si->nscreens; i++) + int i, j; + for (j = 0; j < 8; j++) { - saver_screen_info *ssi = &si->screens[i]; - Window w = ssi->screensaver_window; - XWindowAttributes xgwa; - XGetWindowAttributes (si->dpy, w, &xgwa); - if (xgwa.map_state != IsUnmapped) + XSync (si->dpy, False); + sleep (1); + for (i = 0; i < si->nscreens; i++) { - if (p->verbose_p) - fprintf (stderr, - "%s: %d: client race! emergency unmap 0x%lx.\n", - blurb(), i, (unsigned long) w); - XUnmapWindow (si->dpy, w); + saver_screen_info *ssi = &si->screens[i]; + Window w = ssi->screensaver_window; + XWindowAttributes xgwa; + XGetWindowAttributes (si->dpy, w, &xgwa); + if (xgwa.map_state != IsUnmapped) + { + if (p->verbose_p) + fprintf (stderr, + "%s: %d: client race! emergency unmap 0x%lx.\n", + blurb(), i, (unsigned long) w); + XUnmapWindow (si->dpy, w); + } } + XSync (si->dpy, False); } - XSync (si->dpy, False); } } } @@ -1667,6 +1677,14 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) { if (until_idle_p) { + if (p->mode == DONT_BLANK) + { + clientmessage_response(si, window, True, + "ACTIVATE ClientMessage received in DONT_BLANK mode.", + "screen blanking is currently disabled."); + return False; + } + clientmessage_response(si, window, False, "ACTIVATE ClientMessage received.", "activating."); @@ -1771,6 +1789,14 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) char buf2 [255]; long which = event->xclient.data.l[1]; + if (p->mode == DONT_BLANK) + { + clientmessage_response(si, window, True, + "SELECT ClientMessage received in DONT_BLANK mode.", + "screen blanking is currently disabled."); + return False; + } + sprintf (buf, "SELECT %ld ClientMessage received.", which); sprintf (buf2, "activating (%ld).", which); clientmessage_response (si, window, False, buf, buf2); @@ -1890,7 +1916,11 @@ handle_clientmessage (saver_info *si, XEvent *event, Bool until_idle_p) "not compiled with support for locking.", "locking not enabled."); #else /* !NO_LOCKING */ - if (si->locking_disabled_p) + if (p->mode == DONT_BLANK) + clientmessage_response(si, window, True, + "LOCK ClientMessage received in DONT_BLANK mode.", + "screen blanking is currently disabled."); + else if (si->locking_disabled_p) clientmessage_response (si, window, True, "LOCK ClientMessage received, but locking is disabled.", "locking not enabled."); @@ -2089,7 +2119,17 @@ analyze_display (saver_info *si) False # endif }, { "XINERAMA", "Xinerama", +# ifdef HAVE_XINERAMA True +# else + False +# endif + }, { "RANDR", "Resize-and-Rotate", +# ifdef HAVE_RANDR + True +# else + False +# endif }, { "Apple-DRI", "Apple-DRI (XDarwin)", True },