@@ -16,6 +16,7 @@
1616
1717import QtQuick 2.0
1818import Powerd 0.1
19+import Utils 0.1 as Utils
1920
2021/*!
2122 \brief A mapper for the physical keys on the device
@@ -42,7 +43,7 @@ Item {
4243
4344 readonly property bool altTabPressed: d.altTabPressed
4445
45− property int powerKeyLongPressCount: 31 // about 2s
46+ property int powerKeyLongPressTime: 2000
4647
4748 // For testing. If running windowed (e.g. tryShell), Alt+Tab is taken by the
4849 // running desktop, set this to true to use Ctrl+Tab instead.
@@ -58,25 +59,19 @@ Item {
5859 property bool altPressed: false
5960 property bool altTabPressed: false
6061
61− property int powerButtonCount
62+ property var powerButtonPressStart: 0
6263 }
6364
64− function onKeyPressed(event) {
65+ function onKeyPressed(event, currentEventTimestamp) {
6566 if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
6667 if (event.isAutoRepeat) {
67− d.powerButtonCount++;
68−
69− // We count repeats rather than watch the time because if the
70− // system is loaded, we may misinterpret a long wall-clock
71− // delay as a long press, when in fact we just didn't get
72− // around to noticing the key-release event in time. But if we
73− // count events instead, we will be in sync with the event
74− // queue.
75− if (d.powerButtonCount === powerKeyLongPressCount) {
68+ if (d.powerButtonPressStart > 0
69+ && currentEventTimestamp - d.powerButtonPressStart >= powerKeyLongPressTime) {
70+ d.powerButtonPressStart = 0;
7671 root.powerKeyLongPressed();
7772 }
7873 } else {
79− d.powerButtonCount = 0;
74+ d.powerButtonPressStart = currentEventTimestamp;
8075 }
8176 } else if ((event.key == Qt.Key_MediaTogglePlayPause || event.key == Qt.Key_MediaPlay) && !event.isAutoRepeat) {
8277 event.accepted = callManager.handleMediaKey(false);
@@ -112,8 +107,9 @@ Item {
112107 }
113108 }
114109
115− function onKeyReleased(event) {
110+ function onKeyReleased(event, currentEventTimestamp) {
116111 if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
112+ d.powerButtonPressStart = 0;
117113 event.accepted = true;
118114 } else if (event.key == Qt.Key_VolumeDown) {
119115 if (!d.ignoreVolumeEvents) root.volumeDownTriggered();