on xenial help sign in
Make DirectionalDragArea::setRecognitionTimer() more robust
commiteee50345435a87a78f867740deab47d32fa4a901 authorDaniel d'Andrada <daniel.dandrada@canonical.com> dateTue 11 Jun 2013, 15:20 (13 years ago) parent7c0cc27
3 files changed+14−14
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+7−5 plugins/Ubuntu/Gestures/DirectionalDragArea.h+6−3 tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+1−6
plugins/Ubuntu/Gestures/DirectionalDragArea.cpp+7−5
@@ -31,8 +31,8 @@ public:
3131 }
3232 virtual int interval() const { return m_timer.interval(); }
3333 virtual void setInterval(int msecs) { m_timer.setInterval(msecs); }
34− virtual void start() { m_timer.start(); }
35− virtual void stop() { m_timer.stop(); }
34+ virtual void start() { m_timer.start(); UbuntuGestures::AbstractTimer::start(); }
35+ virtual void stop() { m_timer.stop(); UbuntuGestures::AbstractTimer::stop(); }
3636private:
3737 QTimer m_timer;
3838};
@@ -120,14 +120,13 @@ void DirectionalDragArea::setMaxSilenceTime(int value)
120120
121121void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *timer)
122122{
123− // NB: We assume test code (the only client of this method) won't call it while
124− // the current timer is active
125−
126123 int interval = 0;
124+ bool timerWasRunning = false;
127125
128126 // can be null when called from the constructor
129127 if (m_recognitionTimer) {
130128 interval = m_recognitionTimer->interval();
129+ timerWasRunning = m_recognitionTimer->isRunning();
131130 if (m_recognitionTimer->parent() == this) {
132131 delete m_recognitionTimer;
133132 }
@@ -137,6 +136,9 @@ void DirectionalDragArea::setRecognitionTimer(UbuntuGestures::AbstractTimer *tim
137136 timer->setInterval(interval);
138137 connect(timer, &UbuntuGestures::AbstractTimer::timeout,
139138 this, &DirectionalDragArea::checkSpeed);
139+ if (timerWasRunning) {
140+ m_recognitionTimer->start();
141+ }
140142}
141143
142144void DirectionalDragArea::setAxisVelocityCalculator(AxisVelocityCalculator *newVelCalc)
plugins/Ubuntu/Gestures/DirectionalDragArea.h+6−3
@@ -27,13 +27,16 @@ namespace UbuntuGestures {
2727class UBUNTUGESTURES_EXPORT AbstractTimer : public QObject {
2828 Q_OBJECT
2929public:
30− AbstractTimer(QObject *parent) : QObject(parent) {}
30+ AbstractTimer(QObject *parent) : QObject(parent), m_isRunning(false) {}
3131 virtual int interval() const = 0;
3232 virtual void setInterval(int msecs) = 0;
33− virtual void start() = 0;
34− virtual void stop() = 0;
33+ virtual void start() { m_isRunning = true; };
34+ virtual void stop() { m_isRunning = false; }
35+ bool isRunning() const { return m_isRunning; }
3536Q_SIGNALS:
3637 void timeout();
38+private:
39+ bool m_isRunning;
3740};
3841}
3942
tests/plugins/Ubuntu/Gestures/tst_DirectionalDragArea.cpp+1−6
@@ -27,20 +27,15 @@ class FakeTimer : public UbuntuGestures::AbstractTimer
2727 Q_OBJECT
2828public:
2929 FakeTimer(QObject *parent = 0)
30− : UbuntuGestures::AbstractTimer(parent),
31− m_isRunning(false)
30+ : UbuntuGestures::AbstractTimer(parent)
3231 {}
3332
3433 virtual int interval() const { return m_duration; }
3534 virtual void setInterval(int msecs) { m_duration = msecs; }
36− virtual void start() { m_isRunning = true; }
37− virtual void stop() { m_isRunning = false; }
3835
39− bool isRunning() const { return m_isRunning; }
4036 void emitTimeout() {Q_EMIT timeout();}
4137private:
4238 int m_duration;
43− bool m_isRunning;
4439};
4540
4641class FakeTimeSource : public AxisVelocityCalculator::TimeSource