diff --git a/gtk2_ardour/timers.cc b/gtk2_ardour/timers.cc index 13f2cfdbd7..3469d39df8 100644 --- a/gtk2_ardour/timers.cc +++ b/gtk2_ardour/timers.cc @@ -87,6 +87,7 @@ public: , rapid(100) , super_rapid(40) , fps(40) + , _suspend_counter(0) { #ifndef NDEBUG second.connect (sigc::mem_fun (*this, &UITimers::on_second_timer)); @@ -99,6 +100,8 @@ public: StandardTimer super_rapid; StandardTimer fps; + gint _suspend_counter; + #ifndef NDEBUG std::vector rapid_eps_count; std::vector super_rapid_eps_count; @@ -207,4 +210,22 @@ fps_connect(const sigc::slot& slot) return get_timers().fps.connect (slot); } +TimerSuspender::TimerSuspender () +{ + if (g_atomic_int_add(&get_timers()._suspend_counter, 1) == 0) { + get_timers().rapid.suspend(); + get_timers().super_rapid.suspend(); + get_timers().fps.suspend(); + } +} + +TimerSuspender::~TimerSuspender () +{ + if (g_atomic_int_dec_and_test (&get_timers()._suspend_counter)) { + get_timers().rapid.resume(); + get_timers().super_rapid.resume(); + get_timers().fps.resume(); + } +} + } // namespace Timers diff --git a/gtk2_ardour/timers.h b/gtk2_ardour/timers.h index 8854571f5b..28e88e4b4f 100644 --- a/gtk2_ardour/timers.h +++ b/gtk2_ardour/timers.h @@ -37,6 +37,12 @@ void set_fps_interval(unsigned int interval); sigc::connection fps_connect(const sigc::slot& slot); +class TimerSuspender { + public: + TimerSuspender (); + ~TimerSuspender (); +}; + }; #endif // TIMERS_H