on xenial help sign in
Move power key long press functionality to PhysicalKeysFilter from dialogs
commit6dc418d68b4f63e794e94c017199f03c31e99e24 authorJosh Arenson <joshua.arenson@canonical.com> dateWed 10 Dec 2014, 11:32 (12 years ago) parentabd3899
4 files changed+37−49
qml/Components/Dialogs.qml+5−33 qml/Components/PhysicalKeysFilter.qml+21−6 qml/Shell.qml+5−1 tests/qmltests/Components/tst_PhysicalKeysFilter.qml+6−9
qml/Components/Dialogs.qml+5−33
@@ -24,42 +24,14 @@ import Ubuntu.Components.Popups 0.1
2424Item {
2525 id: root
2626
27− function onPowerKeyPressed() {
28− // FIXME: event.isAutoRepeat is always false on Nexus 4.
29− // So we use powerKeyTimer.running to avoid the PowerOff key repeat
30− // https://launchpad.net/bugs/1349416
31− if (!powerKeyTimer.running) {
32− powerKeyTimer.restart();
33− }
34− }
35−
36− function onPowerKeyReleased() {
37− powerKeyTimer.stop();
38− }
39−
4027 signal powerOffClicked();
4128
42− QtObject {
43− id: d // private stuff
44−
45− property bool dialogShown: false
46−
47− function showPowerDialog() {
48− if (!d.dialogShown) {
49− d.dialogShown = true;
50− PopupUtils.open(powerDialog, root, {"z": root.z});
51− }
52− }
53− }
54−
55− Timer {
56− id: powerKeyTimer
57− interval: 2000
58− repeat: false
59− triggeredOnStart: false
29+ property bool dialogShown: false
6030
61− onTriggered: {
62− d.showPowerDialog();
31+ function showPowerDialog() {
32+ if (!d.dialogShown) {
33+ d.dialogShown = true;
34+ PopupUtils.open(powerDialog, root, {"z": root.z});
6335 }
6436 }
6537
qml/Components/PhysicalKeysFilter.qml+21−6
@@ -34,10 +34,10 @@ QtObject {
3434 id: root
3535
3636 signal bothVolumeKeysPressed();
37− signal powerPressed()
38− signal screenshotPressed()
39− signal volumeDownPressed()
40− signal volumeUpPressed()
37+ signal powerKeyLongPress();
38+ signal screenshotPressed();
39+ signal volumeDownPressed();
40+ signal volumeUpPressed();
4141
4242 property bool eventAccepted: false
4343
@@ -48,11 +48,25 @@ QtObject {
4848 property bool volumeDownKeyPressed: false
4949 property bool volumeUpKeyPressed: false
5050
51+ // FIXME: event.isAutoRepeat is always false on Nexus 4.
52+ // So we use powerKeyTimer.running to avoid the PowerOff key repeat
53+ // https://launchpad.net/bugs/1349416
54+ property variant pklpt: Timer {
55+ id: powerKeyLongPressTimer
56+
57+ interval: 2000
58+ repeat: false
59+ triggeredOnStart: false
60+
61+ onTriggered: powerKeyLongPress();
62+ }
63+
5164 function onKeyPressed(key) {
5265 /* Determine what key was pressed */
53−
5466 if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
55− powerPressed();
67+ if (!powerKeyLongPressTimer.running) {
68+ powerKeyLongPressTimer.restart();
69+ }
5670 eventAccepted = true;
5771 powerKeyPressed = true;
5872 } else if (key == Qt.Key_VolumeDown) {
@@ -86,6 +100,7 @@ QtObject {
86100
87101 function onKeyReleased(key) {
88102 if (key == Qt.Key_PowerDown || key == Qt.Key_PowerOff) {
103+ powerKeyLongPressTimer.stop();
89104 eventAccepted = true;
90105 powerKeyPressed = false;
91106 aPowerKeyWasReleased = true;
qml/Shell.qml+5−1
@@ -157,7 +157,6 @@ Item {
157157 PhysicalKeysFilter {
158158 id: physicalKeysFilter
159159
160− onPowerPressed: dialogs.onPowerKeyPressed();
161160 onVolumeDownPressed: volumeControl.volumeDown()
162161 onVolumeUpPressed: volumeControl.volumeUp()
163162 onScreenshotPressed: screenGrabber.capture()
@@ -804,6 +803,11 @@ Item {
804803 shutdownFadeOutRectangle.visible = true;
805804 shutdownFadeOut.start();
806805 }
806+
807+ Connections {
808+ target: physicalKeysFilter
809+ onPowerKeyLongPress: dialogs.showPowerDialog();
810+ }
807811 }
808812
809813 EdgeDemo {
tests/qmltests/Components/tst_PhysicalKeysFilter.qml+6−9
@@ -25,7 +25,7 @@ import Unity.Test 0.1 as UT
2525Item {
2626
2727 property int onBothVolumeKeysPressedCount: 0
28− property int onPowerPressedCount: 0
28+ property int onPowerKeyLongPressCount: 0
2929 property int onScreenshotPressedCount: 0
3030 property int onVolumeDownPressedCount: 0
3131 property int onVolumeUpPressedCount: 0
@@ -34,7 +34,7 @@ Item {
3434 id: physicalKeysFilter
3535
3636 onBothVolumeKeysPressed: onBothVolumeKeysPressedCount += 1
37− onPowerPressed: onPowerPressedCount += 1
37+ onPowerKeyLongPress: onPowerKeyLongPressCount += 1
3838 onScreenshotPressed: onScreenshotPressedCount += 1
3939 onVolumeDownPressed: onVolumeDownPressedCount += 1
4040 onVolumeUpPressed: onVolumeUpPressedCount += 1
@@ -51,7 +51,7 @@ Item {
5151 physicalKeysFilter.onKeyReleased(Qt.Key_VolumeUp);
5252
5353 onBothVolumeKeysPressedCount = 0;
54− onPowerPressedCount = 0;
54+ onPowerKeyLongPressCount = 0;
5555 onScreenshotPressedCount = 0;
5656 onVolumeDownPressedCount = 0;
5757 onVolumeUpPressedCount = 0;
@@ -68,24 +68,21 @@ Item {
6868 compare(onBothVolumeKeysPressedCount, 1);
6969 }
7070
71− function test_power_button() {
71+ function test_long_press_power_button() {
7272 physicalKeysFilter.onKeyPressed(Qt.Key_PowerDown);
73− compare(onPowerPressedCount, 1);
73+ wait(3000);
7474
75− sleep(3);
76− compare(onPowerPressedCount, 1);
75+ compare(onPowerKeyLongPressCount, 1);
7776 }
7877
7978 function test_screenshot_buttons() {
8079 physicalKeysFilter.onKeyPressed(Qt.Key_PowerDown);
8180 physicalKeysFilter.onKeyPressed(Qt.Key_VolumeDown);
8281
83− compare(onPowerPressedCount, 1);
8482 compare(onScreenshotPressedCount, 1);
8583 compare(onVolumeDownPressedCount, 0);
8684
8785 sleep(3);
88− compare(onPowerPressedCount, 1);
8986 compare(onScreenshotPressedCount, 1);
9087 compare(onVolumeDownPressedCount, 0);
9188 }