Added testing of key events to client auto test.

This requires passing on the native key code as well when calling into
QWindowSystemInterface from QWaylandInputDevice.

Change-Id: Iea1f98dcc9e050bb42cc48927da17aa54085a5e8
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
This commit is contained in:
Samuel Rødal 2012-03-07 10:40:31 +01:00 committed by Laszlo Agocs
parent 8feb960ff8
commit 54331754cb
4 changed files with 56 additions and 2 deletions

View File

@ -114,6 +114,20 @@ void MockCompositor::sendMouseRelease(const QSharedPointer<MockSurface> &surface
processCommand(command); 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> MockCompositor::surface()
{ {
QSharedPointer<MockSurface> result; QSharedPointer<MockSurface> result;

View File

@ -80,6 +80,8 @@ public:
static void setKeyboardFocus(void *data, const QList<QVariant> &parameters); static void setKeyboardFocus(void *data, const QList<QVariant> &parameters);
static void sendMousePress(void *data, const QList<QVariant> &parameters); static void sendMousePress(void *data, const QList<QVariant> &parameters);
static void sendMouseRelease(void *data, const QList<QVariant> &parameters); static void sendMouseRelease(void *data, const QList<QVariant> &parameters);
static void sendKeyPress(void *data, const QList<QVariant> &parameters);
static void sendKeyRelease(void *data, const QList<QVariant> &parameters);
private: private:
static void bindCompositor(wl_client *client, void *data, uint32_t version, uint32_t id); static void bindCompositor(wl_client *client, void *data, uint32_t version, uint32_t id);
@ -142,6 +144,8 @@ public:
void setKeyboardFocus(const QSharedPointer<MockSurface> &surface); void setKeyboardFocus(const QSharedPointer<MockSurface> &surface);
void sendMousePress(const QSharedPointer<MockSurface> &surface, const QPoint &pos); void sendMousePress(const QSharedPointer<MockSurface> &surface, const QPoint &pos);
void sendMouseRelease(const QSharedPointer<MockSurface> &surface); 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(); QSharedPointer<MockSurface> surface();

View File

@ -121,5 +121,26 @@ void Compositor::sendMouseRelease(void *data, const QList<QVariant> &parameters)
wl_input_device_send_button(compositor->m_input.pointer_focus_resource, compositor->time(), 0x110, 0); wl_input_device_send_button(compositor->m_input.pointer_focus_resource, compositor->time(), 0x110, 0);
} }
void Compositor::sendKeyPress(void *data, const QList<QVariant> &parameters)
{
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> &parameters)
{
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);
}
} }

View File

@ -55,6 +55,7 @@ public:
, keyReleaseEventCount(0) , keyReleaseEventCount(0)
, mousePressEventCount(0) , mousePressEventCount(0)
, mouseReleaseEventCount(0) , mouseReleaseEventCount(0)
, keyCode(0)
{ {
setSurfaceType(QSurface::RasterSurface); setSurfaceType(QSurface::RasterSurface);
setGeometry(0, 0, 32, 32); setGeometry(0, 0, 32, 32);
@ -71,14 +72,16 @@ public:
++focusOutEventCount; ++focusOutEventCount;
} }
void keyPressEvent(QKeyEvent *) void keyPressEvent(QKeyEvent *event)
{ {
++keyPressEventCount; ++keyPressEventCount;
keyCode = event->nativeScanCode();
} }
void keyReleaseEvent(QKeyEvent *) void keyReleaseEvent(QKeyEvent *event)
{ {
++keyReleaseEventCount; ++keyReleaseEventCount;
keyCode = event->nativeScanCode();
} }
void mousePressEvent(QMouseEvent *event) void mousePressEvent(QMouseEvent *event)
@ -99,6 +102,7 @@ public:
int mousePressEventCount; int mousePressEventCount;
int mouseReleaseEventCount; int mouseReleaseEventCount;
uint keyCode;
QPoint mousePressPos; QPoint mousePressPos;
}; };
@ -166,6 +170,17 @@ void tst_WaylandClient::events()
QTRY_COMPARE(window.focusInEventCount, 2); QTRY_COMPARE(window.focusInEventCount, 2);
QTRY_COMPARE(QGuiApplication::focusWindow(), &window); 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); QPoint mousePressPos(16, 16);
QCOMPARE(window.mousePressEventCount, 0); QCOMPARE(window.mousePressEventCount, 0);
compositor->sendMousePress(surface, mousePressPos); compositor->sendMousePress(surface, mousePressPos);