1 /* 2 SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org> 3 4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 5 */ 6 #ifndef KWAYLAND_SERVER_TEXTINPUT_INTERFACE_P_H 7 #define KWAYLAND_SERVER_TEXTINPUT_INTERFACE_P_H 8 #include "global_p.h" 9 #include "resource_p.h" 10 #include "textinput_interface.h" 11 12 #include <QPointer> 13 #include <QRect> 14 #include <QVector> 15 16 namespace KWayland 17 { 18 namespace Server 19 { 20 class TextInputManagerUnstableV0Interface; 21 class TextInputManagerUnstableV2Interface; 22 23 class TextInputManagerInterface::Private : public Global::Private 24 { 25 public: 26 QVector<TextInputInterface *> inputs; 27 TextInputInterfaceVersion interfaceVersion; 28 29 protected: 30 Private(TextInputInterfaceVersion interfaceVersion, TextInputManagerInterface *q, Display *d, const wl_interface *interface, quint32 version); 31 TextInputManagerInterface *q; 32 }; 33 34 class TextInputInterface::Private : public Resource::Private 35 { 36 public: 37 ~Private() override; 38 39 virtual void sendEnter(SurfaceInterface *surface, quint32 serial) = 0; 40 virtual void sendLeave(quint32 serial, SurfaceInterface *surface) = 0; 41 42 virtual void preEdit(const QByteArray &text, const QByteArray &commit) = 0; 43 virtual void commit(const QByteArray &text) = 0; 44 virtual void deleteSurroundingText(quint32 beforeLength, quint32 afterLength) = 0; 45 virtual void setTextDirection(Qt::LayoutDirection direction) = 0; 46 virtual void setPreEditCursor(qint32 index) = 0; 47 virtual void setCursorPosition(qint32 index, qint32 anchor) = 0; 48 virtual void keysymPressed(quint32 keysym, Qt::KeyboardModifiers modifiers) = 0; 49 virtual void keysymReleased(quint32 keysym, Qt::KeyboardModifiers modifiers) = 0; 50 virtual TextInputInterfaceVersion interfaceVersion() const = 0; 51 virtual void sendInputPanelState() = 0; 52 virtual void sendLanguage() = 0; 53 54 virtual TextInputInterface::ContentHints convertContentHint(uint32_t hint) const = 0; 55 virtual TextInputInterface::ContentPurpose convertContentPurpose(uint32_t purpose) const = 0; 56 57 QByteArray preferredLanguage; 58 QRect cursorRectangle; 59 TextInputInterface::ContentHints contentHints = TextInputInterface::ContentHint::None; 60 TextInputInterface::ContentPurpose contentPurpose = TextInputInterface::ContentPurpose::Normal; 61 SeatInterface *seat = nullptr; 62 QPointer<SurfaceInterface> surface; 63 bool enabled = false; 64 QByteArray surroundingText; 65 qint32 surroundingTextCursorPosition = 0; 66 qint32 surroundingTextSelectionAnchor = 0; 67 bool inputPanelVisible = false; 68 QRect overlappedSurfaceArea; 69 QByteArray language; 70 71 protected: 72 Private(TextInputInterface *q, Global *c, wl_resource *parentResource, const wl_interface *interface, const void *implementation); 73 74 static void showInputPanelCallback(wl_client *client, wl_resource *resource); 75 static void hideInputPanelCallback(wl_client *client, wl_resource *resource); 76 static void setSurroundingTextCallback(wl_client *client, wl_resource *resource, const char *text, int32_t cursor, int32_t anchor); 77 static void setContentTypeCallback(wl_client *client, wl_resource *resource, uint32_t hint, uint32_t purpose); 78 static void setCursorRectangleCallback(wl_client *client, wl_resource *resource, int32_t x, int32_t y, int32_t width, int32_t height); 79 static void setPreferredLanguageCallback(wl_client *client, wl_resource *resource, const char *language); 80 81 private: q_func()82 TextInputInterface *q_func() 83 { 84 return reinterpret_cast<TextInputInterface *>(q); 85 } 86 }; 87 88 class TextInputUnstableV0Interface : public TextInputInterface 89 { 90 Q_OBJECT 91 public: 92 ~TextInputUnstableV0Interface() override; 93 94 Q_SIGNALS: 95 /** 96 * @internal 97 **/ 98 void requestActivate(KWayland::Server::SeatInterface *seat, KWayland::Server::SurfaceInterface *surface); 99 100 private: 101 explicit TextInputUnstableV0Interface(TextInputManagerUnstableV0Interface *parent, wl_resource *parentResource); 102 friend class TextInputManagerUnstableV0Interface; 103 class Private; 104 }; 105 106 class TextInputUnstableV2Interface : public TextInputInterface 107 { 108 Q_OBJECT 109 public: 110 ~TextInputUnstableV2Interface() override; 111 112 private: 113 explicit TextInputUnstableV2Interface(TextInputManagerUnstableV2Interface *parent, wl_resource *parentResource); 114 friend class TextInputManagerUnstableV2Interface; 115 class Private; 116 }; 117 118 class TextInputManagerUnstableV0Interface : public TextInputManagerInterface 119 { 120 Q_OBJECT 121 public: 122 explicit TextInputManagerUnstableV0Interface(Display *display, QObject *parent = nullptr); 123 ~TextInputManagerUnstableV0Interface() override; 124 125 private: 126 class Private; 127 }; 128 129 class TextInputManagerUnstableV2Interface : public TextInputManagerInterface 130 { 131 Q_OBJECT 132 public: 133 explicit TextInputManagerUnstableV2Interface(Display *display, QObject *parent = nullptr); 134 ~TextInputManagerUnstableV2Interface() override; 135 136 private: 137 class Private; 138 }; 139 140 } 141 } 142 143 #endif 144