on xenial help sign in
Move media key logic and powerd logic into PhysicalKeyFilter
5a061b0Josh Arenson
qml/Components/PhysicalKeysMapper.qml+28−3
@@ -15,6 +15,8 @@
15 */
15 */
16
16
17import QtQuick 2.0
17import QtQuick 2.0
18+import Powerd 0.1
19+
18/*!
20/*!
19 \brief A mapper for the physical keys on the device
21 \brief A mapper for the physical keys on the device
20
22
@@ -62,16 +64,33 @@ Item {
62
64
63
65
64 function onKeyPressed(key) {
66 function onKeyPressed(key) {
67+ var eventAccepted = true;
68+
65 /* Determine what key was pressed */
69 /* Determine what key was pressed */
66 if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
70 if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
71+
72+ // FIXME: We only consider power key presses if the screen is
73+ // on because of bugs 1410830/1409003. The theory is that when
74+ // those bugs are encountered, there is a >2s delay between the
75+ // power press event and the power release event, which causes
76+ // the shutdown dialog to appear on resume. So to avoid that
77+ // symptom while we investigate the root cause, we simply won't
78+ // initiate any dialogs when the screen is off.
79+ // This also prevents taking screenshots when the screen is off.
80+ if (Powerd.status === Powerd.On) {
67− if (!powerKeyLongPressTimer.running) {
81+ if (!powerKeyLongPressTimer.running) {
68− powerKeyLongPressTimer.restart();
82+ powerKeyLongPressTimer.restart();
83+ }
84+ d.powerKeyPressed = true;
69 }
85 }
70− d.powerKeyPressed = true;
86+ } else if (key == Qt.Key_MediaTogglePlayPause || key == Qt.Key_MediaPlay) {
87+ eventAccepted = callManager.handleMediaKey(false);
71 } else if (key == Qt.Key_VolumeDown) {
88 } else if (key == Qt.Key_VolumeDown) {
72 d.volumeDownKeyPressed = true;
89 d.volumeDownKeyPressed = true;
73 } else if (key == Qt.Key_VolumeUp) {
90 } else if (key == Qt.Key_VolumeUp) {
74 d.volumeUpKeyPressed = true;
91 d.volumeUpKeyPressed = true;
92+ } else {
93+ eventAccepted = false;
75 }
94 }
76
95
77 /* Determine how to handle it */
96 /* Determine how to handle it */
@@ -86,9 +105,12 @@ Item {
86 } else if (d.volumeUpKeyPressed) {
105 } else if (d.volumeUpKeyPressed) {
87 volumeUpPressed();
106 volumeUpPressed();
88 }
107 }
108+ return eventAccepted;
89 }
109 }
90
110
91 function onKeyReleased(key) {
111 function onKeyReleased(key) {
112+ var eventAccepted = true;
113+
92 if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
114 if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
93 powerKeyLongPressTimer.stop();
115 powerKeyLongPressTimer.stop();
94 d.powerKeyPressed = false;
116 d.powerKeyPressed = false;
@@ -97,6 +119,9 @@ Item {
97 d.volumeDownKeyPressed = false;
119 d.volumeDownKeyPressed = false;
98 } else if (key == Qt.Key_VolumeUp) {
120 } else if (key == Qt.Key_VolumeUp) {
99 d.volumeUpKeyPressed = false;
121 d.volumeUpKeyPressed = false;
122+ } else {
123+ eventAccepted = false;
100 }
124 }
125+ return eventAccepted;
101 }
126 }
102}
127}
qml/Shell.qml+1−6
@@ -183,12 +183,7 @@ Item {
183
183
184 WindowKeysFilter {
184 WindowKeysFilter {
185 Keys.onPressed: {
185 Keys.onPressed: {
186− physicalKeysMapper.onKeyPressed(event.key);
186+ event.accepted = physicalKeysMapper.onKeyPressed(event.key);
187− if (event.key == Qt.Key_PowerOff || event.key == Qt.Key_PowerDown) {
188− event.accepted = true;
189− } else {
190− event.accepted = false;
191− }
192 }
187 }
193
188
194 Keys.onReleased: {
189 Keys.onReleased: {