4#include <qpa/qplatforminputcontext.h>
11#include <QtCore/qloggingcategory.h>
12#include <QtGui/QGuiApplication>
13#include <QtGui/private/qguiapplication_p.h>
14#include <QtGui/private/qhighdpiscaling_p.h>
15#include <QtGui/qpa/qplatformintegration.h>
16#include <QtGui/qevent.h>
17#include <QtGui/qwindow.h>
18#include <QTextCharFormat>
31const Qt::InputMethodQueries supportedQueries2 =
Qt::ImEnabled |
41 :
QtWayland::zwp_text_input_v2(text_input)
49 wl_callback_destroy(m_resetCallback);
63 if (!m_preeditCommit.
isEmpty()) {
66 event.setCommitString(m_preeditCommit);
76const wl_callback_listener QWaylandTextInputv2::callbackListener = {
77 QWaylandTextInputv2::resetCallback
80void QWaylandTextInputv2::resetCallback(
void *
data, wl_callback *, uint32_t)
84 if (self->m_resetCallback) {
85 wl_callback_destroy(self->m_resetCallback);
86 self->m_resetCallback =
nullptr;
99 auto *surface =
window->wlSurface();
100 if (!surface || (surface != m_surface))
103 queries &= supportedQueries2;
132 set_content_type(contentType.
hint, contentType.
purpose);
141 set_cursor_rectangle(surfaceRect.x(), surfaceRect.y(), surfaceRect.width(), surfaceRect.height());
149 update_state(m_serial,
flags);
150 if (
flags != QtWayland::zwp_text_input_v2::update_state_change) {
152 wl_callback_destroy(m_resetCallback);
153 m_resetCallback = wl_display_sync(m_display->
wl_display());
154 wl_callback_add_listener(m_resetCallback, &QWaylandTextInputv2::callbackListener,
this);
165 return m_inputPanelVisible;
170 return m_keyboardRectangle;
180 return m_inputDirection;
195 if (m_surface != surface) {
196 qCDebug(qLcQpaInputMethods()) <<
Q_FUNC_INFO <<
"Got leave event for surface" << surface <<
"focused surface" << m_surface;
206 m_modifiersMap.
clear();
208 for (
const QByteArray &modifier : modifiersMap) {
209 if (modifier ==
"Shift")
211 else if (modifier ==
"Control")
213 else if (modifier ==
"Alt")
215 else if (modifier ==
"Mod1")
217 else if (modifier ==
"Mod4")
226 const bool inputPanelVisible = (visible == input_panel_visibility_visible);
227 if (m_inputPanelVisible != inputPanelVisible) {
228 m_inputPanelVisible = inputPanelVisible;
232 if (m_keyboardRectangle != keyboardRectangle) {
233 m_keyboardRectangle = keyboardRectangle;
240 if (m_resetCallback) {
241 qCDebug(qLcQpaInputMethods()) <<
"discard preedit_string: reset not confirmed";
270 if (m_resetCallback) {
271 qCDebug(qLcQpaInputMethods()) <<
"discard commit_string: reset not confirmed";
299#if QT_CONFIG(xkbcommon)
300 if (m_resetCallback) {
301 qCDebug(qLcQpaInputMethods()) <<
"discard keysym: reset not confirmed";
308 Qt::KeyboardModifiers qtModifiers = modifiersToQtModifiers(
modifiers);
326 if (m_resetCallback) {
327 qCDebug(qLcQpaInputMethods()) <<
"discard language: reset not confirmed";
340 if (m_resetCallback) {
341 qCDebug(qLcQpaInputMethods()) <<
"discard text_direction: reset not confirmed";
362Qt::KeyboardModifiers QWaylandTextInputv2::modifiersToQtModifiers(uint32_t
modifiers)
365 for (
int i = 0;
i < m_modifiersMap.
size(); ++
i) {
367 ret |= m_modifiersMap[
i];
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
static QByteArray fromRawData(const char *data, qsizetype size)
Constructs a QByteArray that uses the first size bytes of the data array.
static bool sendEvent(QObject *receiver, QEvent *event)
Sends event event directly to receiver receiver, using the notify() function.
Type
This enum type defines the valid event types in Qt.
static QPlatformIntegration * platformIntegration()
static QObject * focusObject()
Returns the QObject in currently active window that will be final receiver of events tied to focus,...
static QWindow * focusWindow()
Returns the QWindow that receives events tied to focus, such as key events.
static QInputMethod * inputMethod()
returns the input method.
qsizetype size() const noexcept
void append(parameter_type t)
constexpr int left() const noexcept
Returns the left margin.
constexpr int top() const noexcept
Returns the top margin.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
constexpr QRect translated(int dx, int dy) const noexcept
Returns a copy of the rectangle that is translated dx along the x axis and dy along the y axis,...
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString mid(qsizetype position, qsizetype n=-1) const &
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
qsizetype size() const noexcept
Returns the number of characters in this string.
QByteArray toUtf8() const &
static bool handleKeyEvent(QWindow *window, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString &text=QString(), bool autorep=false, ushort count=1)
static QString lookupStringNoKeysymTransformations(xkb_keysym_t keysym)
static int keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers modifiers)
struct wl_display * wl_display() const
void zwp_text_input_v2_keysym(uint32_t time, uint32_t sym, uint32_t state, uint32_t modifiers) override
~QWaylandTextInputv2() override
bool isInputPanelVisible() const override
void zwp_text_input_v2_preedit_styling(uint32_t index, uint32_t length, uint32_t style) override
void updateState(Qt::InputMethodQueries queries, uint32_t flags) override
QRectF keyboardRect() const override
void zwp_text_input_v2_delete_surrounding_text(uint32_t before_length, uint32_t after_length) override
void setCursorInsidePreedit(int cursor) override
void zwp_text_input_v2_preedit_string(const QString &text, const QString &commit) override
void zwp_text_input_v2_input_method_changed(uint32_t serial, uint32_t flags) override
void zwp_text_input_v2_language(const QString &language) override
QWaylandTextInputv2(QWaylandDisplay *display, struct ::zwp_text_input_v2 *text_input)
Qt::LayoutDirection inputDirection() const override
void zwp_text_input_v2_enter(uint32_t serial, struct ::wl_surface *surface) override
QLocale locale() const override
void zwp_text_input_v2_text_direction(uint32_t direction) override
void zwp_text_input_v2_modifiers_map(wl_array *map) override
void zwp_text_input_v2_commit_string(const QString &text) override
void zwp_text_input_v2_cursor_position(int32_t index, int32_t anchor) override
void zwp_text_input_v2_input_panel_state(uint32_t state, int32_t x, int32_t y, int32_t width, int32_t height) override
void zwp_text_input_v2_preedit_cursor(int32_t index) override
void zwp_text_input_v2_leave(uint32_t serial, struct ::wl_surface *surface) override
EGLImageKHR int int EGLuint64KHR * modifiers
QMap< QString, QString > map
[6]
struct wl_display * display
T toNativePixels(const T &value, const C *context)
Combined button and popup list for selecting options.
#define qCDebug(category,...)
#define Q_DECLARE_LOGGING_CATEGORY(name)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qBound(const T &min, const T &val, const T &max)
constexpr T qAbs(const T &t)
GLuint64 GLenum void * handle
GLint GLint GLint GLint GLint x
[0]
GLint GLsizei GLsizei height
GLenum GLuint GLenum GLsizei length
GLint GLint GLint GLint GLsizei GLsizei GLsizei GLboolean commit
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
static QWaylandInputMethodContentType convert(Qt::InputMethodHints hints)