4#include <emscripten/bind.h>
10#include <qpa/qplatforminputcontext.h>
14#include <QKeySequence>
15#include <qpa/qwindowsysteminterface.h>
23 int length =
event[
"target"][
"value"][
"length"].as<
int>();
27 emscripten::val _incomingCharVal =
event[
"data"];
28 if (_incomingCharVal != emscripten::val::undefined() && _incomingCharVal != emscripten::val::null()) {
37 event[
"target"].set(
"value",
"");
46 emscripten::val document = emscripten::val::global(
"document");
47 m_inputElement = document.call<emscripten::val>(
"createElement", std::string(
"input"));
48 m_inputElement.set(
"type",
"text");
49 m_inputElement.set(
"style",
"position:absolute;left:-1000px;top:-1000px");
50 m_inputElement.set(
"contenteditable",
"true");
55 document.call<
void>(
"addEventListener", inputType,
56 emscripten::val::module_property(
"qtInputContextCallback"),
57 emscripten::val(
false));
58 m_inputElement.set(
"data-qinputcontext",
59 emscripten::val(
quintptr(
reinterpret_cast<void *
>(
this))));
60 emscripten::val body = document[
"body"];
61 body.call<
void>(
"appendChild", m_inputElement);
64 emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, (
void *)
this, 1,
65 &androidKeyboardCallback);
70 auto callback = [=](emscripten::val) {
71 m_inputElement[
"parentElement"].call<
void>(
"removeChild", m_inputElement);
72 inputPanelIsOpen =
false;
74 m_blurEventHandler.reset(
new EventCallback(m_inputElement,
"blur", callback));
84 emscripten_set_keydown_callback(EMSCRIPTEN_EVENT_TARGET_WINDOW, 0, 0, NULL);
89 m_focusWindow = focusWindow;
92emscripten::val QWasmInputContext::inputHandlerElementForFocusedWindow()
95 return emscripten::val::undefined();
96 return static_cast<QWasmWindow *
>(m_focusWindow->handle())->inputHandlerElement();
107 && !inputPanelIsOpen) {
108 m_inputElement.call<
void>(
"focus");
123 emscripten::val inputWrapper = inputHandlerElementForFocusedWindow();
124 if (inputWrapper.isUndefined())
126 inputWrapper.call<
void>(
"appendChild", m_inputElement);
129 m_inputElement.call<
void>(
"focus");
130 inputPanelIsOpen =
true;
137 m_inputElement.call<
void>(
"blur");
138 inputPanelIsOpen =
false;
150int QWasmInputContext::androidKeyboardCallback(
int eventType,
151 const EmscriptenKeyboardEvent *keyEvent,
157 if (strKey ==
"Unidentified" || strKey ==
"Process")
void focusWindowChanged(QWindow *focusWindow)
This signal is emitted when the focused window changes.
The QKeySequence class encapsulates a key sequence as used by shortcuts.
static QKeySequence fromString(const QString &str, SequenceFormat format=PortableText)
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
virtual void update(Qt::InputMethodQueries)
Notification on editor updates.
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromStdString(const std::string &s)
void showInputPanel() override
Request to show input panel.
~QWasmInputContext() override
void hideInputPanel() override
Request to hide input panel.
void update(Qt::InputMethodQueries) override
Notification on editor updates.
void focusWindowChanged(QWindow *focusWindow)
void inputStringChanged(QString &, QWasmInputContext *context)
static QWasmIntegration * get()
static bool handleKeyEvent(QWindow *window, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString &text=QString(), bool autorep=false, ushort count=1)
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
GLenum GLuint GLenum GLsizei length
static void inputCallback(emscripten::val event)
EMSCRIPTEN_BINDINGS(clipboard_module)