8 #include "resource_p.h"
9 #include "seat_interface_p.h"
10 #include "surface_interface.h"
11 #include "textinput_interface_p.h"
15 #include <wayland-text-input-unstable-v2-server-protocol.h>
16 #include <wayland-text-server-protocol.h>
22 void TextInputInterface::Private::showInputPanelCallback(wl_client *client, wl_resource *resource)
24 auto p = cast<Private>(resource);
25 Q_ASSERT(*p->client == client);
26 Q_EMIT p->q_func()->requestShowInputPanel();
29 void TextInputInterface::Private::hideInputPanelCallback(wl_client *client, wl_resource *resource)
31 auto p = cast<Private>(resource);
32 Q_ASSERT(*p->client == client);
33 Q_EMIT p->q_func()->requestHideInputPanel();
36 void TextInputInterface::Private::setSurroundingTextCallback(wl_client *client, wl_resource *resource,
const char *text, int32_t cursor, int32_t anchor)
38 auto p = cast<Private>(resource);
39 Q_ASSERT(*p->client == client);
42 p->surroundingTextCursorPosition = cursor;
43 p->surroundingTextSelectionAnchor = anchor;
44 Q_EMIT p->q_func()->surroundingTextChanged();
47 void TextInputInterface::Private::setContentTypeCallback(wl_client *client, wl_resource *resource, uint32_t hint, uint32_t purpose)
49 auto p = cast<Private>(resource);
50 Q_ASSERT(*p->client == client);
51 const auto contentHints = p->convertContentHint(hint);
52 const auto contentPurpose = p->convertContentPurpose(purpose);
53 if (contentHints != p->contentHints || contentPurpose != p->contentPurpose) {
54 p->contentHints = contentHints;
55 p->contentPurpose = contentPurpose;
56 Q_EMIT p->q_func()->contentTypeChanged();
60 void TextInputInterface::Private::setCursorRectangleCallback(wl_client *client, wl_resource *resource, int32_t x, int32_t y, int32_t width, int32_t height)
62 auto p = cast<Private>(resource);
63 Q_ASSERT(*p->client == client);
65 if (p->cursorRectangle != rect) {
66 p->cursorRectangle = rect;
67 Q_EMIT p->q_func()->cursorRectangleChanged(p->cursorRectangle);
71 void TextInputInterface::Private::setPreferredLanguageCallback(wl_client *client, wl_resource *resource,
const char *language)
73 auto p = cast<Private>(resource);
74 Q_ASSERT(*p->client == client);
76 if (p->preferredLanguage != preferredLanguage) {
77 p->preferredLanguage = preferredLanguage;
78 Q_EMIT p->q_func()->preferredLanguageChanged(p->preferredLanguage);
82 TextInputInterface::Private::Private(TextInputInterface *q, Global *c, wl_resource *parentResource,
const wl_interface *interface,
const void *implementation)
83 :
Resource::Private(q, c, parentResource, interface, implementation)
87 TextInputInterface::Private::~Private()
90 wl_resource_destroy(resource);
98 return d->preferredLanguage;
104 return d->contentHints;
110 return d->contentPurpose;
116 return d->surroundingText;
119 qint32 TextInputInterface::surroundingTextCursorPosition()
const
122 return d->surroundingTextCursorPosition;
125 qint32 TextInputInterface::surroundingTextSelectionAnchor()
const
128 return d->surroundingTextSelectionAnchor;
134 d->preEdit(text, commit);
147 d->keysymPressed(keysym, modifiers);
153 d->keysymReleased(keysym, modifiers);
156 void TextInputInterface::deleteSurroundingText(quint32 beforeLength, quint32 afterLength)
159 d->deleteSurroundingText(beforeLength, afterLength);
162 void TextInputInterface::setCursorPosition(qint32 index, qint32 anchor)
165 d->setCursorPosition(index, anchor);
171 d->setTextDirection(direction);
174 void TextInputInterface::setPreEditCursor(qint32 index)
177 d->setPreEditCursor(index);
180 void TextInputInterface::setInputPanelState(
bool visible,
const QRect &overlappedSurfaceArea)
183 if (d->inputPanelVisible == visible && d->overlappedSurfaceArea == overlappedSurfaceArea) {
187 d->inputPanelVisible = visible;
188 d->overlappedSurfaceArea = overlappedSurfaceArea;
189 d->sendInputPanelState();
192 void TextInputInterface::setLanguage(
const QByteArray &languageTag)
195 if (d->language == languageTag) {
199 d->language = languageTag;
206 return d->interfaceVersion();
215 QRect TextInputInterface::cursorRectangle()
const
218 return d->cursorRectangle;
221 bool TextInputInterface::isEnabled()
const
227 TextInputInterface::Private *TextInputInterface::d_func()
const
229 return reinterpret_cast<Private *
>(d.data());
232 TextInputInterface::TextInputInterface(Private *p,
QObject *parent)
237 TextInputInterface::~TextInputInterface() =
default;
239 TextInputManagerInterface::TextInputManagerInterface(Private *d,
QObject *parent)
244 TextInputManagerInterface::~TextInputManagerInterface() =
default;
249 return d->interfaceVersion;
252 TextInputManagerInterface::Private *TextInputManagerInterface::d_func()
const
254 return reinterpret_cast<Private *
>(d.
data());