21#include "qwayland-server-input-method-unstable-v1.h"
22#include "qwayland-server-text-input-unstable-v1.h"
23#include "qwayland-server-wayland.h"
27static int s_version = 1;
37InputMethodGrabV1::InputMethodGrabV1(QObject *parent)
39 , d(new InputKeyboardV1InterfacePrivate)
49 RamFile keymapFile(
"kwin-xkb-input-method-grab-keymap", keymap.constData(), keymap.size() + 1);
51 const auto resources = d->resourceMap();
52 for (
auto r : resources) {
53 d->send_keymap(r->handle, QtWaylandServer::wl_keyboard::keymap_format::keymap_format_xkb_v1, keymapFile.
fd(), keymapFile.
size());
59 const auto resources = d->resourceMap();
60 for (
auto r : resources) {
61 d->send_key(r->handle, serial, timestamp, key, quint32(state));
67 const auto resources = d->resourceMap();
68 for (
auto r : resources) {
69 d->send_modifiers(r->handle, serial, depressed, latched, locked, group);
77 : zwp_input_method_context_v1()
113 const auto mods = QByteArray(
static_cast<const char *
>(map->data), map->size);
119 Q_EMIT
q->
keysym(serial, time, sym, state == WL_KEYBOARD_KEY_STATE_PRESSED, modifiers);
129 Q_EMIT
q->
key(serial, time, key, state == WL_KEYBOARD_KEY_STATE_PRESSED);
133 uint32_t mods_depressed,
134 uint32_t mods_latched,
135 uint32_t mods_locked,
136 uint32_t group)
override
138 Q_EMIT
q->
modifiers(serial, mods_depressed, mods_latched, mods_locked, group);
146 Qt::LayoutDirection qtDirection;
148 case ZWP_TEXT_INPUT_V1_TEXT_DIRECTION_LTR:
149 qtDirection = Qt::LeftToRight;
151 case ZWP_TEXT_INPUT_V1_TEXT_DIRECTION_RTL:
152 qtDirection = Qt::RightToLeft;
154 case ZWP_TEXT_INPUT_V1_TEXT_DIRECTION_AUTO:
155 qtDirection = Qt::LayoutDirectionAuto;
166 wl_resource_destroy(resource->handle);
183 for (
auto r : d->resourceMap()) {
184 d->send_commit_state(r->handle, serial);
190 quint32 contentHint = QtWaylandServer::zwp_text_input_v1::content_hint_none;
191 quint32 contentPurpose;
194 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_auto_capitalization;
197 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_auto_correction;
200 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_auto_completion;
203 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_lowercase;
206 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_uppercase;
209 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_titlecase;
212 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_hidden_text;
215 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_lowercase;
218 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_latin;
221 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_multiline;
224 contentHint |= QtWaylandServer::zwp_text_input_v1::content_hint_none;
229 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_alpha;
232 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_digits;
235 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_number;
238 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_phone;
241 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_url;
244 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_email;
247 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_name;
250 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_password;
253 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_date;
256 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_time;
259 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_datetime;
262 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_terminal;
266 contentPurpose = QtWaylandServer::zwp_text_input_v1::content_purpose_normal;
269 for (
auto r : d->resourceMap()) {
270 d->send_content_type(r->handle, contentHint, contentPurpose);
276 for (
auto r : d->resourceMap()) {
277 d->send_invoke_action(r->handle, button, index);
283 for (
auto r : d->resourceMap()) {
284 d->send_preferred_language(r->handle,
language);
290 for (
auto r : d->resourceMap()) {
291 d->send_reset(r->handle);
297 for (
auto r : d->resourceMap()) {
298 d->send_surrounding_text(r->handle, text, cursor, anchor);
304 return d->m_keyboardGrab.get();
313 : zwp_input_panel_surface_v1()
338InputPanelSurfaceV1Interface::InputPanelSurfaceV1Interface(
SurfaceInterface *surface, quint32
id, QObject *parent)
359 : zwp_input_panel_v1(*d, s_version)
370 wl_resource_post_error(resource->handle, 0,
"the surface already has a role assigned %s", role->name().constData());
378 interface->d->init(resource->client(),
id, resource->version());
403 : zwp_input_method_v1(*d, s_version)
415 auto addedResource =
m_context->d->add(resource->client(), resource->version());
416 send_activate(resource->handle, addedResource->handle);
419 std::unique_ptr<InputMethodContextV1Interface>
m_context;
440 for (
auto resource : d->resourceMap()) {
441 auto connection = d->m_context->d->add(resource->client(), resource->version());
442 d->send_activate(resource->handle,
connection->handle);
452 for (
auto resource : d->resourceMap()) {
453 auto connection = d->m_context->d->resourceMap().value(resource->client());
455 d->send_deactivate(resource->handle,
connection->handle);
458 d->m_context.reset();
463 return d->m_context.get();
468#include "moc_inputmethod_v1.cpp"
Class holding the Wayland server display loop.
void language(quint32 serial, const QString &language)
~InputMethodContextV1Interface() override
void deleteSurroundingText(qint32 index, quint32 length)
InputMethodGrabV1 * keyboardGrab() const
void sendSurroundingText(const QString &text, quint32 cursor, quint32 anchor)
void sendCommitState(quint32 serial)
void modifiersMap(const QByteArray &map)
void preeditCursor(qint32 index)
void sendInvokeAction(quint32 button, quint32 index)
void preeditString(quint32 serial, const QString &text, const QString &commit)
void key(quint32 serial, quint32 time, quint32 key, bool pressed)
void modifiers(quint32 serial, quint32 mods_depressed, quint32 mods_latched, quint32 mods_locked, quint32 group)
void cursorPosition(qint32 index, qint32 anchor)
void sendContentType(KWin::TextInputContentHints hint, KWin::TextInputContentPurpose purpose)
void keysym(quint32 serial, quint32 time, quint32 sym, bool pressed, quint32 modifiers)
void keyboardGrabRequested(InputMethodGrabV1 *keyboardGrab)
void sendPreferredLanguage(const QString &language)
void textDirection(quint32 serial, Qt::LayoutDirection direction)
void preeditStyling(quint32 index, quint32 length, quint32 style)
void commitString(quint32 serial, const QString &text)
~InputMethodContextV1InterfacePrivate()
void zwp_input_method_context_v1_preedit_styling(Resource *, uint32_t index, uint32_t length, uint32_t style) override
InputMethodContextV1Interface *const q
void zwp_input_method_context_v1_grab_keyboard(Resource *resource, uint32_t id) override
void zwp_input_method_context_v1_delete_surrounding_text(Resource *, int32_t index, uint32_t length) override
void zwp_input_method_context_v1_modifiers_map(Resource *, wl_array *map) override
void zwp_input_method_context_v1_preedit_string(Resource *, uint32_t serial, const QString &text, const QString &commit) override
InputMethodContextV1InterfacePrivate(InputMethodContextV1Interface *q)
void zwp_input_method_context_v1_key(Resource *, uint32_t serial, uint32_t time, uint32_t key, uint32_t state) override
void zwp_input_method_context_v1_text_direction(Resource *, uint32_t serial, uint32_t direction) override
void zwp_input_method_context_v1_modifiers(Resource *, uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group) override
void zwp_input_method_context_v1_commit_string(Resource *, uint32_t serial, const QString &text) override
void zwp_input_method_context_v1_language(Resource *, uint32_t serial, const QString &language) override
void zwp_input_method_context_v1_cursor_position(Resource *, int32_t index, int32_t anchor) override
void zwp_input_method_context_v1_destroy(Resource *resource) override
void zwp_input_method_context_v1_keysym(Resource *, uint32_t serial, uint32_t time, uint32_t sym, uint32_t state, uint32_t modifiers) override
std::unique_ptr< InputMethodGrabV1 > m_keyboardGrab
void zwp_input_method_context_v1_preedit_cursor(Resource *, int32_t index) override
static OutputInterface * get(wl_resource *native)
Creates a file in memory.
Resource representing a wl_surface.
static SurfaceInterface * get(wl_resource *native)
KWIN_EXPORT xcb_connection_t * connection()