diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-02-01 11:48:45 +0100 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2018-02-05 11:33:12 +0000 |
commit | 7eb5f8a54bdcf0520a7aa0a2874a059060866097 (patch) | |
tree | f4dbce305728c0582c721d8fe760ef63fbd5dbe2 /src | |
parent | 223c1524a7693e2c0f2312dd738c6aeb484358a5 (diff) |
QQuickControl: respect click focus policy for focus scopes
If a focus scope explicitly requests click focus, make it gain active
focus by clearing the sub-focus child.
Pane {
focusPolicy: Qt.ClickFocus
TextField { }
}
[ChangeLog][Controls][Control] Fixed focus scope controls, such as
Frame, GroupBox, Page, and Pane, to respect click focus policy by
clearing a potential sub-focus child. This makes it possible to close
the virtual keyboard by clicking the background of a Pane that has
Qt.ClickFocus set as its focusPolicy, for example.
Task-number: QTBUG-66133
Change-Id: I582f3c66aa6f11e229d89c4f610fae3c6259104d
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickcontrol.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp index 8d571c34..020997b1 100644 --- a/src/quicktemplates2/qquickcontrol.cpp +++ b/src/quicktemplates2/qquickcontrol.cpp @@ -160,11 +160,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) @@ -181,7 +189,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; } |