diff --git a/src/quicktemplates/qquickapplicationwindow.cpp b/src/quicktemplates/qquickapplicationwindow.cpp index a45dcd7357..489dd48f47 100644 --- a/src/quicktemplates/qquickapplicationwindow.cpp +++ b/src/quicktemplates/qquickapplicationwindow.cpp @@ -428,6 +428,8 @@ void QQuickApplicationWindow::setHeader(QQuickItem *header) else if (QQuickDialogButtonBox *buttonBox = qobject_cast(header)) buttonBox->setPosition(QQuickDialogButtonBox::Header); #endif + + header->stackBefore(d->control); } if (isComponentComplete()) d->relayout(); @@ -484,6 +486,8 @@ void QQuickApplicationWindow::setFooter(QQuickItem *footer) tabBar->setPosition(QQuickTabBar::Footer); else if (QQuickDialogButtonBox *buttonBox = qobject_cast(footer)) buttonBox->setPosition(QQuickDialogButtonBox::Footer); + + footer->stackAfter(d->control); #endif } if (isComponentComplete()) @@ -727,6 +731,11 @@ void QQuickApplicationWindow::setMenuBar(QQuickItem *menuBar) p->addItemChangeListener(d, ItemChanges); if (qFuzzyIsNull(menuBar->z())) menuBar->setZ(2); + + if (header()) + menuBar->stackBefore(header()); + else + menuBar->stackBefore(d->control); } if (isComponentComplete()) d->relayout(); diff --git a/tests/auto/quickcontrols/qquickapplicationwindow/tst_qquickapplicationwindow.cpp b/tests/auto/quickcontrols/qquickapplicationwindow/tst_qquickapplicationwindow.cpp index 92dbdd5e5e..e9fa4494dc 100644 --- a/tests/auto/quickcontrols/qquickapplicationwindow/tst_qquickapplicationwindow.cpp +++ b/tests/auto/quickcontrols/qquickapplicationwindow/tst_qquickapplicationwindow.cpp @@ -122,29 +122,7 @@ void tst_QQuickApplicationWindow::activeFocusOnTab1() QVERIFY(item); QVERIFY(!item->hasActiveFocus()); - // Tab: contentItem->sub1 - { - QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); - QGuiApplication::sendEvent(window, &key); - QVERIFY(key.isAccepted()); - - item = findItem(window->contentItem(), "sub1"); - QVERIFY(item); - QVERIFY_ACTIVE_FOCUS(item); - } - - // Tab: sub1->sub2 - { - QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); - QGuiApplication::sendEvent(window, &key); - QVERIFY(key.isAccepted()); - - item = findItem(window->contentItem(), "sub2"); - QVERIFY(item); - QVERIFY_ACTIVE_FOCUS(item); - } - - // Tab: sub2->menuBar + // Tab: contentItem->menuBar { QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); QGuiApplication::sendEvent(window, &key); @@ -166,7 +144,29 @@ void tst_QQuickApplicationWindow::activeFocusOnTab1() QVERIFY_ACTIVE_FOCUS(item); } - // Tab: header->footer + // Tab: header->sub1 + { + QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + + item = findItem(window->contentItem(), "sub1"); + QVERIFY(item); + QVERIFY_ACTIVE_FOCUS(item); + } + + // Tab: sub1->sub2 + { + QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + + item = findItem(window->contentItem(), "sub2"); + QVERIFY(item); + QVERIFY_ACTIVE_FOCUS(item); + } + + // Tab: sub2->footer { QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); QGuiApplication::sendEvent(window, &key); @@ -177,13 +177,14 @@ void tst_QQuickApplicationWindow::activeFocusOnTab1() QVERIFY_ACTIVE_FOCUS(item); } - // Tab: footer->sub1 + // Tab: footer->menuBar { QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier); QGuiApplication::sendEvent(window, &key); QVERIFY(key.isAccepted()); item = findItem(window->contentItem(), "sub1"); + item = qobject_cast(window)->menuBar(); QVERIFY(item); QVERIFY_ACTIVE_FOCUS(item); } @@ -224,29 +225,7 @@ void tst_QQuickApplicationWindow::activeFocusOnTab2() QVERIFY_ACTIVE_FOCUS(item); } - // BackTab: footer->header - { - QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier); - QGuiApplication::sendEvent(window, &key); - QVERIFY(key.isAccepted()); - - item = qobject_cast(window)->header(); - QVERIFY(item); - QVERIFY_ACTIVE_FOCUS(item); - } - - // BackTab: header->menuBar - { - QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier); - QGuiApplication::sendEvent(window, &key); - QVERIFY(key.isAccepted()); - - item = qobject_cast(window)->menuBar(); - QVERIFY(item); - QVERIFY_ACTIVE_FOCUS(item); - } - - // BackTab: menuBar->sub2 + // BackTab: footer->sub2 { QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier); QGuiApplication::sendEvent(window, &key); @@ -268,7 +247,29 @@ void tst_QQuickApplicationWindow::activeFocusOnTab2() QVERIFY_ACTIVE_FOCUS(item); } - // BackTab: sub1->footer + // BackTab: sub1->header + { + QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + + item = qobject_cast(window)->header(); + QVERIFY(item); + QVERIFY_ACTIVE_FOCUS(item); + } + + // BackTab: header->menuBar + { + QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier); + QGuiApplication::sendEvent(window, &key); + QVERIFY(key.isAccepted()); + + item = qobject_cast(window)->menuBar(); + QVERIFY(item); + QVERIFY_ACTIVE_FOCUS(item); + } + + // BackTab: menuBar->footer { QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier); QGuiApplication::sendEvent(window, &key);