From 3efae3272151f0abf55af742c2618be2a35455a5 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Wed, 2 Dec 2009 11:39:46 +0100 Subject: Do not emulate mouse event out of touch pad events If the touch event comes from a touchpad it doesn't seem necessary to send fake mouse events. At least on the platform that actually supports touchpad events (i.e. Mac) native apps don't do that and the current implementation breaks popup handling - since touch events are only sent by default if two or more fingers touch the touchpad, we send fake MouseButtonPress when second finger is pressed and MouseButtonRelease when the second finger is released - i.e. at the same time when the system send scrollWheel events. This causes the active popup to close when using two-finger scroll gesture. Reviewed-by: Brad --- src/gui/kernel/qwidget.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index b389054..da3ef92 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -8374,9 +8374,10 @@ bool QWidget::event(QEvent *event) case QEvent::TouchUpdate: case QEvent::TouchEnd: { +#ifndef Q_WS_MAC QTouchEvent *touchEvent = static_cast(event); const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().first(); - if (touchPoint.isPrimary()) + if (touchPoint.isPrimary() || touchEvent->deviceType() == QTouchEvent::TouchPad) break; // fake a mouse event! @@ -8405,6 +8406,7 @@ bool QWidget::event(QEvent *event) Qt::LeftButton, touchEvent->modifiers()); (void) QApplication::sendEvent(this, &mouseEvent); +#endif // Q_WS_MAC break; } case QEvent::Gesture: -- cgit v0.12