Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qwaylandkeyboard_p.h
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// Copyright (C) 2017 Klarälvdalens Datakonsult AB (KDAB).
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
4
5#ifndef QTWAYLAND_QWLKEYBOARD_P_H
6#define QTWAYLAND_QWLKEYBOARD_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18#include <QtWaylandCompositor/private/qwaylandcompositor_p.h>
19
20#include <QtWaylandCompositor/private/qtwaylandcompositorglobal_p.h>
21#include <QtWaylandCompositor/qwaylandseat.h>
22#include <QtWaylandCompositor/qwaylandkeyboard.h>
23#include <QtWaylandCompositor/qwaylanddestroylistener.h>
24
25#include <QtCore/private/qobject_p.h>
26#include <QtWaylandCompositor/private/qwayland-server-wayland.h>
27
28#include <QtCore/QList>
29
30#if QT_CONFIG(xkbcommon)
31#include <xkbcommon/xkbcommon.h>
32#include <QtGui/private/qxkbcommon_p.h>
33#endif
34
35
37
38class Q_WAYLANDCOMPOSITOR_EXPORT QWaylandKeyboardPrivate : public QObjectPrivate
39 , public QtWaylandServer::wl_keyboard
40{
41public:
42 Q_DECLARE_PUBLIC(QWaylandKeyboard)
43
45
47 ~QWaylandKeyboardPrivate() override;
48
49 QWaylandCompositor *compositor() const { return seat->compositor(); }
50
51 void focused(QWaylandSurface* surface);
52
53#if QT_CONFIG(xkbcommon)
54 struct xkb_state *xkbState() const { return mXkbState.get(); }
55 struct xkb_context *xkbContext() const {
56 return QWaylandCompositorPrivate::get(seat->compositor())->xkbContext();
57 }
58 uint32_t xkbModsMask() const { return modsDepressed | modsLatched | modsLocked; }
59 void maybeUpdateXkbScanCodeTable();
60 void resetKeyboardState();
61#endif
62
63 void keyEvent(uint code, uint32_t state);
64 void sendKeyEvent(uint code, uint32_t state);
65 void updateModifierState(uint code, uint32_t state);
66 void checkAndRepairModifierState(QKeyEvent *ke);
67 void maybeUpdateKeymap();
68
69 void checkFocusResource(Resource *resource);
70 void sendEnter(QWaylandSurface *surface, Resource *resource);
71
72protected:
73 void keyboard_bind_resource(Resource *resource) override;
74 void keyboard_destroy_resource(Resource *resource) override;
75 void keyboard_release(Resource *resource) override;
76
77private:
78#if QT_CONFIG(xkbcommon)
79 void createXKBKeymap();
80 void createXKBState(xkb_keymap *keymap);
81#endif
82 static uint toWaylandKey(const uint nativeScanCode);
83 static uint fromWaylandKey(const uint key);
84
85 void sendRepeatInfo();
86
87 QWaylandSeat *seat = nullptr;
88
89 QWaylandSurface *focus = nullptr;
90 Resource *focusResource = nullptr;
91 QWaylandDestroyListener focusDestroyListener;
92
93 QList<uint32_t> keys;
94 uint32_t modsDepressed = 0;
95 uint32_t modsLatched = 0;
96 uint32_t modsLocked = 0;
97 uint32_t group = 0;
98
99 uint32_t shiftIndex = 0;
100 uint32_t controlIndex = 0;
101 uint32_t altIndex = 0;
102
103 Qt::KeyboardModifiers currentModifierState;
104
105 bool pendingKeymap = false;
106#if QT_CONFIG(xkbcommon)
107 size_t keymap_size;
108 int keymap_fd = -1;
109 char *keymap_area = nullptr;
110 using ScanCodeKey = std::pair<uint,int>; // group/layout and QtKey
111 QMap<ScanCodeKey, uint> scanCodesByQtKey;
113#endif
114
115 quint32 repeatRate = 40;
116 quint32 repeatDelay = 400;
117};
118
120
121#endif // QTWAYLAND_QWLKEYBOARD_P_H
The QKeyEvent class describes a key event.
Definition qevent.h:424
static QWaylandCompositorPrivate * get(QWaylandCompositor *compositor)
\qmltype WaylandCompositor \instantiates QWaylandCompositor \inqmlmodule QtWayland....
QWaylandCompositor * compositor() const
\inmodule QtWaylandCompositor
\qmltype WaylandSeat \instantiates QWaylandSeat \inqmlmodule QtWayland.Compositor
QWaylandCompositor * compositor() const
Returns the compositor for this QWaylandSeat.
\qmltype WaylandSurface \instantiates QWaylandSurface \inqmlmodule QtWayland.Compositor
std::unique_ptr< struct xkb_state, XKBStateDeleter > ScopedXKBState
bool focus
[0]
else opt state
[0]
Combined button and popup list for selecting options.
static QDBusError::ErrorType get(const char *name)
GLuint64 key
GLboolean GLuint group
unsigned int quint32
Definition qtypes.h:50
unsigned int uint
Definition qtypes.h:34
QStringList keys