Added testing of key events to client auto test.
authorSamuel Rødal <samuel.rodal@nokia.com>
Wed, 7 Mar 2012 09:40:31 +0000 (10:40 +0100)
committerLaszlo Agocs <laszlo.p.agocs@nokia.com>
Wed, 7 Mar 2012 10:04:45 +0000 (11:04 +0100)
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>
src/plugins/platforms/wayland/qwaylandinputdevice.cpp
tests/auto/client/mockcompositor.cpp
tests/auto/client/mockcompositor.h
tests/auto/client/mockinput.cpp
tests/auto/client/tst_client.cpp

index 98980e6..8731439 100644 (file)
@@ -307,18 +307,20 @@ void QWaylandInputDevice::inputHandleKey(void *data,
     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
 }
index 39bd6e3..c751bcc 100644 (file)
@@ -114,6 +114,20 @@ void MockCompositor::sendMouseRelease(const QSharedPointer<MockSurface> &surface
     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;
index ece1972..18de0e6 100644 (file)
@@ -80,6 +80,8 @@ public:
     static void setKeyboardFocus(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 sendKeyPress(void *data, const QList<QVariant> &parameters);
+    static void sendKeyRelease(void *data, const QList<QVariant> &parameters);
 
 private:
     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 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();
 
index 9d6286d..b5c90d7 100644 (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);
 }
 
+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);
+}
+
 }
 
index fdcb129..9b63337 100644 (file)
@@ -55,6 +55,7 @@ public:
         , keyReleaseEventCount(0)
         , mousePressEventCount(0)
         , mouseReleaseEventCount(0)
+        , keyCode(0)
     {
         setSurfaceType(QSurface::RasterSurface);
         setGeometry(0, 0, 32, 32);
@@ -71,14 +72,16 @@ public:
         ++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)
@@ -99,6 +102,7 @@ public:
     int mousePressEventCount;
     int mouseReleaseEventCount;
 
+    uint keyCode;
     QPoint mousePressPos;
 };
 
@@ -166,6 +170,17 @@ void tst_WaylandClient::events()
     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);