aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickpopup.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-07-11 12:06:15 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-07-11 12:57:13 +0200
commitd2d0e08e584c780b4b70a37e7b39c6bbcc7bc63e (patch)
tree22582b82dd5bb370205aa66302fb238bf5edaa6e /src/quicktemplates2/qquickpopup.cpp
parentc3431db7a3eb6b0c6e325e2d1e16eb6def9a4b4d (diff)
parent744164e6c92cb721d2a339cee8c465e1685723f9 (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.cpp24
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);