diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 7 | ||||
-rw-r--r-- | src/gui/kernel/qwindowsysteminterface_p.h | 5 | ||||
-rw-r--r-- | src/widgets/kernel/qapplication.cpp | 46 |
3 files changed, 46 insertions, 12 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 72e95c996c..190d52776a 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -1392,7 +1392,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo // Ignore mouse events that don't change the current state. return; } - buttons = e->buttons; + mouse_buttons = buttons = e->buttons; if (button & e->buttons) { ulong doubleClickInterval = static_cast<ulong>(qApp->styleHints()->mouseDoubleClickInterval()); doubleClick = e->timestamp - mousePressTime < doubleClickInterval && button == mousePressButton; @@ -1688,7 +1688,10 @@ void QGuiApplicationPrivate::processTabletEvent(QWindowSystemInterfacePrivate::T type = e->down ? QEvent::TabletPress : QEvent::TabletRelease; tabletState = e->down; } + QWindow *window = e->window.data(); + modifier_buttons = e->modifiers; + bool localValid = true; // If window is null, pick one based on the global position and make sure all // subsequent events up to the release are delivered to that same window. @@ -1719,7 +1722,7 @@ void QGuiApplicationPrivate::processTabletEvent(QWindowSystemInterfacePrivate::T QTabletEvent ev(type, local, e->global, e->device, e->pointerType, e->pressure, e->xTilt, e->yTilt, e->tangentialPressure, e->rotation, e->z, - e->mods, e->uid); + e->modifiers, e->uid); ev.setTimestamp(e->timestamp); QGuiApplication::sendSpontaneousEvent(window, &ev); #else diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h index e8d2a85dd9..dfdf7e9e93 100644 --- a/src/gui/kernel/qwindowsysteminterface_p.h +++ b/src/gui/kernel/qwindowsysteminterface_p.h @@ -302,10 +302,10 @@ public: TabletEvent(QWindow *w, ulong time, bool down, const QPointF &local, const QPointF &global, int device, int pointerType, qreal pressure, int xTilt, int yTilt, qreal tpressure, qreal rotation, int z, qint64 uid, Qt::KeyboardModifiers mods) - : InputEvent(w, time, Tablet, Qt::NoModifier), + : InputEvent(w, time, Tablet, mods), down(down), local(local), global(global), device(device), pointerType(pointerType), pressure(pressure), xTilt(xTilt), yTilt(yTilt), tangentialPressure(tpressure), - rotation(rotation), z(z), uid(uid), mods(mods) { } + rotation(rotation), z(z), uid(uid) { } bool down; QPointF local; QPointF global; @@ -318,7 +318,6 @@ public: qreal rotation; int z; qint64 uid; - Qt::KeyboardModifiers mods; }; class TabletEnterProximityEvent : public InputEvent { diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 9d3c5f8616..ed6262ce93 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -2709,16 +2709,48 @@ bool QApplication::notify(QObject *receiver, QEvent *e) if (receiver->isWindowType()) QGuiApplicationPrivate::sendQWindowEventToQPlatformWindow(static_cast<QWindow *>(receiver), e); - // capture the current mouse/keyboard state if(e->spontaneous()) { - if (e->type() == QEvent::MouseButtonPress - || e->type() == QEvent::MouseButtonRelease) { + // Capture the current mouse and keyboard states. Doing so here is + // required in order to support QTestLib synthesized events. Real mouse + // and keyboard state updates from the platform plugin are managed by + // QGuiApplicationPrivate::process(Mouse|Wheel|Key|Touch|Tablet)Event(); + switch (e->type()) { + case QEvent::MouseButtonPress: + { QMouseEvent *me = static_cast<QMouseEvent*>(e); - if(me->type() == QEvent::MouseButtonPress) - QApplicationPrivate::mouse_buttons |= me->button(); - else - QApplicationPrivate::mouse_buttons &= ~me->button(); + QApplicationPrivate::modifier_buttons = me->modifiers(); + QApplicationPrivate::mouse_buttons |= me->button(); + break; + } + case QEvent::MouseButtonRelease: + { + QMouseEvent *me = static_cast<QMouseEvent*>(e); + QApplicationPrivate::modifier_buttons = me->modifiers(); + QApplicationPrivate::mouse_buttons &= ~me->button(); + break; + } + case QEvent::KeyPress: + case QEvent::KeyRelease: + case QEvent::MouseMove: +#ifndef QT_NO_WHEELEVENT + case QEvent::Wheel: +#endif + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: +#ifndef QT_NO_TABLETEVENT + case QEvent::TabletMove: + case QEvent::TabletPress: + case QEvent::TabletRelease: +#endif + { + QInputEvent *ie = static_cast<QInputEvent*>(e); + QApplicationPrivate::modifier_buttons = ie->modifiers(); + break; } + default: + break; + } } #ifndef QT_NO_GESTURES |