diff options
-rw-r--r-- | src/quick/items/qquickitem.cpp | 10 | ||||
-rw-r--r-- | tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp | 2 | ||||
-rw-r--r-- | tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp | 3 |
3 files changed, 9 insertions, 6 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 6afdc69291..3f0dae8070 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -6391,10 +6391,12 @@ void QQuickItem::setFocus(bool focus, Qt::FocusReason reason) while (scope && !scope->isFocusScope() && scope->parentItem()) scope = scope->parentItem(); if (d->window) { - if (focus) - QQuickWindowPrivate::get(d->window)->setFocusInScope(scope, this, reason); - else - QQuickWindowPrivate::get(d->window)->clearFocusInScope(scope, this, reason); + if (reason != Qt::PopupFocusReason) { + if (focus) + QQuickWindowPrivate::get(d->window)->setFocusInScope(scope, this, reason); + else + QQuickWindowPrivate::get(d->window)->clearFocusInScope(scope, this, reason); + } } else { // do the focus changes from setFocusInScope/clearFocusInScope that are // unrelated to a window diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index 91a6886bf0..45d23abbf6 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -1296,7 +1296,7 @@ void tst_qquicktextedit::selectionOnFocusOut() QVERIFY(edit2->hasActiveFocus()); edit2->setFocus(false, Qt::PopupFocusReason); - QVERIFY(!edit2->hasActiveFocus()); + QVERIFY(edit2->hasActiveFocus()); QCOMPARE(edit2->selectedText(), QLatin1String("text 2")); } diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index 273c0de660..e125c33a56 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -3605,7 +3605,8 @@ void tst_qquicktextinput::focusOutNotClearSelection() input.setFocus(false, Qt::PopupFocusReason); QGuiApplication::processEvents(); QTRY_COMPARE(input.selectedText(), QLatin1String("llo")); - QTRY_COMPARE(input.hasActiveFocus(), false); + // QTBUG-36332 and 36292: a popup window does not take focus + QTRY_COMPARE(input.hasActiveFocus(), true); input.setFocus(true); QTRY_COMPARE(input.hasActiveFocus(), true); |