1 /* 2 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org> 3 SPDX-FileCopyrightText: 2021 Roman Gilg <subdiff@gmail.com> 4 5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only 6 */ 7 #pragma once 8 9 #include "text_input_v2.h" 10 11 #include "wayland_pointer_p.h" 12 13 #include <QObject> 14 15 #include <wayland-text-input-v2-client-protocol.h> 16 17 namespace Wrapland::Client 18 { 19 20 class Q_DECL_HIDDEN TextInputManagerV2::Private 21 { 22 public: 23 ~Private() = default; 24 25 void release(); 26 bool isValid(); 27 void setupV2(zwp_text_input_manager_v2* manager); 28 TextInputV2* createTextInput(Seat* seat, QObject* parent = nullptr); 29 30 operator zwp_text_input_manager_v2*() 31 { 32 return manager_ptr; 33 } 34 operator zwp_text_input_manager_v2*() const 35 { 36 return manager_ptr; 37 } 38 39 WaylandPointer<zwp_text_input_manager_v2, zwp_text_input_manager_v2_destroy> manager_ptr; 40 41 EventQueue* queue = nullptr; 42 }; 43 44 class Q_DECL_HIDDEN TextInputV2::Private 45 { 46 public: 47 Private(TextInputV2* q, Seat* seat); 48 virtual ~Private() = default; 49 50 void setup(zwp_text_input_v2* ti); 51 52 bool isValid() const; 53 void enable(Surface* surface); 54 void disable(Surface* surface); 55 void showInputPanel(); 56 void hideInputPanel(); 57 void setCursorRectangle(const QRect& rect); 58 void setPreferredLanguage(const QString& lang); 59 void setSurroundingText(const QString& text, quint32 cursor, quint32 anchor); 60 void reset(); 61 void setContentType(ContentHints hint, ContentPurpose purpose); 62 63 WaylandPointer<zwp_text_input_v2, zwp_text_input_v2_destroy> text_input_ptr; 64 65 EventQueue* queue = nullptr; 66 Seat* seat; 67 Surface* enteredSurface = nullptr; 68 quint32 latestSerial = 0; 69 bool inputPanelVisible = false; 70 Qt::LayoutDirection textDirection = Qt::LayoutDirectionAuto; 71 QByteArray language; 72 73 struct PreEdit { 74 QByteArray text; 75 QByteArray commitText; 76 qint32 cursor = 0; 77 bool cursorSet = false; 78 }; 79 PreEdit currentPreEdit; 80 PreEdit pendingPreEdit; 81 82 struct Commit { 83 QByteArray text; 84 qint32 cursor = 0; 85 qint32 anchor = 0; 86 DeleteSurroundingText deleteSurrounding; 87 }; 88 Commit currentCommit; 89 Commit pendingCommit; 90 91 private: 92 static void enterCallback(void* data, 93 zwp_text_input_v2* zwp_text_input_v2, 94 uint32_t serial, 95 wl_surface* surface); 96 static void leaveCallback(void* data, 97 zwp_text_input_v2* zwp_text_input_v2, 98 uint32_t serial, 99 wl_surface* surface); 100 static void inputPanelStateCallback(void* data, 101 zwp_text_input_v2* zwp_text_input_v2, 102 uint32_t state, 103 int32_t x, 104 int32_t y, 105 int32_t width, 106 int32_t height); 107 static void preeditStringCallback(void* data, 108 zwp_text_input_v2* zwp_text_input_v2, 109 const char* text, 110 const char* commit); 111 static void preeditStylingCallback(void* data, 112 zwp_text_input_v2* zwp_text_input_v2, 113 uint32_t index, 114 uint32_t length, 115 uint32_t style); 116 static void 117 preeditCursorCallback(void* data, zwp_text_input_v2* zwp_text_input_v2, int32_t index); 118 static void 119 commitStringCallback(void* data, zwp_text_input_v2* zwp_text_input_v2, const char* text); 120 static void cursorPositionCallback(void* data, 121 zwp_text_input_v2* zwp_text_input_v2, 122 int32_t index, 123 int32_t anchor); 124 static void deleteSurroundingTextCallback(void* data, 125 zwp_text_input_v2* zwp_text_input_v2, 126 uint32_t before_length, 127 uint32_t after_length); 128 static void 129 modifiersMapCallback(void* data, zwp_text_input_v2* zwp_text_input_v2, wl_array* map); 130 static void keysymCallback(void* data, 131 zwp_text_input_v2* zwp_text_input_v2, 132 uint32_t time, 133 uint32_t sym, 134 uint32_t state, 135 uint32_t modifiers); 136 static void 137 languageCallback(void* data, zwp_text_input_v2* zwp_text_input_v2, const char* language); 138 static void 139 textDirectionCallback(void* data, zwp_text_input_v2* zwp_text_input_v2, uint32_t direction); 140 static void configureSurroundingTextCallback(void* data, 141 zwp_text_input_v2* zwp_text_input_v2, 142 int32_t before_cursor, 143 int32_t after_cursor); 144 static void inputMethodChangedCallback(void* data, 145 zwp_text_input_v2* zwp_text_input_v2, 146 uint32_t serial, 147 uint32_t flags); 148 149 TextInputV2* q; 150 151 static const zwp_text_input_v2_listener s_listener; 152 }; 153 154 } 155