summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorJeremy Katz <jeremy.katz@nokia.com>2010-01-26 13:52:09 (GMT)
committerJeremy Katz <jeremy.katz@nokia.com>2010-01-26 13:52:09 (GMT)
commit33a5ecd4908690d6a8366d8f7384ad1e8cf86f92 (patch)
treef623030733f4297b41c664c8a981aa14c385a036 /src/plugins
parentf0f1d8588892ba94301ecad2aa4495e9bfa364ae (diff)
downloadQt-33a5ecd4908690d6a8366d8f7384ad1e8cf86f92.zip
Qt-33a5ecd4908690d6a8366d8f7384ad1e8cf86f92.tar.gz
Qt-33a5ecd4908690d6a8366d8f7384ad1e8cf86f92.tar.bz2
queue user mouse, wheel, and keyboard input events
For plugins: testlite, minimaldfb, vnc, LinuxInput[Mouse|Keyboard]
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/generic/linuxinput/qlinuxinput.cpp34
-rw-r--r--src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp16
-rw-r--r--src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp27
-rw-r--r--src/plugins/graphicssystems/testlite/x11util.h2
-rw-r--r--src/plugins/graphicssystems/vnc/qvncserver.cpp54
-rw-r--r--src/plugins/graphicssystems/vnc/qvncserver.h5
6 files changed, 38 insertions, 100 deletions
diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp
index 308af6b..363e91f 100644
--- a/src/plugins/generic/linuxinput/qlinuxinput.cpp
+++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp
@@ -46,7 +46,6 @@
#include <QSocketNotifier>
#include <QStringList>
#include <QPoint>
-#include <QMouseEvent>
#include <private/qapplication_p.h>
#include <qkbd_qws.h>
@@ -100,6 +99,7 @@ void QLinuxInputMouseHandler::readMouseData()
{
struct ::input_event buffer[32];
int n = 0;
+ bool posChanged = false;
forever {
n = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
@@ -122,28 +122,34 @@ void QLinuxInputMouseHandler::readMouseData()
bool unknown = false;
if (data->type == EV_ABS) {
- if (data->code == ABS_X) {
+ if (data->code == ABS_X && m_x != data->value) {
m_x = data->value;
- } else if (data->code == ABS_Y) {
+ posChanged = true;
+ } else if (data->code == ABS_Y && m_y != data->value) {
m_y = data->value;
+ posChanged = true;
} else {
unknown = true;
}
} else if (data->type == EV_REL) {
if (data->code == REL_X) {
m_x += data->value;
+ posChanged = true;
} else if (data->code == REL_Y) {
m_y += data->value;
+ posChanged = true;
} else if (data->code == ABS_WHEEL) { // vertical scroll
// data->value: 1 == up, -1 == down
int delta = 120 * data->value;
- QWheelEvent we(QPoint(m_x, m_y), QPoint(m_x, m_y), delta, m_buttons, Qt::NoModifier, Qt::Vertical);
- QApplicationPrivate::handleWheelEvent(0, we);
+ QApplicationPrivate::handleWheelEvent(0, QPoint(m_x, m_y),
+ QPoint(m_x, m_y),
+ delta, Qt::Vertical);
} else if (data->code == ABS_THROTTLE) { // horizontal scroll
// data->value: 1 == right, -1 == left
int delta = 120 * -data->value;
- QWheelEvent we(QPoint(m_x, m_y), QPoint(m_x, m_y), delta, m_buttons, Qt::NoModifier, Qt::Horizontal);
- QApplicationPrivate::handleWheelEvent(0, we);
+ QApplicationPrivate::handleWheelEvent(0, QPoint(m_x, m_y),
+ QPoint(m_x, m_y),
+ delta, Qt::Horizontal);
} else {
unknown = true;
}
@@ -161,17 +167,15 @@ void QLinuxInputMouseHandler::readMouseData()
else
m_buttons &= ~button;
- Qt::KeyboardModifiers modifiers = Qt::NoModifier; //###
- QMouseEvent m(data->value ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease,
- QPoint(m_x, m_y), QPoint(m_x, m_y), button, m_buttons, modifiers);
- QApplicationPrivate::handleMouseEvent(0, m);
+ QApplicationPrivate::handleMouseEvent(0, QPoint(m_x, m_y),
+ QPoint(m_x, m_y), m_buttons);
} else if (data->type == EV_SYN && data->code == SYN_REPORT) {
+ if (!posChanged)
+ continue;
+ posChanged = false;
QPoint pos(m_x, m_y);
- Qt::KeyboardModifiers modifiers = Qt::NoModifier; //###
- QMouseEvent m(QEvent::MouseMove, QPoint(m_x, m_y), QPoint(m_x, m_y),
- Qt::NoButton, m_buttons, modifiers);
- QApplicationPrivate::handleMouseEvent(0, m);
+ QApplicationPrivate::handleMouseEvent(0, pos, pos, m_buttons);
// pos = m_handler->transform(pos);
//m_handler->limitToScreen(pos);
diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp
index 17fdd10..8809536 100644
--- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp
+++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp
@@ -109,7 +109,6 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event)
QEvent::Type type = QDirectFbConvenience::eventType(event.window.type);
QPoint p(event.window.x, event.window.y);
QPoint globalPos = globalPoint(event);
- Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button);
Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons);
QWidget *tlw = tlwMap.value(event.window.window_id);
@@ -141,9 +140,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event)
window->UngrabPointer(window);
}
- //DFB doesn't give keyboardmodifiers on mouseevents
- QMouseEvent mouseEvent(type,p,globalPos,button, buttons,(Qt::KeyboardModifiers)0);
- QApplicationPrivate::handleMouseEvent(tlw,mouseEvent);
+ QApplicationPrivate::handleMouseEvent(tlw, p, globalPos, buttons);
}
void QDirectFbInput::applicationEnd()
@@ -156,13 +153,11 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event)
{
QPoint p(event.window.cx, event.window.cy);
QPoint globalPos = globalPoint(event);
- Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button);
- Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons);
QWidget *tlw = tlwMap.value(event.window.window_id);
- QWheelEvent wheelEvent(p,globalPos,event.window.step*120,buttons,Qt::NoModifier,Qt::Vertical);
- QApplicationPrivate::handleWheelEvent(tlw,wheelEvent);
-
+ QApplicationPrivate::handleWheelEvent(tlw, p, globalPos,
+ event.window.step*120,
+ Qt::Vertical);
}
void QDirectFbInput::handleKeyEvents(const DFBEvent &event)
@@ -171,9 +166,8 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event)
Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol);
Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers);
- QKeyEvent keyEvent(type,key,modifiers,QChar(event.window.key_symbol));
QWidget *tlw = tlwMap.value(event.window.window_id);
- QApplicationPrivate::handleKeyEvent(tlw,&keyEvent);
+ QApplicationPrivate::handleKeyEvent(tlw, type, key, modifiers, QChar(event.window.key_symbol));
}
void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event)
diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp
index 0afbf2f..26a7675 100644
--- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp
+++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp
@@ -254,9 +254,10 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev)
bool hor = (((e->button == Button4 || e->button == Button5)
&& (modifiers & Qt::AltModifier))
|| (e->button == 6 || e->button == 7));
- QWheelEvent we(QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), delta,
- buttons, modifiers, hor ? Qt::Horizontal : Qt::Vertical);
- QApplicationPrivate::handleWheelEvent(window(),we);
+ QApplicationPrivate::handleWheelEvent(window(),
+ QPoint(e->x, e->y),
+ QPoint(e->x_root, e->y_root),
+ delta, hor ? Qt::Horizontal : Qt::Vertical);
}
return;
}
@@ -264,18 +265,12 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev)
}
}
- if (type == QEvent::MouseButtonPress && mousePoint != QPoint(e->x_root, e->y_root)) {
- //we've missed a mouse move event somewhere (maybe because we
- //haven't implemented mouse tracking yet); let's synthesize it.
- QMouseEvent me(QEvent::MouseMove, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root),
- Qt::NoButton, buttons, modifiers);
- QApplicationPrivate::handleMouseEvent(window(), me);
- }
-
buttons ^= button; // X event uses state *before*, Qt uses state *after*
- QMouseEvent me(type, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), button, buttons, modifiers);
- QApplicationPrivate::handleMouseEvent(window(), me);
+ QApplicationPrivate::handleMouseEvent(window(), QPoint(e->x, e->y),
+ QPoint(e->x_root, e->y_root),
+ buttons);
+
mousePoint = QPoint(e->x_root, e->y_root);
}
@@ -587,14 +582,12 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev)
// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers;
if (qtcode) {
- QKeyEvent keyEvent(type, qtcode, modifiers);
- QApplicationPrivate::handleKeyEvent(window(), &keyEvent);
+ QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers);
} else if (chars[0]) {
int qtcode = chars.toUpper()[0]; //Not exactly right...
if (modifiers & Qt::ControlModifier && qtcode < ' ')
qtcode = chars[0] + '@';
- QKeyEvent keyEvent(type, qtcode, modifiers, QString::fromLatin1(chars));
- QApplicationPrivate::handleKeyEvent(window(), &keyEvent);
+ QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers, QString::fromLatin1(chars));
} else {
qWarning() << "unknown X keycode" << hex << e->keycode << keySym;
}
diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h
index db87d92..76e029d 100644
--- a/src/plugins/graphicssystems/testlite/x11util.h
+++ b/src/plugins/graphicssystems/testlite/x11util.h
@@ -68,7 +68,7 @@ public:
unsigned long whitePixel() { return WhitePixel(display, screen); }
bool handleEvent(XEvent *xe);
- QImage grabWindow(Window w, int x, int y, int w, int h);
+ QImage grabWindow(Window window, int x, int y, int w, int h);
public slots:
void eventDispatcher();
diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp
index 9576d10..490ca02 100644
--- a/src/plugins/graphicssystems/vnc/qvncserver.cpp
+++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp
@@ -399,10 +399,6 @@ void QVNCServer::init(uint port)
qvnc_cursor = 0;
#endif
encoder = 0;
-
- eventTimer.setInterval(0);
- eventTimer.setSingleShot(true);
- connect(&eventTimer, SIGNAL(timeout()), this, SLOT(sendInputEvents()));
}
QVNCServer::~QVNCServer()
@@ -833,35 +829,6 @@ static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::Mo
return false;
}
-void QVNCServer::sendInputEvents()
-{
- EventPair pair;
- QMouseEvent *me;
- QKeyEvent *ke;
- QWheelEvent *we;
-
- while(!eventList.isEmpty()) {
- pair = eventList.takeFirst();
- switch(pair.first) {
- case MouseEvent:
- me = static_cast<QMouseEvent *>(pair.second);
- QApplicationPrivate::handleMouseEvent(0, *me);
- delete me;
- break;
- case KeyboardEvent:
- ke = static_cast<QKeyEvent *>(pair.second);
- QApplicationPrivate::handleKeyEvent(0, ke);
- delete ke;
- break;
- case WheelEvent:
- we = static_cast<QWheelEvent *>(pair.second);
- QApplicationPrivate::handleWheelEvent(0, *we);
- delete we;
- break;
- }
- }
-}
-
void QVNCServer::pointerEvent()
{
QRfbPointerEvent ev;
@@ -870,7 +837,6 @@ void QVNCServer::pointerEvent()
// QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons);
- EventPair pair;
//qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons;
if (ev.wheelDirection == ev.WheelNone) {
QEvent::Type type = QEvent::MouseMove;
@@ -878,10 +844,7 @@ void QVNCServer::pointerEvent()
bool isPress;
if (buttonChange(buttons, ev.buttons, &button, &isPress))
type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease;
- QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod);
- pair.first = MouseEvent;
- pair.second = me;
- buttons = ev.buttons;
+ QApplicationPrivate::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons);
} else {
// No buttons or motion reported at the same time as wheel events
Qt::Orientation orientation;
@@ -890,13 +853,8 @@ void QVNCServer::pointerEvent()
else
orientation = Qt::Vertical;
int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1);
- QWheelEvent *we = new QWheelEvent(QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, buttons, keymod, orientation);
- pair.first = WheelEvent;
- pair.second = we;
+ QApplicationPrivate::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation);
}
- eventList.append(pair);
- if (!eventTimer.isActive())
- eventTimer.start();
handleMsg = false;
}
}
@@ -921,13 +879,7 @@ void QVNCServer::keyEvent()
QString str;
if (ev.unicode && ev.unicode != 0xffff)
str = QString(ev.unicode);
- QKeyEvent *keyEvent = new QKeyEvent(type, ev.keycode, keymod, str);
- EventPair pair;
- pair.first = KeyboardEvent;
- pair.second = keyEvent;
- eventList.append(pair);
- if (!eventTimer.isActive())
- eventTimer.start();
+ QApplicationPrivate::handleKeyEvent(0, type, ev.keycode, keymod, str);
}
handleMsg = false;
}
diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h
index 7532cb4..4fcdbae 100644
--- a/src/plugins/graphicssystems/vnc/qvncserver.h
+++ b/src/plugins/graphicssystems/vnc/qvncserver.h
@@ -526,11 +526,6 @@ private:
QRfbEncoder *encoder;
QVNCCursor *cursor;
-
- enum EventType { MouseEvent, KeyboardEvent, WheelEvent };
- QTimer eventTimer;
- typedef QPair<EventType, QInputEvent *> EventPair;
- QList<EventPair> eventList;
};