X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Ftimers.c;h=a0d2392c33e26b36e8f5cfead384d3c4c9ad9619;hb=3210e7e80ee2b5a7d2049a5aaff9f17b9c93dcc9;hp=aba6d5a3f0d421973fa1b3ef198ae9ce6bb0d13d;hpb=2a991a811de4c7b22f812682b267b616a809fd9a;p=xscreensaver diff --git a/driver/timers.c b/driver/timers.c index aba6d5a3..a0d2392c 100644 --- a/driver/timers.c +++ b/driver/timers.c @@ -233,7 +233,7 @@ static void reset_timers (saver_info *si) { saver_preferences *p = &si->prefs; - if (p->use_mit_saver_extension || p->use_sgi_saver_extension) + if (si->using_mit_saver_extension || si->using_sgi_saver_extension) return; #ifdef DEBUG_TIMERS @@ -242,7 +242,8 @@ reset_timers (saver_info *si) blurb(), p->timeout, si->timer_id); #endif /* DEBUG_TIMERS */ - XtRemoveTimeOut (si->timer_id); + if (si->timer_id) + XtRemoveTimeOut (si->timer_id); si->timer_id = XtAppAddTimeOut (si->app, p->timeout, idle_timer, (XtPointer) si); if (si->cycle_id) abort (); /* no cycle timer when inactive */ @@ -268,9 +269,9 @@ check_pointer_timer (XtPointer closure, XtIntervalId *id) saver_preferences *p = &si->prefs; Bool active_p = False; - if (p->use_xidle_extension || - p->use_mit_saver_extension || - p->use_sgi_saver_extension) + if (si->using_xidle_extension || + si->using_mit_saver_extension || + si->using_sgi_saver_extension) /* If an extension is in use, we should not be polling the mouse. */ abort (); @@ -342,7 +343,7 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) if (until_idle_p) { - if (!p->use_mit_saver_extension && !p->use_sgi_saver_extension) + if (!si->using_mit_saver_extension && !si->using_sgi_saver_extension) { /* Wake up periodically to ask the server if we are idle. */ si->timer_id = XtAppAddTimeOut (si->app, p->timeout, idle_timer, @@ -355,9 +356,9 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) #endif /* DEBUG_TIMERS */ } - if (!p->use_xidle_extension && - !p->use_mit_saver_extension && - !p->use_sgi_saver_extension) + if (!si->using_xidle_extension && + !si->using_mit_saver_extension && + !si->using_sgi_saver_extension) /* start polling the mouse position */ check_pointer_timer ((XtPointer) si, 0); } @@ -372,7 +373,7 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) { Time idle; #ifdef HAVE_XIDLE_EXTENSION - if (p->use_xidle_extension) + if (si->using_xidle_extension) { if (! XGetIdleTime (si->dpy, &idle)) { @@ -383,7 +384,7 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) else #endif /* HAVE_XIDLE_EXTENSION */ #ifdef HAVE_MIT_SAVER_EXTENSION - if (p->use_mit_saver_extension) + if (si->using_mit_saver_extension) { /* We don't need to do anything in this case - the synthetic event isn't necessary, as we get sent specific events @@ -393,7 +394,7 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) else #endif /* HAVE_MIT_SAVER_EXTENSION */ #ifdef HAVE_SGI_SAVER_EXTENSION - if (p->use_sgi_saver_extension) + if (si->using_sgi_saver_extension) { /* We don't need to do anything in this case - the synthetic event isn't necessary, as we get sent specific events @@ -408,8 +409,8 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) if (idle >= p->timeout) goto DONE; - else if (!p->use_mit_saver_extension && - !p->use_sgi_saver_extension) + else if (!si->using_mit_saver_extension && + !si->using_sgi_saver_extension) { si->timer_id = XtAppAddTimeOut (si->app, p->timeout - idle, idle_timer, (XtPointer) si); @@ -428,9 +429,9 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) break; case CreateNotify: - if (!p->use_xidle_extension && - !p->use_mit_saver_extension && - !p->use_sgi_saver_extension) + if (!si->using_xidle_extension && + !si->using_mit_saver_extension && + !si->using_sgi_saver_extension) { start_notice_events_timer (si, event.xcreatewindow.window); #ifdef DEBUG_TIMERS @@ -468,11 +469,27 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) /* If any widgets want to handle this event, let them. */ dispatch_event (si, &event); - /* We got a user event */ + /* We got a user event. + If we're waiting for the user to become active, this is it. + If we're waiting until the user becomes idle, reset the timers + (since now we have longer to wait.) + */ if (!until_idle_p) - goto DONE; + { + if (si->demoing_p && + (event.xany.type == MotionNotify || + event.xany.type == KeyRelease)) + /* When we're demoing a single hack, mouse motion doesn't + cause deactivation. Only clicks and keypresses do. */ + ; + else + /* If we're not demoing, then any activity causes deactivation. + */ + goto DONE; + } else reset_timers (si); + break; default: @@ -484,15 +501,13 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) (XScreenSaverNotifyEvent *) &event; if (sevent->state == ScreenSaverOn) { -# ifdef DEBUG_TIMERS + int i = 0; if (p->verbose_p) - fprintf (stderr, "%s: ScreenSaverOn event received at %s\n", - blurb(), timestring ()); -# endif /* DEBUG_TIMERS */ + fprintf (stderr, "%s: MIT ScreenSaverOn event received.\n", + blurb()); /* Get the "real" server window(s) out of the way as soon as possible. */ - int i = 0; for (i = 0; i < si->nscreens; i++) { saver_screen_info *ssi = &si->screens[i]; @@ -504,11 +519,9 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) if (sevent->kind != ScreenSaverExternal) { -# ifdef DEBUG_TIMERS fprintf (stderr, "%s: ScreenSaverOn event wasn't of type External!\n", blurb()); -# endif /* DEBUG_TIMERS */ } if (until_idle_p) @@ -516,20 +529,16 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) } else if (sevent->state == ScreenSaverOff) { -# ifdef DEBUG_TIMERS if (p->verbose_p) - fprintf (stderr, "%s: ScreenSaverOff event received at %s\n", - blurb(), timestring ()); -# endif /* DEBUG_TIMERS */ + fprintf (stderr, "%s: MIT ScreenSaverOff event received.\n", + blurb()); if (!until_idle_p) goto DONE; } -# ifdef DEBUG_TIMERS - else if (p->verbose_p) + else fprintf (stderr, - "%s: unknown MIT-SCREEN-SAVER event received at %s\n", - blurb(), timestring ()); -# endif /* DEBUG_TIMERS */ + "%s: unknown MIT-SCREEN-SAVER event %d received!\n", + blurb(), sevent->state); } else @@ -539,11 +548,9 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) #ifdef HAVE_SGI_SAVER_EXTENSION if (event.type == (si->sgi_saver_ext_event_number + ScreenSaverStart)) { -# ifdef DEBUG_TIMERS if (p->verbose_p) - fprintf (stderr, "%s: ScreenSaverStart event received at %s\n", - blurb(), timestring ()); -# endif /* DEBUG_TIMERS */ + fprintf (stderr, "%s: SGI ScreenSaverStart event received.\n", + blurb()); if (until_idle_p) goto DONE; @@ -551,11 +558,9 @@ sleep_until_idle (saver_info *si, Bool until_idle_p) else if (event.type == (si->sgi_saver_ext_event_number + ScreenSaverEnd)) { -# ifdef DEBUG_TIMERS if (p->verbose_p) - fprintf (stderr, "%s: ScreenSaverEnd event received at %s\n", - blurb(), timestring ()); -# endif /* DEBUG_TIMERS */ + fprintf (stderr, "%s: SGI ScreenSaverEnd event received.\n", + blurb()); if (!until_idle_p) goto DONE; } @@ -620,29 +625,28 @@ static void watchdog_timer (XtPointer closure, XtIntervalId *id) { saver_info *si = (saver_info *) closure; - if (!si->demo_mode_p) + + disable_builtin_screensaver (si, False); + + if (si->screen_blanked_p) { - disable_builtin_screensaver (si, False); - if (si->screen_blanked_p) - { - Bool running_p = screenhack_running_p(si); + Bool running_p = screenhack_running_p(si); #ifdef DEBUG_TIMERS - if (si->prefs.verbose_p) - fprintf (stderr, "%s: watchdog timer raising %sscreen.\n", - blurb(), (running_p ? "" : "and clearing ")); + if (si->prefs.verbose_p) + fprintf (stderr, "%s: watchdog timer raising %sscreen.\n", + blurb(), (running_p ? "" : "and clearing ")); #endif /* DEBUG_TIMERS */ - raise_window (si, True, True, running_p); + raise_window (si, True, True, running_p); - if (!monitor_powered_on_p (si)) - { - if (si->prefs.verbose_p) - fprintf (stderr, - "%s: server reports that monitor has powered down; " - "killing running hacks.\n", blurb()); - kill_screenhack (si); - } + if (!monitor_powered_on_p (si)) + { + if (si->prefs.verbose_p) + fprintf (stderr, + "%s: server reports that monitor has powered down; " + "killing running hacks.\n", blurb()); + kill_screenhack (si); } } }