@@ -0,0 +1,63 @@
1+/*
2+ * Copyright (C) 2014 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+/*!
19+ \brief A filter for volume keys
20+
21+A filter which treats volume keys as single tri-state key with the states:
22+VolumeUp Pressed, VolumeDown Pressed or Volume Up+Down pressed
23+*/
24+QtObject {
25+ id: root
26+
27+ signal volumeUpPressed()
28+ signal volumeDownPressed()
29+ signal bothVolumeKeysPressed()
30+
31+ property bool volumeUpKeyPressed: false
32+ property bool volumeDownKeyPressed: false
33+ property bool aVolumeKeyWasReleased: true
34+
35+ function onKeyPressed(key) {
36+ if (key == Qt.Key_VolumeUp)
37+ volumeUpKeyPressed = true;
38+ else if (key == Qt.Key_VolumeDown)
39+ volumeDownKeyPressed = true;
40+
41+ if (volumeDownKeyPressed && volumeUpKeyPressed) {
42+ //avoids sending a signal repeatedly if both keys are held
43+ //instead one of the keys must have been previously released
44+ if (aVolumeKeyWasReleased)
45+ bothVolumeKeysPressed();
46+ aVolumeKeyWasReleased = false;
47+ } else if (volumeDownKeyPressed) {
48+ volumeDownPressed();
49+ } else if (volumeUpKeyPressed) {
50+ volumeUpPressed();
51+ }
52+ }
53+
54+ function onKeyReleased(key) {
55+ if (key == Qt.Key_VolumeUp) {
56+ volumeUpKeyPressed = false;
57+ aVolumeKeyWasReleased = true;
58+ } else if (key == Qt.Key_VolumeDown) {
59+ volumeDownKeyPressed = false;
60+ aVolumeKeyWasReleased = true;
61+ }
62+ }
63+}