summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qplatformintegration.cpp2
-rw-r--r--src/gui/kernel/qplatformintegration.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm3
-rw-r--r--src/widgets/kernel/qapplication.cpp4
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp27
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp4
6 files changed, 30 insertions, 13 deletions
diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp
index b713b713ae..85933de8b2 100644
--- a/src/gui/kernel/qplatformintegration.cpp
+++ b/src/gui/kernel/qplatformintegration.cpp
@@ -301,6 +301,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const
return QPlatformTheme::defaultThemeHint(QPlatformTheme::StartDragVelocity);
case UseRtlExtensions:
return QVariant(false);
+ case SynthesizeMouseFromTouchEvents:
+ return true;
}
return 0;
diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h
index 8ed48b268a..49dce3ea22 100644
--- a/src/gui/kernel/qplatformintegration.h
+++ b/src/gui/kernel/qplatformintegration.h
@@ -134,7 +134,8 @@ public:
PasswordMaskDelay,
FontSmoothingGamma,
StartDragVelocity,
- UseRtlExtensions
+ UseRtlExtensions,
+ SynthesizeMouseFromTouchEvents
};
virtual QVariant styleHint(StyleHint hint) const;
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm
index 95155f3540..65ee03d53f 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.mm
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm
@@ -313,6 +313,9 @@ QVariant QCocoaIntegration::styleHint(StyleHint hint) const
{
if (hint == QPlatformIntegration::FontSmoothingGamma)
return 2.0;
+ if (hint == QPlatformIntegration::SynthesizeMouseFromTouchEvents)
+ return false;
+
return QPlatformIntegration::styleHint(hint);
}
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 1fcd7b1fbc..d26804fddf 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -4105,6 +4105,10 @@ bool QApplicationPrivate::translateTouchToMouse(QWidget *widget, QTouchEvent *ev
{
Q_Q(QApplication);
+ // Check if the platform wants synthesized mouse events.
+ if (!QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::SynthesizeMouseFromTouchEvents).toBool())
+ return false;
+
Q_FOREACH (const QTouchEvent::TouchPoint &p, event->touchPoints()) {
const QEvent::Type eventType = (p.state() & Qt::TouchPointPressed) ? QEvent::MouseButtonPress
: (p.state() & Qt::TouchPointReleased) ? QEvent::MouseButtonRelease
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index fc91ba23b3..929b587dfb 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -1926,6 +1926,9 @@ void tst_QApplication::touchEventPropagation()
int argc = 1;
QApplication app(argc, &argv0, QApplication::GuiServer);
+ const bool mouseEventSynthesizing = QGuiApplicationPrivate::platformIntegration()
+ ->styleHint(QPlatformIntegration::SynthesizeMouseFromTouchEvents).toBool();
+
QList<QTouchEvent::TouchPoint> pressedTouchPoints;
QTouchEvent::TouchPoint press(0);
press.setState(Qt::TouchPointPressed);
@@ -1963,7 +1966,7 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(!window.seenTouchEvent);
- QVERIFY(window.seenMouseEvent); // Since QApplication transforms ignored touch events in mouse events
+ QCOMPARE(window.seenMouseEvent, mouseEventSynthesizing); // QApplication may transform ignored touch events in mouse events
window.reset();
window.setAttribute(Qt::WA_AcceptTouchEvents);
@@ -1977,7 +1980,7 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(window.seenTouchEvent);
- QVERIFY(window.seenMouseEvent);
+ QCOMPARE(window.seenMouseEvent, mouseEventSynthesizing);
window.reset();
window.acceptTouchEvent = true;
@@ -2015,9 +2018,9 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(!widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
+ QCOMPARE(widget.seenMouseEvent, mouseEventSynthesizing);
QVERIFY(!window.seenTouchEvent);
- QVERIFY(window.seenMouseEvent);
+ QCOMPARE(window.seenMouseEvent, mouseEventSynthesizing);
window.reset();
widget.reset();
@@ -2032,9 +2035,9 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
+ QCOMPARE(widget.seenMouseEvent, mouseEventSynthesizing);
QVERIFY(!window.seenTouchEvent);
- QVERIFY(window.seenMouseEvent);
+ QCOMPARE(window.seenMouseEvent, mouseEventSynthesizing);
window.reset();
widget.reset();
@@ -2049,7 +2052,7 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
+ QCOMPARE(widget.seenMouseEvent, mouseEventSynthesizing);
QVERIFY(!window.seenTouchEvent);
QVERIFY(!window.seenMouseEvent);
@@ -2084,9 +2087,9 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(!widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
+ QCOMPARE(widget.seenMouseEvent, mouseEventSynthesizing);
QVERIFY(window.seenTouchEvent);
- QVERIFY(window.seenMouseEvent);
+ QCOMPARE(window.seenMouseEvent, mouseEventSynthesizing);
window.reset();
widget.reset();
@@ -2101,7 +2104,7 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(!widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
+ QCOMPARE(widget.seenMouseEvent, mouseEventSynthesizing);
QVERIFY(window.seenTouchEvent);
QVERIFY(!window.seenMouseEvent);
@@ -2119,8 +2122,8 @@ void tst_QApplication::touchEventPropagation()
touchPointList(releasedTouchPoints));
QCoreApplication::processEvents();
QVERIFY(!widget.seenTouchEvent);
- QVERIFY(widget.seenMouseEvent);
- QVERIFY(!window.seenTouchEvent);
+ QCOMPARE(widget.seenMouseEvent, mouseEventSynthesizing);
+ QCOMPARE(!window.seenTouchEvent, mouseEventSynthesizing);
QVERIFY(!window.seenMouseEvent);
}
}
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 0c35107157..3b45acfa1a 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -9409,6 +9409,10 @@ public:
void tst_QWidget::touchEventSynthesizedMouseEvent()
{
+ // Pass if the platform does not want mouse event synhesizing
+ if (!QGuiApplicationPrivate::platformIntegration()->styleHint(QPlatformIntegration::SynthesizeMouseFromTouchEvents).toBool())
+ return;
+
{
// Simple case, we ignore the touch events, we get mouse events instead
QTouchDevice *device = new QTouchDevice;