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);
49
m_target->installEventFilter(this);
52
Q_EMIT targetChanged(value);
55
bool InputWatcher::targetPressed() const
57
return m_mousePressed || m_touchPressed;
60
bool InputWatcher::eventFilter(QObject* /*watched*/, QEvent *event)
62
switch (event->type()) {
63
case QEvent::TouchBegin:
64
setTouchPressed(true);
66
case QEvent::TouchEnd:
67
setTouchPressed(false);
69
case QEvent::MouseButtonPress:
71
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
72
if (mouseEvent->button() == Qt::LeftButton) {
73
setMousePressed(true);
77
case QEvent::MouseButtonRelease:
79
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
80
if (mouseEvent->button() == Qt::LeftButton) {
81
setMousePressed(false);
90
// We never filter them out. We are just watching.
94
void InputWatcher::setMousePressed(bool value)
96
if (value == m_mousePressed) {
100
bool oldPressed = targetPressed();
101
m_mousePressed = value;
102
if (targetPressed() != oldPressed) {
103
Q_EMIT targetPressedChanged(targetPressed());
107
void InputWatcher::setTouchPressed(bool value)
109
if (value == m_touchPressed) {
113
bool oldPressed = targetPressed();
114
m_touchPressed = value;
115
if (targetPressed() != oldPressed) {
116
Q_EMIT targetPressedChanged(targetPressed());