aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickcombobox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickcombobox.cpp')
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index 234ba5def8..0ffecd6fc6 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -49,6 +49,7 @@
#include <QtCore/qglobal.h>
#include <QtGui/qinputmethod.h>
#include <QtGui/qguiapplication.h>
+#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qpa/qplatformtheme.h>
#include <QtQml/qjsvalue.h>
#include <QtQml/qqmlcontext.h>
@@ -1985,17 +1986,23 @@ void QQuickComboBox::keyPressEvent(QKeyEvent *event)
Q_D(QQuickComboBox);
QQuickControl::keyPressEvent(event);
- switch (event->key()) {
+ const auto key = event->key();
+ if (!isEditable()) {
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ButtonPressKeys).value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(key)) {
+ if (!event->isAutoRepeat())
+ setPressed(true);
+ event->accept();
+ return;
+ }
+ }
+
+ switch (key) {
case Qt::Key_Escape:
case Qt::Key_Back:
if (d->isPopupVisible())
event->accept();
break;
- case Qt::Key_Space:
- if (!event->isAutoRepeat())
- setPressed(true);
- event->accept();
- break;
case Qt::Key_Enter:
case Qt::Key_Return:
if (d->isPopupVisible())
@@ -2045,13 +2052,19 @@ void QQuickComboBox::keyReleaseEvent(QKeyEvent *event)
if (event->isAutoRepeat())
return;
- switch (event->key()) {
- case Qt::Key_Space:
- if (!isEditable())
- d->togglePopup(true);
- setPressed(false);
- event->accept();
- break;
+ const auto key = event->key();
+ if (!isEditable()) {
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::ButtonPressKeys).value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(key)) {
+ if (!isEditable())
+ d->togglePopup(true);
+ setPressed(false);
+ event->accept();
+ return;
+ }
+ }
+
+ switch (key) {
case Qt::Key_Enter:
case Qt::Key_Return:
if (!isEditable() || d->isPopupVisible())