From 454759a0c485eb2924bb6b614d02c29392e202a7 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 11 Feb 2010 16:12:02 +0100 Subject: Very hacky fix for key events, including keyboard modifiers. --- server.cpp | 9 +++++++-- server.h | 4 ++-- window.cpp | 11 ++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/server.cpp b/server.cpp index 98e3f3e..97afa1d 100644 --- a/server.cpp +++ b/server.cpp @@ -238,7 +238,7 @@ void Server::sendMouseMoveEvent(quint32 id, const QPointF &point) } } -void Server::sendKeyPressEvent(quint32 id, quint32 key) +void Server::sendKeyPressEvent(quint32 id, quint32 key, ushort unicode, uint modifiers) { Q_UNUSED(key); qDebug() << "SERVER: sending key press event"; @@ -246,12 +246,16 @@ void Server::sendKeyPressEvent(quint32 id, quint32 key) event.type = Event::KeyPressEvent; event.id = id; event.value = key; + + // fishing for hack-of-the-year nominations... but at least this way we retain protocol compatibility + event.rect = QRect(unicode, modifiers, 1, 1); + QTcpSocket *connection = m_connections.value(id); QDataStream stream(connection); stream << event; } -void Server::sendKeyReleaseEvent(quint32 id, quint32 key) +void Server::sendKeyReleaseEvent(quint32 id, quint32 key, ushort unicode, uint modifiers) { Q_UNUSED(key); qDebug() << "SERVER: sending key release event"; @@ -259,6 +263,7 @@ void Server::sendKeyReleaseEvent(quint32 id, quint32 key) event.type = Event::KeyReleaseEvent; event.id = id; event.value = key; + event.rect = QRect(unicode, modifiers, 1, 1); // same hack as above if (QTcpSocket *connection = m_connections.value(id)) { QDataStream stream(connection); stream << event; diff --git a/server.h b/server.h index 3db8c30..8c76690 100644 --- a/server.h +++ b/server.h @@ -45,8 +45,8 @@ public: void sendMousePressEvent(quint32 id, const QPointF &point); void sendMouseReleaseEvent(quint32 id, const QPointF &point); void sendMouseMoveEvent(quint32 id, const QPointF &point); - void sendKeyPressEvent(quint32 id, quint32 key); - void sendKeyReleaseEvent(quint32 id, quint32 key); + void sendKeyPressEvent(quint32 id, quint32 key, ushort unicode, uint modifiers); + void sendKeyReleaseEvent(quint32 id, quint32 key, ushort unicode, uint modifiers); protected Q_SLOTS: void handleRequest(); diff --git a/window.cpp b/window.cpp index 189ab88..d631281 100644 --- a/window.cpp +++ b/window.cpp @@ -90,7 +90,7 @@ void Window::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QW bool Window::sceneEvent(QEvent *event) { - qDebug() << "SERVER: scene event" << event->type(); + qDebug() << "SERVER: Window::sceneEvent" << event->type(); switch (event->type()) { case QEvent::GraphicsSceneMousePress: { QPointF pos = static_cast(event)->pos(); @@ -109,12 +109,17 @@ bool Window::sceneEvent(QEvent *event) break; } case QEvent::KeyPress: { quint32 key = static_cast(event)->key(); - m_server->sendKeyPressEvent(id(), key); // ### modifiers + QString s = static_cast(event)->text(); + ushort unicode = s.size() ? s.utf16()[0] : 0; + uint modifiers = static_cast(event)->modifiers(); + m_server->sendKeyPressEvent(id(), key, unicode, modifiers); return true; break; } case QEvent::KeyRelease: { quint32 key = static_cast(event)->key(); - m_server->sendKeyReleaseEvent(id(), key); // ### modifiers + uint modifiers = static_cast(event)->modifiers(); + + m_server->sendKeyReleaseEvent(id(), key,0,modifiers); return true; break; } default: -- cgit v1.2.3