@@ -0,0 +1,114 @@
2+ * Copyright (C) 2015 Canonical, Ltd.
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.
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.
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/>.
18+#include "inputwatcher.h"
20+#include <QMouseEvent>
22+InputWatcher::InputWatcher(QObject *parent)
24+ , m_mousePressed(false)
25+ , m_touchPressed(false)
29+QObject *InputWatcher::target() const
34+void InputWatcher::setTarget(QObject *value)
36+ if (m_target == value) {
41+ m_target->removeEventFilter(this);
44+ setMousePressed(false);
45+ setTouchPressed(false);
48+ m_target->installEventFilter(this);
51+bool InputWatcher::pressed() const
53+ return m_mousePressed || m_touchPressed;
56+bool InputWatcher::eventFilter(QObject* /*watched*/, QEvent *event)
58+ switch (event->type()) {
59+ case QEvent::TouchBegin:
60+ setTouchPressed(true);
62+ case QEvent::TouchEnd:
63+ setTouchPressed(false);
65+ case QEvent::MouseButtonPress:
67+ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
68+ if (mouseEvent->button() == Qt::LeftButton) {
69+ setMousePressed(true);
73+ case QEvent::MouseButtonRelease:
75+ QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
76+ if (mouseEvent->button() == Qt::LeftButton) {
77+ setMousePressed(false);
86+ // We never filter them out. We are just watching.
90+void InputWatcher::setMousePressed(bool value)
92+ if (value == m_mousePressed) {
96+ bool oldPressed = pressed();
97+ m_mousePressed = value;
98+ if (pressed() != oldPressed) {
99+ Q_EMIT pressedChanged(pressed());
103+void InputWatcher::setTouchPressed(bool value)
105+ if (value == m_touchPressed) {
109+ bool oldPressed = pressed();
110+ m_touchPressed = value;
111+ if (pressed() != oldPressed) {
112+ Q_EMIT pressedChanged(pressed());