Unity 8
PressedOutsideNotifier.h
1 /*
2  * Copyright (C) 2013 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 #ifndef PRESSED_OUTSIDE_NOTIFIER_H
18 #define PRESSED_OUTSIDE_NOTIFIER_H
19 
20 #include <QQuickItem>
21 
22 #include <QQuickWindow>
23 #include <QPointer>
24 #include <QTimer>
25 
26 #include "UbuntuGesturesGlobal.h"
27 
28 /*
29  Notifies when a point, mouse or touch, is pressed outside its area.
30 
31  Only enable it while needed.
32  */
33 class UBUNTUGESTURES_EXPORT PressedOutsideNotifier : public QQuickItem {
34  Q_OBJECT
35 
36 public:
37  PressedOutsideNotifier(QQuickItem * parent = nullptr);
38 
39  // From QObject
40  bool eventFilter(QObject *watched, QEvent *event) override;
41 
42 Q_SIGNALS:
43  void pressedOutside();
44 
45 protected:
46  void itemChange(ItemChange change, const ItemChangeData &value) override;
47 
48 private Q_SLOTS:
49  void setupOrTearDownEventFiltering();
50 
51 private:
52  void setupEventFiltering();
53  void tearDownEventFiltering();
54  void processFilteredTouchBegin(QTouchEvent *event);
55 
56  QPointer<QQuickWindow> m_filteredWindow;
57 
58  // Emits pressedOutside() signal on timeout
59  QTimer m_signalEmissionTimer;
60 };
61 
62 #endif // PRESSED_OUTSIDE_NOTIFIER_H