Keep a source of propagated mouse events

Synthesized mouse events should not cause mouse events which
look like they were obtained from the system.
So set the source of generated events from the original event.

Change-Id: I862829446ac6ef664e1b8e4a5b54ed11926a1d4b
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
bb10
Alexander Volkov 2014-09-17 17:22:27 +04:00
parent ba46c0eef5
commit 34de989a94
2 changed files with 3 additions and 1 deletions

View File

@ -1712,7 +1712,8 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
// with the current event, we fake a move-only event that we recurse and process first. This
// will update the global mouse position and cause the second event to be a button only event.
QWindowSystemInterfacePrivate::MouseEvent moveEvent(e->window.data(),
e->timestamp, e->type, e->localPos, e->globalPos, buttons, e->modifiers);
e->timestamp, e->type, e->localPos, e->globalPos, buttons, e->modifiers, e->source);
moveEvent.synthetic = e->synthetic;
processMouseEvent(&moveEvent);
Q_ASSERT(e->globalPos == QGuiApplicationPrivate::lastCursorPosition);
// continue with processing mouse button change event

View File

@ -3266,6 +3266,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
me.spont = mouse->spontaneous();
me.setTimestamp(mouse->timestamp());
QGuiApplicationPrivate::setMouseEventFlags(&me, mouse->flags());
QGuiApplicationPrivate::setMouseEventSource(&me, mouse->source());
// throw away any mouse-tracking-only mouse events
if (!w->hasMouseTracking()
&& mouse->type() == QEvent::MouseMove && mouse->buttons() == 0) {