sym = translateKey(sym, s, sizeof s);
if (window) {
- QWindowSystemInterface::handleKeyEvent(window->window(),
- time, type, sym,
- inputDevice->mModifiers,
- QString::fromLatin1(s));
+ QWindowSystemInterface::handleExtendedKeyEvent(window->window(),
+ time, type, sym,
+ inputDevice->mModifiers,
+ code, 0, 0,
+ QString::fromLatin1(s));
}
#else
// Generic fallback for single hard keys: Assume 'key' is a Qt key code.
if (window) {
- QWindowSystemInterface::handleKeyEvent(window->window(),
- time, state ? QEvent::KeyPress : QEvent::KeyRelease,
- key + 8, // qt-compositor substracts 8 for some reason
- inputDevice->mModifiers);
+ QWindowSystemInterface::handleExtendedKeyEvent(window->window(),
+ time, state ? QEvent::KeyPress : QEvent::KeyRelease,
+ key + 8, // qt-compositor substracts 8 for some reason
+ inputDevice->mModifiers,
+ key + 8, 0, 0);
}
#endif
}
processCommand(command);
}
+void MockCompositor::sendKeyPress(const QSharedPointer<MockSurface> &surface, uint code)
+{
+ Command command = makeCommand(Impl::Compositor::sendKeyPress, m_compositor);
+ command.parameters << QVariant::fromValue(surface) << code;
+ processCommand(command);
+}
+
+void MockCompositor::sendKeyRelease(const QSharedPointer<MockSurface> &surface, uint code)
+{
+ Command command = makeCommand(Impl::Compositor::sendKeyRelease, m_compositor);
+ command.parameters << QVariant::fromValue(surface) << code;
+ processCommand(command);
+}
+
QSharedPointer<MockSurface> MockCompositor::surface()
{
QSharedPointer<MockSurface> result;
static void setKeyboardFocus(void *data, const QList<QVariant> ¶meters);
static void sendMousePress(void *data, const QList<QVariant> ¶meters);
static void sendMouseRelease(void *data, const QList<QVariant> ¶meters);
+ static void sendKeyPress(void *data, const QList<QVariant> ¶meters);
+ static void sendKeyRelease(void *data, const QList<QVariant> ¶meters);
private:
static void bindCompositor(wl_client *client, void *data, uint32_t version, uint32_t id);
void setKeyboardFocus(const QSharedPointer<MockSurface> &surface);
void sendMousePress(const QSharedPointer<MockSurface> &surface, const QPoint &pos);
void sendMouseRelease(const QSharedPointer<MockSurface> &surface);
+ void sendKeyPress(const QSharedPointer<MockSurface> &surface, uint code);
+ void sendKeyRelease(const QSharedPointer<MockSurface> &surface, uint code);
QSharedPointer<MockSurface> surface();
wl_input_device_send_button(compositor->m_input.pointer_focus_resource, compositor->time(), 0x110, 0);
}
+void Compositor::sendKeyPress(void *data, const QList<QVariant> ¶meters)
+{
+ Compositor *compositor = static_cast<Compositor *>(data);
+ wl_surface *surface = resolveSurface(parameters.first());
+ if (!surface)
+ return;
+
+ QPoint pos = parameters.last().toPoint();
+ wl_input_device_send_key(compositor->m_input.keyboard_focus_resource, compositor->time(), parameters.last().toUInt() - 8, 1);
+}
+
+void Compositor::sendKeyRelease(void *data, const QList<QVariant> ¶meters)
+{
+ Compositor *compositor = static_cast<Compositor *>(data);
+ wl_surface *surface = resolveSurface(parameters.first());
+ if (!surface)
+ return;
+
+ wl_input_device_send_key(compositor->m_input.keyboard_focus_resource, compositor->time(), parameters.last().toUInt() - 8, 0);
+}
+
}
, keyReleaseEventCount(0)
, mousePressEventCount(0)
, mouseReleaseEventCount(0)
+ , keyCode(0)
{
setSurfaceType(QSurface::RasterSurface);
setGeometry(0, 0, 32, 32);
++focusOutEventCount;
}
- void keyPressEvent(QKeyEvent *)
+ void keyPressEvent(QKeyEvent *event)
{
++keyPressEventCount;
+ keyCode = event->nativeScanCode();
}
- void keyReleaseEvent(QKeyEvent *)
+ void keyReleaseEvent(QKeyEvent *event)
{
++keyReleaseEventCount;
+ keyCode = event->nativeScanCode();
}
void mousePressEvent(QMouseEvent *event)
int mousePressEventCount;
int mouseReleaseEventCount;
+ uint keyCode;
QPoint mousePressPos;
};
QTRY_COMPARE(window.focusInEventCount, 2);
QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
+ uint keyCode = 80; // arbitrarily chosen
+ QCOMPARE(window.keyPressEventCount, 0);
+ compositor->sendKeyPress(surface, keyCode);
+ QTRY_COMPARE(window.keyPressEventCount, 1);
+ QTRY_COMPARE(window.keyCode, keyCode);
+
+ QCOMPARE(window.keyReleaseEventCount, 0);
+ compositor->sendKeyRelease(surface, keyCode);
+ QTRY_COMPARE(window.keyReleaseEventCount, 1);
+ QCOMPARE(window.keyCode, keyCode);
+
QPoint mousePressPos(16, 16);
QCOMPARE(window.mousePressEventCount, 0);
compositor->sendMousePress(surface, mousePressPos);