Widgets: Propagate 'accepted'-state of touch begin events.
Task-number: QTBUG-29946 Change-Id: Ia9ac54251f52b6ae4b3d667e49b96441def72a57 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>bb10
parent
f8a047d843
commit
8c81b282f8
|
|
@ -3837,7 +3837,7 @@ bool QApplicationPrivate::translateTouchToMouse(QWidget *widget, QTouchEvent *ev
|
|||
return false;
|
||||
}
|
||||
|
||||
void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
|
||||
bool QApplicationPrivate::translateRawTouchEvent(QWidget *window,
|
||||
QTouchDevice *device,
|
||||
const QList<QTouchEvent::TouchPoint> &touchPoints,
|
||||
ulong timestamp)
|
||||
|
|
@ -3899,8 +3899,9 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
|
|||
}
|
||||
|
||||
if (widgetsNeedingEvents.isEmpty())
|
||||
return;
|
||||
return false;
|
||||
|
||||
bool accepted = false;
|
||||
QHash<QWidget *, StatesAndTouchPoints>::ConstIterator it = widgetsNeedingEvents.constBegin();
|
||||
const QHash<QWidget *, StatesAndTouchPoints>::ConstIterator end = widgetsNeedingEvents.constEnd();
|
||||
for (; it != end; ++it) {
|
||||
|
|
@ -3939,19 +3940,23 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
|
|||
{
|
||||
// if the TouchBegin handler recurses, we assume that means the event
|
||||
// has been implicitly accepted and continue to send touch events
|
||||
widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent);
|
||||
(void ) QApplication::sendSpontaneousEvent(widget, &touchEvent);
|
||||
if (QApplication::sendSpontaneousEvent(widget, &touchEvent) && touchEvent.isAccepted()) {
|
||||
accepted = true;
|
||||
widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (widget->testAttribute(Qt::WA_WState_AcceptedTouchBeginEvent)) {
|
||||
if (touchEvent.type() == QEvent::TouchEnd)
|
||||
widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent, false);
|
||||
(void) QApplication::sendSpontaneousEvent(widget, &touchEvent);
|
||||
if (QApplication::sendSpontaneousEvent(widget, &touchEvent) && touchEvent.isAccepted())
|
||||
accepted = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return accepted;
|
||||
}
|
||||
|
||||
void QApplicationPrivate::translateTouchCancel(QTouchDevice *device, ulong timestamp)
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ public:
|
|||
void appendTouchPoint(const QTouchEvent::TouchPoint &touchPoint);
|
||||
void removeTouchPoint(int touchPointId);
|
||||
bool translateTouchToMouse(QWidget *widget, QTouchEvent *event);
|
||||
static void translateRawTouchEvent(QWidget *widget,
|
||||
static bool translateRawTouchEvent(QWidget *widget,
|
||||
QTouchDevice *device,
|
||||
const QList<QTouchEvent::TouchPoint> &touchPoints,
|
||||
ulong timestamp);
|
||||
|
|
|
|||
|
|
@ -473,10 +473,12 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
|||
|
||||
void QWidgetWindow::handleTouchEvent(QTouchEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::TouchCancel)
|
||||
if (event->type() == QEvent::TouchCancel) {
|
||||
QApplicationPrivate::translateTouchCancel(event->device(), event->timestamp());
|
||||
else
|
||||
QApplicationPrivate::translateRawTouchEvent(m_widget, event->device(), event->touchPoints(), event->timestamp());
|
||||
event->accept();
|
||||
} else {
|
||||
event->setAccepted(QApplicationPrivate::translateRawTouchEvent(m_widget, event->device(), event->touchPoints(), event->timestamp()));
|
||||
}
|
||||
}
|
||||
|
||||
void QWidgetWindow::handleKeyEvent(QKeyEvent *event)
|
||||
|
|
|
|||
Loading…
Reference in New Issue