add API to suspend timers signal emission.
authorRobin Gareus <robin@gareus.org>
Fri, 30 Oct 2015 14:50:12 +0000 (15:50 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 30 Oct 2015 14:55:26 +0000 (15:55 +0100)
libs/pbd/pbd/timer.h
libs/pbd/timer.cc

index 4c80d9d0882565705eed0e3a58977a1168eea4f0..4d96eedf7fccb735b295fb2bf993fb1350738da3 100644 (file)
@@ -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
index 662c7ddc38e5a32b1490a7715aa12c60c3644aae..8312c53d14dfe7c7b28cad89fded645abcb6c959 100644 (file)
@@ -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;
 }