aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Moeller <[email protected]>2025-06-26 11:47:29 +0200
committerJan Moeller <[email protected]>2025-07-02 22:11:41 +0200
commitdf2c4029796dbbbee1ce04afb679c6a38fd15c3e (patch)
treeda6b8b2369a92dccf1c3a60c0653304b61a17ced
parent5935a839482f010e13049f89ca30fa2793ee58a3 (diff)
Change order of menuBar/header/footer to match visual orderHEADdev
Currently, the tab navigation order is confusing as the footer is focused before the actual content of the ApplicationWindow. By adjusting the stack order, the tab navigation now matches the visual order. Fixes: QTBUG-137823 Pick-to: 6.8 6.9 6.10 Change-Id: Ibe6fe9305181fe7ed42d7f8ca2da689b1b6ccf41 Reviewed-by: Mitch Curtis <[email protected]>
-rw-r--r--src/quicktemplates/qquickapplicationwindow.cpp9
-rw-r--r--tests/auto/quickcontrols/qquickapplicationwindow/tst_qquickapplicationwindow.cpp39
2 files changed, 29 insertions, 19 deletions
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<QQuickDialogButtonBox *>(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<QQuickDialogButtonBox *>(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,51 +122,51 @@ void tst_QQuickApplicationWindow::activeFocusOnTab1()
QVERIFY(item);
QVERIFY(!item->hasActiveFocus());
- // Tab: contentItem->sub1
+ // Tab: contentItem->menuBar
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = findItem<QQuickItem>(window->contentItem(), "sub1");
+ item = qobject_cast<QQuickApplicationWindow *>(window)->menuBar();
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // Tab: sub1->sub2
+ // Tab: menuBar->header
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = findItem<QQuickItem>(window->contentItem(), "sub2");
+ item = qobject_cast<QQuickApplicationWindow *>(window)->header();
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // Tab: sub2->menuBar
+ // Tab: header->sub1
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = qobject_cast<QQuickApplicationWindow *>(window)->menuBar();
+ item = findItem<QQuickItem>(window->contentItem(), "sub1");
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // Tab: menuBar->header
+ // Tab: sub1->sub2
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = qobject_cast<QQuickApplicationWindow *>(window)->header();
+ item = findItem<QQuickItem>(window->contentItem(), "sub2");
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // Tab: header->footer
+ // 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<QQuickItem>(window->contentItem(), "sub1");
+ item = qobject_cast<QQuickApplicationWindow *>(window)->menuBar();
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
@@ -224,51 +225,51 @@ void tst_QQuickApplicationWindow::activeFocusOnTab2()
QVERIFY_ACTIVE_FOCUS(item);
}
- // BackTab: footer->header
+ // BackTab: footer->sub2
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = qobject_cast<QQuickApplicationWindow *>(window)->header();
+ item = findItem<QQuickItem>(window->contentItem(), "sub2");
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // BackTab: header->menuBar
+ // BackTab: sub2->sub1
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = qobject_cast<QQuickApplicationWindow *>(window)->menuBar();
+ item = findItem<QQuickItem>(window->contentItem(), "sub1");
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // BackTab: menuBar->sub2
+ // BackTab: sub1->header
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = findItem<QQuickItem>(window->contentItem(), "sub2");
+ item = qobject_cast<QQuickApplicationWindow *>(window)->header();
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // BackTab: sub2->sub1
+ // BackTab: header->menuBar
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
QGuiApplication::sendEvent(window, &key);
QVERIFY(key.isAccepted());
- item = findItem<QQuickItem>(window->contentItem(), "sub1");
+ item = qobject_cast<QQuickApplicationWindow *>(window)->menuBar();
QVERIFY(item);
QVERIFY_ACTIVE_FOCUS(item);
}
- // BackTab: sub1->footer
+ // BackTab: menuBar->footer
{
QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
QGuiApplication::sendEvent(window, &key);