aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2022-02-25 16:43:45 +0800
committerMitch Curtis <mitch.curtis@qt.io>2022-05-25 19:51:20 +0800
commit7b535d22d67d696b6f3e134a9937fd035990ab86 (patch)
tree1ba18c78b871ee191532b230e77b6f88e49e61aa
parent615e9b33487736330ce50053bc7bb050296fca09 (diff)
Give Dialogs and Menus focus by default
Dialogs and Menus should always have focus when they're opened, especially now that the cancel key handling in QQuickPopup/QQuickPopupItem is done via regular key events and not shortcuts, as popups will now require focus in order to be cancelled via keyboard. [ChangeLog][Controls][Important Behavior Changes] Dialogs and Menus now have their focus property set to true by default. Popups are unchanged, meaning that popups that should be interacted with via keyboard (including cancelling) should have focus set to true or forceActiveFocus() called on them after opening. Task-number: QTBUG-79280 Change-Id: Idd070f2b1e8180a34a0dadb6e11dc56e531df211 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
-rw-r--r--src/quicktemplates2/qquickdialog.cpp6
-rw-r--r--src/quicktemplates2/qquickmenu.cpp2
-rw-r--r--tests/auto/quickcontrols2/controls/data/tst_dialog.qml1
-rw-r--r--tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp4
4 files changed, 11 insertions, 2 deletions
diff --git a/src/quicktemplates2/qquickdialog.cpp b/src/quicktemplates2/qquickdialog.cpp
index 0ec620ecd9..5023fe0a81 100644
--- a/src/quicktemplates2/qquickdialog.cpp
+++ b/src/quicktemplates2/qquickdialog.cpp
@@ -61,6 +61,8 @@ QT_BEGIN_NAMESPACE
\image qtquickcontrols2-page-wireframe.png
+ By default, Dialogs have \l focus.
+
\section1 Dialog Title and Buttons
Dialog's \l title is displayed by a style-specific title bar that is assigned
@@ -203,6 +205,10 @@ QQuickDialog::QQuickDialog(QQuickDialogPrivate &dd, QObject *parent)
: QQuickPopup(dd, parent)
{
Q_D(QQuickDialog);
+
+ // Dialogs should get active focus when opened so that e.g. Cancel closes them.
+ setFocus(true);
+
QObject::connect(d->popupItem, &QQuickPopupItem::titleChanged, this, &QQuickDialog::titleChanged);
QObject::connect(d->popupItem, &QQuickPopupItem::headerChanged, this, &QQuickDialog::headerChanged);
QObject::connect(d->popupItem, &QQuickPopupItem::footerChanged, this, &QQuickDialog::footerChanged);
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp
index 6b4f3fafce..a4a7835e50 100644
--- a/src/quicktemplates2/qquickmenu.cpp
+++ b/src/quicktemplates2/qquickmenu.cpp
@@ -196,7 +196,7 @@ static const int SUBMENU_DELAY = 225;
will be \c true. For more information, see
\l {Keyboard Focus in Qt Quick}.
- The default value is \c false.
+ The default value is \c true.
\sa {Popup::}{activeFocus}
*/
diff --git a/tests/auto/quickcontrols2/controls/data/tst_dialog.qml b/tests/auto/quickcontrols2/controls/data/tst_dialog.qml
index b227d82e1b..448fd49ca2 100644
--- a/tests/auto/quickcontrols2/controls/data/tst_dialog.qml
+++ b/tests/auto/quickcontrols2/controls/data/tst_dialog.qml
@@ -95,6 +95,7 @@ TestCase {
verify(control.header)
verify(control.footer)
compare(control.standardButtons, 0)
+ verify(control.focus)
}
function test_accept() {
diff --git a/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp b/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp
index 9806eff7c3..77c665f977 100644
--- a/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp
+++ b/tests/auto/quickcontrols2/qquickmenu/tst_qquickmenu.cpp
@@ -117,6 +117,7 @@ void tst_QQuickMenu::defaults()
QQuickMenu *emptyMenu = helper.appWindow->property("emptyMenu").value<QQuickMenu*>();
QCOMPARE(emptyMenu->isVisible(), false);
+ QVERIFY(emptyMenu->hasFocus());
QCOMPARE(emptyMenu->currentIndex(), -1);
QCOMPARE(emptyMenu->contentItem()->property("currentIndex"), QVariant(-1));
QCOMPARE(emptyMenu->count(), 0);
@@ -304,10 +305,11 @@ void tst_QQuickMenu::contextMenuKeyboard()
QVERIFY(firstItem);
QSignalSpy visibleSpy(menu, SIGNAL(visibleChanged()));
- menu->setFocus(true);
+ QVERIFY(menu->hasFocus());
menu->open();
QCOMPARE(visibleSpy.count(), 1);
QVERIFY(menu->isVisible());
+ QVERIFY(menu->hasActiveFocus());
QQuickOverlay *overlay = window->property("overlay").value<QQuickOverlay*>();
QVERIFY(overlay);
QVERIFY(overlay->childItems().contains(menu->contentItem()->parentItem()));