@@ -16,6 +16,7 @@
17import QtQuick 2.0
17import QtQuick 2.0
18import Powerd 0.1
18import Powerd 0.1
19+import Utils 0.1 as Utils
21 \brief A mapper for the physical keys on the device
22 \brief A mapper for the physical keys on the device
@@ -42,7 +43,7 @@ Item {
43 readonly property bool altTabPressed: d.altTabPressed
44 readonly property bool altTabPressed: d.altTabPressed
45− property int powerKeyLongPressCount: 31 // about 2s
46+ property int powerKeyLongPressTime: 2000
47 // For testing. If running windowed (e.g. tryShell), Alt+Tab is taken by the
48 // For testing. If running windowed (e.g. tryShell), Alt+Tab is taken by the
48 // running desktop, set this to true to use Ctrl+Tab instead.
49 // running desktop, set this to true to use Ctrl+Tab instead.
@@ -58,25 +59,19 @@ Item {
58 property bool altPressed: false
59 property bool altPressed: false
59 property bool altTabPressed: false
60 property bool altTabPressed: false
61− property int powerButtonCount
62+ property var powerButtonPressStart: 0
64− function onKeyPressed(event) {
65+ function onKeyPressed(event, currentEventTimestamp) {
65 if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
66 if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
66 if (event.isAutoRepeat) {
67 if (event.isAutoRepeat) {
67− d.powerButtonCount++;
68+ if (d.powerButtonPressStart > 0
68−
69+ && currentEventTimestamp - d.powerButtonPressStart >= powerKeyLongPressTime) {
69− // We count repeats rather than watch the time because if the
70+ d.powerButtonPressStart = 0;
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
75− if (d.powerButtonCount === powerKeyLongPressCount) {
76 root.powerKeyLongPressed();
71 root.powerKeyLongPressed();
79− d.powerButtonCount = 0;
74+ d.powerButtonPressStart = currentEventTimestamp;
81 } else if ((event.key == Qt.Key_MediaTogglePlayPause || event.key == Qt.Key_MediaPlay) && !event.isAutoRepeat) {
76 } else if ((event.key == Qt.Key_MediaTogglePlayPause || event.key == Qt.Key_MediaPlay) && !event.isAutoRepeat) {
82 event.accepted = callManager.handleMediaKey(false);
77 event.accepted = callManager.handleMediaKey(false);
@@ -112,8 +107,9 @@ Item {
115− function onKeyReleased(event) {
110+ function onKeyReleased(event, currentEventTimestamp) {
116 if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
111 if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
112+ d.powerButtonPressStart = 0;
117 event.accepted = true;
113 event.accepted = true;
118 } else if (event.key == Qt.Key_VolumeDown) {
114 } else if (event.key == Qt.Key_VolumeDown) {
119 if (!d.ignoreVolumeEvents) root.volumeDownTriggered();
115 if (!d.ignoreVolumeEvents) root.volumeDownTriggered();