Windows QPA: Stop synthesizing mouse events from tablet/touch
These fake mouse events should be synthesized by QtGui, not the QPA plugin, when the tablet/touch events are not handled by the application and the Qt::AA_SynthesizeMouseForUnhandledTouchEvents or Qt::AA_SynthesizeMouseForUnhandledTabletEvents flags are set. Task-number: QTBUG-47007 Task-number: QTBUG-60437 Change-Id: I4d6d5e6667d245c45a4eb4f3a94db05cf9772f52 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io> Reviewed-by: Romain Pokrzywka <romain.pokrzywka@gmail.com> Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
parent
e59b323628
commit
8ada0633cd
@ -365,7 +365,7 @@ public:
|
|||||||
QUrl url;
|
QUrl url;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TabletEvent : public InputEvent {
|
class Q_GUI_EXPORT TabletEvent : public InputEvent {
|
||||||
public:
|
public:
|
||||||
static void handleTabletEvent(QWindow *w, const QPointF &local, const QPointF &global,
|
static void handleTabletEvent(QWindow *w, const QPointF &local, const QPointF &global,
|
||||||
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt,
|
int device, int pointerType, Qt::MouseButtons buttons, qreal pressure, int xTilt, int yTilt,
|
||||||
|
@ -65,6 +65,7 @@
|
|||||||
|
|
||||||
#include <QtGui/qwindow.h>
|
#include <QtGui/qwindow.h>
|
||||||
#include <qpa/qwindowsysteminterface.h>
|
#include <qpa/qwindowsysteminterface.h>
|
||||||
|
#include <qpa/qwindowsysteminterface_p.h>
|
||||||
#include <qpa/qplatformnativeinterface.h>
|
#include <qpa/qplatformnativeinterface.h>
|
||||||
#include <QtGui/qguiapplication.h>
|
#include <QtGui/qguiapplication.h>
|
||||||
#include <QtGui/qopenglcontext.h>
|
#include <QtGui/qopenglcontext.h>
|
||||||
@ -329,8 +330,12 @@ bool QWindowsContext::initTouch(unsigned integrationOptions)
|
|||||||
if (!touchDevice)
|
if (!touchDevice)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!(integrationOptions & QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch))
|
if (d->m_systemInfo & QWindowsContext::SI_SupportsPointer) {
|
||||||
touchDevice->setCapabilities(touchDevice->capabilities() | QTouchDevice::MouseEmulation);
|
QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(false);
|
||||||
|
} else {
|
||||||
|
if (!(integrationOptions & QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch))
|
||||||
|
touchDevice->setCapabilities(touchDevice->capabilities() | QTouchDevice::MouseEmulation);
|
||||||
|
}
|
||||||
|
|
||||||
QWindowSystemInterface::registerTouchDevice(touchDevice);
|
QWindowSystemInterface::registerTouchDevice(touchDevice);
|
||||||
|
|
||||||
|
@ -428,21 +428,6 @@ bool QWindowsPointerHandler::translateTouchEvent(QWindow *window, HWND hwnd,
|
|||||||
QWindowSystemInterface::handleTouchEvent(window, m_touchDevice, touchPoints,
|
QWindowSystemInterface::handleTouchEvent(window, m_touchDevice, touchPoints,
|
||||||
QWindowsKeyMapper::queryKeyboardModifiers());
|
QWindowsKeyMapper::queryKeyboardModifiers());
|
||||||
|
|
||||||
if (!(QWindowsIntegration::instance()->options() & QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch)) {
|
|
||||||
|
|
||||||
const QPoint globalPos = QPoint(touchInfo->pointerInfo.ptPixelLocation.x, touchInfo->pointerInfo.ptPixelLocation.y);
|
|
||||||
const QPoint localPos = QWindowsGeometryHint::mapFromGlobal(hwnd, globalPos);
|
|
||||||
const Qt::KeyboardModifiers keyModifiers = QWindowsKeyMapper::queryKeyboardModifiers();
|
|
||||||
const Qt::MouseButtons mouseButtons = queryMouseButtons();
|
|
||||||
|
|
||||||
QEvent::Type eventType;
|
|
||||||
Qt::MouseButton button;
|
|
||||||
getMouseEventInfo(msg.message, touchInfo->pointerInfo.ButtonChangeType, globalPos, &eventType, &button);
|
|
||||||
|
|
||||||
QWindowSystemInterface::handleMouseEvent(window, localPos, globalPos, mouseButtons, button, eventType,
|
|
||||||
keyModifiers, Qt::MouseEventSynthesizedByQt);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -535,15 +520,6 @@ bool QWindowsPointerHandler::translatePenEvent(QWindow *window, HWND hwnd, QtWin
|
|||||||
QWindowSystemInterface::handleTabletEvent(target, localPos, hiResGlobalPos, device, type, mouseButtons,
|
QWindowSystemInterface::handleTabletEvent(target, localPos, hiResGlobalPos, device, type, mouseButtons,
|
||||||
pressure, xTilt, yTilt, tangentialPressure, rotation, z,
|
pressure, xTilt, yTilt, tangentialPressure, rotation, z,
|
||||||
pointerId, keyModifiers);
|
pointerId, keyModifiers);
|
||||||
|
|
||||||
if (!(QWindowsIntegration::instance()->options() & QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch)) {
|
|
||||||
QEvent::Type eventType;
|
|
||||||
Qt::MouseButton button;
|
|
||||||
getMouseEventInfo(msg.message, penInfo->pointerInfo.ButtonChangeType, globalPos, &eventType, &button);
|
|
||||||
|
|
||||||
QWindowSystemInterface::handleMouseEvent(target, localPos, globalPos, mouseButtons, button, eventType,
|
|
||||||
keyModifiers, Qt::MouseEventSynthesizedByQt);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user