on xenial help sign in
alternative patch from Albert

more correct fwiw

commit4113c0dad2c023d0f7b39d58091f2eecb2ea5b1e authorLukáš Tinkl <lukas.tinkl@canonical.com> dateMon 10 Oct 2016, 16:47 (10 years ago) parent1bb5972
3 files changed+63−9
plugins/Utils/Timer.cpp+5−2 plugins/Utils/Timer.h+5−6 tests/plugins/Utils/WindowInputMonitorTest.cpp+53−1
plugins/Utils/Timer.cpp+5−2
@@ -37,13 +37,16 @@ void Timer::setInterval(int msecs)
3737void Timer::start()
3838{
3939 m_timer.start();
40− AbstractTimer::start();
4140}
4241
4342void Timer::stop()
4443{
4544 m_timer.stop();
46− AbstractTimer::stop();
45+}
46+
47+bool Timer::isRunning() const
48+{
49+ return m_timer.isActive();
4750}
4851
4952bool Timer::isSingleShot() const
plugins/Utils/Timer.h+5−6
@@ -30,18 +30,16 @@ class AbstractTimer : public QObject
3030{
3131 Q_OBJECT
3232public:
33− AbstractTimer(QObject *parent) : QObject(parent), m_isRunning(false) {}
33+ AbstractTimer(QObject *parent) : QObject(parent) {}
3434 virtual int interval() const = 0;
3535 virtual void setInterval(int msecs) = 0;
36− virtual void start() { m_isRunning = true; }
37− virtual void stop() { m_isRunning = false; }
38− bool isRunning() const { return m_isRunning; }
36+ virtual void start() = 0;
37+ virtual void stop() = 0;
38+ virtual bool isRunning() const = 0;
3939 virtual bool isSingleShot() const = 0;
4040 virtual void setSingleShot(bool value) = 0;
4141Q_SIGNALS:
4242 void timeout();
43−private:
44− bool m_isRunning;
4543};
4644
4745/** A QTimer wrapper */
@@ -55,6 +53,7 @@ public:
5553 void setInterval(int msecs) override;
5654 void start() override;
5755 void stop() override;
56+ bool isRunning() const override;
5857 bool isSingleShot() const override;
5958 void setSingleShot(bool value) override;
6059private:
tests/plugins/Utils/WindowInputMonitorTest.cpp+53−1
@@ -48,11 +48,14 @@ public:
4848 int interval() const override;
4949 void setInterval(int msecs) override;
5050 void start() override;
51+ void stop() override;
52+ bool isRunning() const override;
5153 bool isSingleShot() const override;
5254 void setSingleShot(bool value) override;
5355private:
5456 int m_interval;
5557 bool m_singleShot;
58+ bool m_isRunning;
5659 qint64 m_nextTimeoutTime;
5760};
5861
@@ -85,6 +88,8 @@ private Q_SLOTS:
8588 void tapWhileTouching();
8689 void multipleHomeKeys();
8790
91+ void repeatedSuperPress();
92+
8893private:
8994 void passTime(qint64 timeSpanMs);
9095
@@ -258,12 +263,49 @@ void WindowInputMonitorTest::multipleHomeKeys()
258263 QCOMPARE(activatedSpy.count(), 1);
259264}
260265
266+// regression test for lp:1607427
267+void WindowInputMonitorTest::repeatedSuperPress()
268+{
269+ WindowInputMonitor homeKeyWatcher(m_fakeTimerFactory->create(), new FakeElapsedTimer);
270+ QSignalSpy activatedSpy(&homeKeyWatcher, &WindowInputMonitor::homeKeyActivated);
271+ QVERIFY(activatedSpy.isValid());
272+
273+ // 1st try
274+ passTime(1000);
275+ {
276+ QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Super_L, Qt::NoModifier);
277+ homeKeyWatcher.update(&keyEvent);
278+ }
279+ passTime(50);
280+ {
281+ QKeyEvent keyEvent(QEvent::KeyRelease, Qt::Key_Super_L, Qt::NoModifier);
282+ homeKeyWatcher.update(&keyEvent);
283+ }
284+ passTime(1000);
285+ QCOMPARE(activatedSpy.count(), 1);
286+
287+ // 2nd try
288+ activatedSpy.clear();
289+ {
290+ QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Super_L, Qt::NoModifier);
291+ homeKeyWatcher.update(&keyEvent);
292+ }
293+ passTime(50);
294+ {
295+ QKeyEvent keyEvent(QEvent::KeyRelease, Qt::Key_Super_L, Qt::NoModifier);
296+ homeKeyWatcher.update(&keyEvent);
297+ }
298+ passTime(1000);
299+ QCOMPARE(activatedSpy.count(), 1);
300+}
301+
261302/////////////////////////////////// FakeTimer //////////////////////////////////
262303
263304FakeTimer::FakeTimer(QObject *parent)
264305 : UnityUtil::AbstractTimer(parent)
265306 , m_interval(0)
266307 , m_singleShot(true)
308+ , m_isRunning(false)
267309{
268310}
269311
@@ -285,10 +327,20 @@ void FakeTimer::update()
285327
286328void FakeTimer::start()
287329{
288− AbstractTimer::start();
330+ m_isRunning = true;
289331 m_nextTimeoutTime = FakeElapsedTimer::msecsSinceEpoch + (qint64)interval();
290332}
291333
334+void FakeTimer::stop()
335+{
336+ m_isRunning = false;
337+}
338+
339+bool FakeTimer::isRunning() const
340+{
341+ return m_isRunning;
342+}
343+
292344int FakeTimer::interval() const
293345{
294346 return m_interval;