diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-07-11 12:06:15 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-07-11 12:57:13 +0200 |
commit | d2d0e08e584c780b4b70a37e7b39c6bbcc7bc63e (patch) | |
tree | 22582b82dd5bb370205aa66302fb238bf5edaa6e /src/quicktemplates2/qquickpopup.cpp | |
parent | c3431db7a3eb6b0c6e325e2d1e16eb6def9a4b4d (diff) | |
parent | 744164e6c92cb721d2a339cee8c465e1685723f9 (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
.qmake.conf
tests/auto/controls/data/tst_scrollindicator.qml
Change-Id: I1f5581ae7814c0d4152e4c9b79a30a8af5a3a17b
Diffstat (limited to 'src/quicktemplates2/qquickpopup.cpp')
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 6927699c..81e50642 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -384,15 +384,10 @@ bool QQuickPopupPrivate::handleTouchEvent(QQuickItem *item, QTouchEvent *event) { switch (event->type()) { case QEvent::TouchBegin: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (acceptTouch(point)) - return handlePress(item, item->mapToScene(point.pos()), event->timestamp()); - } - break; - case QEvent::TouchUpdate: + case QEvent::TouchEnd: for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (!acceptTouch(point)) + if (!acceptTouch(point) && !blockInput(item, point.pos())) continue; switch (point.state()) { @@ -408,13 +403,6 @@ bool QQuickPopupPrivate::handleTouchEvent(QQuickItem *item, QTouchEvent *event) } break; - case QEvent::TouchEnd: - for (const QTouchEvent::TouchPoint &point : event->touchPoints()) { - if (acceptTouch(point)) - return handleRelease(item, item->mapToScene(point.pos()), event->timestamp()); - } - break; - case QEvent::TouchCancel: handleUngrab(); break; @@ -493,7 +481,13 @@ void QQuickPopupPrivate::finalizeExitTransition() destroyOverlay(); if (hadActiveFocusBeforeExitTransition && window) { - if (!qobject_cast<QQuickPopupItem *>(window->activeFocusItem())) { + // restore focus to the next popup in chain, or to the window content if there are no other popups open + QQuickPopup *popup = nullptr; + if (QQuickOverlay *overlay = QQuickOverlay::overlay(window)) + popup = QQuickOverlayPrivate::get(overlay)->stackingOrderPopups().value(0); + if (popup && popup->hasFocus()) { + popup->forceActiveFocus(); + } else { QQuickApplicationWindow *applicationWindow = qobject_cast<QQuickApplicationWindow*>(window); if (applicationWindow) applicationWindow->contentItem()->setFocus(true); |