summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@nokia.com>2010-02-11 16:12:02 +0100
committerPaul Olav Tvete <paul.tvete@nokia.com>2010-02-11 16:12:02 +0100
commit454759a0c485eb2924bb6b614d02c29392e202a7 (patch)
treef445d0cbf6de2c82867556b6bd40b206f9ff0f18
parent041a3e8049831d5c4d51adce1218743be35b1ebe (diff)
Very hacky fix for key events, including keyboard modifiers.
-rw-r--r--server.cpp9
-rw-r--r--server.h4
-rw-r--r--window.cpp11
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<QGraphicsSceneMouseEvent*>(event)->pos();
@@ -109,12 +109,17 @@ bool Window::sceneEvent(QEvent *event)
break; }
case QEvent::KeyPress: {
quint32 key = static_cast<QKeyEvent*>(event)->key();
- m_server->sendKeyPressEvent(id(), key); // ### modifiers
+ QString s = static_cast<QKeyEvent*>(event)->text();
+ ushort unicode = s.size() ? s.utf16()[0] : 0;
+ uint modifiers = static_cast<QKeyEvent*>(event)->modifiers();
+ m_server->sendKeyPressEvent(id(), key, unicode, modifiers);
return true;
break; }
case QEvent::KeyRelease: {
quint32 key = static_cast<QKeyEvent*>(event)->key();
- m_server->sendKeyReleaseEvent(id(), key); // ### modifiers
+ uint modifiers = static_cast<QKeyEvent*>(event)->modifiers();
+
+ m_server->sendKeyReleaseEvent(id(), key,0,modifiers);
return true;
break; }
default: