QQuickItemPrivate::get(oldSubFocusItem)->updateSubFocusItem(scope, false);
QQuickItemPrivate::get(oldSubFocusItem)->focus = false;
changed << oldSubFocusItem;
+ } else if (!scope->isFocusScope() && scope->hasFocus()) {
+ QQuickItemPrivate::get(scope)->focus = false;
+ changed << scope;
}
d->updateSubFocusItem(scope, focus);
QQuickCanvasPrivate::notifyFocusChangesRecur(changed.data(), changed.count() - 1);
}
} else {
+ QVarLengthArray<QQuickItem *, 20> changed;
+ QQuickItem *oldSubFocusItem = d->subFocusItem;
+ if (!isFocusScope() && oldSubFocusItem) {
+ QQuickItemPrivate::get(oldSubFocusItem)->updateSubFocusItem(this, false);
+ QQuickItemPrivate::get(oldSubFocusItem)->focus = false;
+ changed << oldSubFocusItem;
+ }
+
d->focus = focus;
+ changed << this;
emit focusChanged(focus);
+
+ QQuickCanvasPrivate::notifyFocusChangesRecur(changed.data(), changed.count() - 1);
}
}
root->setFocus(true);
scope->setFocus(true);
scopedChild2->setFocus(true);
- QCOMPARE(root->hasFocus(), true);
+ QCOMPARE(root->hasFocus(), false);
QCOMPARE(child->hasFocus(), false);
QCOMPARE(scope->hasFocus(), false);
QCOMPARE(scopedChild->hasFocus(), false);
focusState.active(&grandchild);
FVERIFY();
}
+
+ {
+ QQuickItem parent;
+ QQuickItem child1;
+ QQuickItem child2;
+
+ FocusState focusState;
+ focusState << &parent << &child1 << &child2;
+ parent.setFocus(true);
+ child1.setParentItem(&parent);
+ child2.setParentItem(&parent);
+ focusState[&parent].set(true, false);
+ focusState[&child1].set(false, false);
+ focusState[&child2].set(false, false);
+ FVERIFY();
+
+ child1.setFocus(true);
+ focusState[&parent].set(false, false);
+ focusState[&child1].set(true, false);
+ FVERIFY();
+
+ parent.setFocus(true);
+ focusState[&parent].set(true, false);
+ focusState[&child1].set(false, false);
+ FVERIFY();
+ }
}
void tst_qquickitem::reparentFocusedItem()