~ci-train-bot/unity8/unity8-ubuntu-zesty-2415

« back to all changes in this revision

Viewing changes to qml/Components/PhysicalKeysMapper.qml

updated from lp:~unity-mir/unity8/shellRotation

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2014-2015 Canonical, Ltd.
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify
 
5
 * it under the terms of the GNU General Public License as published by
 
6
 * the Free Software Foundation; version 3.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful,
 
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
 * GNU General Public License for more details.
 
12
 *
 
13
 * You should have received a copy of the GNU General Public License
 
14
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 */
 
16
 
 
17
import QtQuick 2.0
 
18
import Powerd 0.1
 
19
 
 
20
/*!
 
21
 \brief A mapper for the physical keys on the device
 
22
 
 
23
 A mapper to handle events triggered by pressing physical keys on a device.
 
24
 Keys included are
 
25
    * Volume Decrease
 
26
    * Volume Increase
 
27
    * Power
 
28
 
 
29
 This allows for handling the following events
 
30
    * Power dialog
 
31
    * Volume Decreases/Increases
 
32
    * Screenshots
 
33
 
 
34
*/
 
35
 
 
36
Item {
 
37
    id: root
 
38
 
 
39
    signal powerKeyLongPressed;
 
40
    signal volumeDownTriggered;
 
41
    signal volumeUpTriggered;
 
42
    signal screenshotTriggered;
 
43
 
 
44
    QtObject {
 
45
        id: d
 
46
 
 
47
        property bool volumeDownKeyPressed: false
 
48
        property bool volumeUpKeyPressed: false
 
49
        property bool ignoreVolumeEvents: false
 
50
    }
 
51
 
 
52
    Timer {
 
53
        id: powerKeyLongPressTimer
 
54
 
 
55
        interval: 2000
 
56
        onTriggered: root.powerKeyLongPressed();
 
57
    }
 
58
 
 
59
 
 
60
    function onKeyPressed(event) {
 
61
        if ((event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff)
 
62
            && !event.isAutoRepeat) {
 
63
 
 
64
            // FIXME: We only consider power key presses if the screen is
 
65
            // on because of bugs 1410830/1409003.  The theory is that when
 
66
            // those bugs are encountered, there is a >2s delay between the
 
67
            // power press event and the power release event, which causes
 
68
            // the shutdown dialog to appear on resume.  So to avoid that
 
69
            // symptom while we investigate the root cause, we simply won't
 
70
            // initiate any dialogs when the screen is off.
 
71
            if (Powerd.status === Powerd.On) {
 
72
                powerKeyLongPressTimer.restart();
 
73
            }
 
74
            event.accepted = true;
 
75
        } else if ((event.key == Qt.Key_MediaTogglePlayPause || event.key == Qt.Key_MediaPlay)
 
76
                   && !event.isAutoRepeat) {
 
77
            event.accepted = callManager.handleMediaKey(false);
 
78
        } else if (event.key == Qt.Key_VolumeDown) {
 
79
            if (event.isAutoRepeat && !d.ignoreVolumeEvents) root.volumeDownTriggered();
 
80
            else if (!event.isAutoRepeat) {
 
81
                if (d.volumeUpKeyPressed) {
 
82
                    if (Powerd.status === Powerd.On) root.screenshotTriggered();
 
83
                    d.ignoreVolumeEvents = true;
 
84
                }
 
85
                d.volumeDownKeyPressed = true;
 
86
            }
 
87
        } else if (event.key == Qt.Key_VolumeUp) {
 
88
            if (event.isAutoRepeat && !d.ignoreVolumeEvents) root.volumeUpTriggered();
 
89
            else if (!event.isAutoRepeat) {
 
90
                if (d.volumeDownKeyPressed) {
 
91
                    if (Powerd.status === Powerd.On) root.screenshotTriggered();
 
92
                    d.ignoreVolumeEvents = true;
 
93
                }
 
94
                d.volumeUpKeyPressed = true;
 
95
            }
 
96
        }
 
97
    }
 
98
 
 
99
    function onKeyReleased(event) {
 
100
        if (event.key == Qt.Key_PowerDown || event.key == Qt.Key_PowerOff) {
 
101
            powerKeyLongPressTimer.stop();
 
102
            event.accepted = true;
 
103
        } else if (event.key == Qt.Key_VolumeDown) {
 
104
            if (!d.ignoreVolumeEvents) root.volumeDownTriggered();
 
105
            d.volumeDownKeyPressed = false;
 
106
            if (!d.volumeUpKeyPressed) d.ignoreVolumeEvents = false;
 
107
        } else if (event.key == Qt.Key_VolumeUp) {
 
108
            if (!d.ignoreVolumeEvents) root.volumeUpTriggered();
 
109
            d.volumeUpKeyPressed = false;
 
110
            if (!d.volumeDownKeyPressed) d.ignoreVolumeEvents = false;
 
111
        }
 
112
    }
 
113
}