summaryrefslogtreecommitdiff
path: root/libs/pbd
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-10-30 15:50:12 +0100
committerRobin Gareus <robin@gareus.org>2015-10-30 15:55:26 +0100
commit7abfe85498080f202b19e02744df1e5352a06ce0 (patch)
tree27335a39a091be35f261da862473c00e24f7c3df /libs/pbd
parent3e634396378f14b337d7f10d01968466fb3f0e94 (diff)
add API to suspend timers signal emission.
Diffstat (limited to 'libs/pbd')
-rw-r--r--libs/pbd/pbd/timer.h7
-rw-r--r--libs/pbd/timer.cc9
2 files changed, 14 insertions, 2 deletions
diff --git a/libs/pbd/pbd/timer.h b/libs/pbd/pbd/timer.h
index 4c80d9d088..4d96eedf7f 100644
--- a/libs/pbd/pbd/timer.h
+++ b/libs/pbd/pbd/timer.h
@@ -46,6 +46,9 @@ public:
virtual unsigned int connection_count () const = 0;
+ void suspend () { m_suspended = true; }
+ void resume () { m_suspended = false; }
+
protected:
virtual ~Timer() { }
@@ -56,6 +59,8 @@ protected:
virtual bool on_elapsed () = 0;
+ bool suspended () const { return m_suspended; }
+
private:
Timer(const Timer&);
@@ -73,6 +78,8 @@ private:
const Glib::RefPtr<Glib::MainContext> m_main_context;
+ bool m_suspended;
+
};
class LIBPBD_API StandardTimer : public Timer
diff --git a/libs/pbd/timer.cc b/libs/pbd/timer.cc
index 662c7ddc38..8312c53d14 100644
--- a/libs/pbd/timer.cc
+++ b/libs/pbd/timer.cc
@@ -26,6 +26,7 @@ Timer::Timer (unsigned int interval,
: m_timeout_source(NULL)
, m_timeout_interval(interval)
, m_main_context(main_context)
+ , m_suspended(false)
{
}
@@ -121,7 +122,9 @@ StandardTimer::on_elapsed()
return false;
}
- m_signal();
+ if (!suspended ()) {
+ m_signal();
+ }
return true;
}
@@ -149,7 +152,9 @@ BlinkTimer::on_elapsed()
return false;
}
- m_blink_signal(blink_on = !blink_on);
+ if (!suspended ()) {
+ m_blink_signal(blink_on = !blink_on);
+ }
return true;
}