1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2017 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the QtWaylandCompositor module of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:GPL$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU |
19 | ** General Public License version 3 or (at your option) any later version |
20 | ** approved by the KDE Free Qt Foundation. The licenses are as published by |
21 | ** the Free Software Foundation and appearing in the file LICENSE.GPL3 |
22 | ** included in the packaging of this file. Please review the following |
23 | ** information to ensure the GNU General Public License requirements will |
24 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
25 | ** |
26 | ** $QT_END_LICENSE$ |
27 | ** |
28 | ****************************************************************************/ |
29 | |
30 | #ifndef QWAYLANDSEAT_H |
31 | #define QWAYLANDSEAT_H |
32 | |
33 | #include <QtCore/qnamespace.h> |
34 | #include <QtCore/QPoint> |
35 | #include <QtCore/QString> |
36 | |
37 | #include <QtWaylandCompositor/qtwaylandcompositorglobal.h> |
38 | #include <QtWaylandCompositor/qwaylandcompositorextension.h> |
39 | #include <QtWaylandCompositor/qwaylandkeyboard.h> |
40 | |
41 | QT_BEGIN_NAMESPACE |
42 | |
43 | class QWaylandCompositor; |
44 | class QWaylandSurface; |
45 | class QKeyEvent; |
46 | class QTouchEvent; |
47 | class QWaylandView; |
48 | class QInputEvent; |
49 | class QWaylandSeatPrivate; |
50 | class QWaylandDrag; |
51 | class QWaylandKeyboard; |
52 | class QWaylandPointer; |
53 | class QWaylandTouch; |
54 | |
55 | class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandSeat : public QWaylandObject |
56 | { |
57 | Q_OBJECT |
58 | Q_DECLARE_PRIVATE(QWaylandSeat) |
59 | |
60 | #if QT_CONFIG(draganddrop) |
61 | Q_PROPERTY(QWaylandDrag *drag READ drag CONSTANT) |
62 | #endif |
63 | Q_PROPERTY(QWaylandKeymap *keymap READ keymap CONSTANT) |
64 | public: |
65 | enum CapabilityFlag { |
66 | // The order should match the enum WL_SEAT_CAPABILITY_* |
67 | Pointer = 0x01, |
68 | Keyboard = 0x02, |
69 | Touch = 0x04, |
70 | |
71 | DefaultCapabilities = Pointer | Keyboard | Touch |
72 | }; |
73 | Q_DECLARE_FLAGS(CapabilityFlags, CapabilityFlag) |
74 | Q_ENUM(CapabilityFlags) |
75 | |
76 | QWaylandSeat(QWaylandCompositor *compositor, CapabilityFlags capabilityFlags = DefaultCapabilities); |
77 | ~QWaylandSeat() override; |
78 | virtual void initialize(); |
79 | bool isInitialized() const; |
80 | |
81 | void sendMousePressEvent(Qt::MouseButton button); |
82 | void sendMouseReleaseEvent(Qt::MouseButton button); |
83 | void sendMouseMoveEvent(QWaylandView *surface , const QPointF &localPos, const QPointF &outputSpacePos = QPointF()); |
84 | void sendMouseWheelEvent(Qt::Orientation orientation, int delta); |
85 | |
86 | void sendKeyPressEvent(uint code); |
87 | void sendKeyReleaseEvent(uint code); |
88 | |
89 | void sendFullKeyEvent(QKeyEvent *event); |
90 | Q_INVOKABLE void sendKeyEvent(int qtKey, bool pressed); |
91 | |
92 | uint sendTouchPointEvent(QWaylandSurface *surface, int id, const QPointF &point, Qt::TouchPointState state); |
93 | Q_INVOKABLE uint sendTouchPointPressed(QWaylandSurface *surface, int id, const QPointF &position); |
94 | Q_INVOKABLE uint sendTouchPointReleased(QWaylandSurface *surface, int id, const QPointF &position); |
95 | Q_INVOKABLE uint sendTouchPointMoved(QWaylandSurface *surface, int id, const QPointF &position); |
96 | Q_INVOKABLE void sendTouchFrameEvent(QWaylandClient *client); |
97 | Q_INVOKABLE void sendTouchCancelEvent(QWaylandClient *client); |
98 | |
99 | void sendFullTouchEvent(QWaylandSurface *surface, QTouchEvent *event); |
100 | |
101 | QWaylandPointer *pointer() const; |
102 | //Normally set by the mouse device, |
103 | //But can be set manually for use with touch or can reset unset the current mouse focus; |
104 | QWaylandView *mouseFocus() const; |
105 | void setMouseFocus(QWaylandView *view); |
106 | |
107 | QWaylandKeyboard *keyboard() const; |
108 | QWaylandSurface *keyboardFocus() const; |
109 | bool setKeyboardFocus(QWaylandSurface *surface); |
110 | QWaylandKeymap *keymap(); |
111 | |
112 | QWaylandTouch *touch() const; |
113 | |
114 | QWaylandCompositor *compositor() const; |
115 | |
116 | #if QT_CONFIG(draganddrop) |
117 | QWaylandDrag *drag() const; |
118 | #endif |
119 | |
120 | QWaylandSeat::CapabilityFlags capabilities() const; |
121 | |
122 | virtual bool isOwner(QInputEvent *inputEvent) const; |
123 | |
124 | static QWaylandSeat *fromSeatResource(struct ::wl_resource *resource); |
125 | |
126 | Q_SIGNALS: |
127 | void mouseFocusChanged(QWaylandView *newFocus, QWaylandView *oldFocus); |
128 | void keyboardFocusChanged(QWaylandSurface *newFocus, QWaylandSurface *oldFocus); |
129 | void cursorSurfaceRequest(QWaylandSurface *surface, int hotspotX, int hotspotY); |
130 | |
131 | private: |
132 | void handleMouseFocusDestroyed(); |
133 | }; |
134 | |
135 | Q_DECLARE_OPERATORS_FOR_FLAGS(QWaylandSeat::CapabilityFlags) |
136 | |
137 | QT_END_NAMESPACE |
138 | |
139 | #endif // QWAYLANDSEAT_H |
140 | |