on xenial help sign in
Cancel the home key activation if something else is pressed along with Meta

This fixes emitting a "home key pressed" signal if the actual press was a combination of Meta + something else which in turn caused problems like the drawer hiding again on a very quick Meta+A press. (LP: #1670678) Approved by: Albert Astals Cid, Unity8 CI Bot

commit13173a8002d16377f406f289df9e4170cf1e84a7 authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 8 Mar 2017, 09:51 (10 years ago) parent60493b4f1d3019
2 files changed+33
plugins/Utils/WindowInputMonitor.cpp+3 tests/plugins/Utils/WindowInputMonitorTest.cpp+30
plugins/Utils/WindowInputMonitor.cpp+3
@@ -73,6 +73,9 @@ void WindowInputMonitor::update(QEvent *event)
7373 && m_windowLastTouchedTimer->elapsed() >= msecsWithoutTouches) {
7474 m_pressedHomeKey = keyEvent->key();
7575 m_activationTimer->start();
76+ } else if (m_pressedHomeKey != 0 && !m_homeKeys.contains(keyEvent->key())) {
77+ // something else came in... cancel activation
78+ m_activationTimer->stop();
7679 }
7780
7881 } else if (event->type() == QEvent::KeyRelease) {
tests/plugins/Utils/WindowInputMonitorTest.cpp+30
@@ -89,6 +89,8 @@ private Q_SLOTS:
8989 void tapWhileTouching();
9090 void multipleHomeKeys();
9191
92+ void keyComboInvolvingHome();
93+
9294 void repeatedSuperPress();
9395
9496private:
@@ -197,6 +199,34 @@ void WindowInputMonitorTest::touchTapTouch()
197199 QCOMPARE(activatedSpy.count(), expectedActivatedCount);
198200}
199201
202+void WindowInputMonitorTest::keyComboInvolvingHome()
203+{
204+ WindowInputMonitor homeKeyWatcher(m_fakeTimerFactory->create(this), new FakeElapsedTimer);
205+ QSignalSpy activatedSpy(&homeKeyWatcher, &WindowInputMonitor::homeKeyActivated);
206+ QVERIFY(activatedSpy.isValid());
207+
208+ passTime(1000);
209+ {
210+ QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_Super_L, Qt::NoModifier);
211+ homeKeyWatcher.update(&keyEvent);
212+ }
213+ {
214+ QKeyEvent keyEvent(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier);
215+ homeKeyWatcher.update(&keyEvent);
216+ }
217+ {
218+ QKeyEvent keyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::NoModifier);
219+ homeKeyWatcher.update(&keyEvent);
220+ }
221+ {
222+ QKeyEvent keyEvent(QEvent::KeyRelease, Qt::Key_Super_L, Qt::NoModifier);
223+ homeKeyWatcher.update(&keyEvent);
224+ }
225+ passTime(1000);
226+
227+ QCOMPARE(activatedSpy.count(), 0);
228+}
229+
200230void WindowInputMonitorTest::tapWhileTouching()
201231{
202232 WindowInputMonitor homeKeyWatcher(m_fakeTimerFactory->create(this), new FakeElapsedTimer);