diff options
author | Liang Qi <liang.qi@qt.io> | 2018-02-09 09:18:56 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-02-09 09:18:56 +0100 |
commit | 95b4996a04989aa26c8fba8aaa90b76b7166c2c1 (patch) | |
tree | 67e08b6eafa60c96866b36c9330e0b526ba60726 /src | |
parent | b3b079f1578527859aa1f5137ee8f2ec163923fb (diff) | |
parent | 44d02e3f0cf4db7e6d426c75de459019c574500a (diff) |
Merge remote-tracking branch 'origin/5.9' into 5.105.10
Conflicts:
.qmake.conf
Change-Id: Ia407f277cccfdd96242ebfdbe294d699e26e6b1d
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickcontrol.cpp | 14 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 9 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp index 67c89729..1c9bcfd5 100644 --- a/src/quicktemplates2/qquickcontrol.cpp +++ b/src/quicktemplates2/qquickcontrol.cpp @@ -159,11 +159,19 @@ bool QQuickControlPrivate::acceptTouch(const QTouchEvent::TouchPoint &point) } #endif +static void setActiveFocus(QQuickControl *control, Qt::FocusReason reason) +{ + QQuickControlPrivate *d = QQuickControlPrivate::get(control); + if (d->subFocusItem && d->window && d->flags & QQuickItem::ItemIsFocusScope) + QQuickWindowPrivate::get(d->window)->clearFocusInScope(control, d->subFocusItem, reason); + control->forceActiveFocus(reason); +} + void QQuickControlPrivate::handlePress(const QPointF &) { Q_Q(QQuickControl); if ((focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && !QGuiApplication::styleHints()->setFocusOnTouchRelease()) - q->forceActiveFocus(Qt::MouseFocusReason); + setActiveFocus(q, Qt::MouseFocusReason); } void QQuickControlPrivate::handleMove(const QPointF &point) @@ -180,7 +188,7 @@ void QQuickControlPrivate::handleRelease(const QPointF &) { Q_Q(QQuickControl); if ((focusPolicy & Qt::ClickFocus) == Qt::ClickFocus && QGuiApplication::styleHints()->setFocusOnTouchRelease()) - q->forceActiveFocus(Qt::MouseFocusReason); + setActiveFocus(q, Qt::MouseFocusReason); touchId = -1; } @@ -1582,7 +1590,7 @@ void QQuickControl::wheelEvent(QWheelEvent *event) { Q_D(QQuickControl); if ((d->focusPolicy & Qt::WheelFocus) == Qt::WheelFocus) - forceActiveFocus(Qt::MouseFocusReason); + setActiveFocus(this, Qt::MouseFocusReason); event->setAccepted(d->wheelEnabled); } diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 1a4c90a4..207a886b 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -450,12 +450,11 @@ bool QQuickPopupPrivate::prepareExitTransition() return false; if (transitionState != ExitTransition) { - if (focus) { - // The setFocus(false) call below removes any active focus before we're - // able to check it in finalizeExitTransition. - hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); + // The setFocus(false) call below removes any active focus before we're + // able to check it in finalizeExitTransition. + hadActiveFocusBeforeExitTransition = popupItem->hasActiveFocus(); + if (focus) popupItem->setFocus(false); - } transitionState = ExitTransition; hideOverlay(); emit q->aboutToHide(); |