diff options
author | Andy Shaw <andy.shaw@qt.io> | 2020-05-27 10:14:18 +0200 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2020-05-27 13:58:32 +0000 |
commit | cc3145b68cb0094caef30315205a0e62dcbb7ccf (patch) | |
tree | ecae23b2061502a24057440e1751dc0924751d78 /src/imports | |
parent | 3110fd0809943560845465406b0ac3fccd9ab831 (diff) |
Account for single key shortcuts being used in the platform menus
When a single key shortcut is used then it does not go through the
usual channels for triggering. Therefore it needs to be registered as a
shortcut so it can be picked up when sent as a Shortcut event.
Pick-to: 5.15
Change-Id: I93a48c633e1051f142b884d78bbca181c778f7b9
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/platform/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/imports/platform/platform.pro | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenuitem.cpp | 34 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenuitem_p.h | 2 |
4 files changed, 38 insertions, 1 deletions
diff --git a/src/imports/platform/CMakeLists.txt b/src/imports/platform/CMakeLists.txt index 40001e72..b7ea06d3 100644 --- a/src/imports/platform/CMakeLists.txt +++ b/src/imports/platform/CMakeLists.txt @@ -33,6 +33,7 @@ qt_add_qml_module(qtlabsplatformplugin Qt::GuiPrivate Qt::QmlPrivate Qt::QuickPrivate + Qt::QuickTemplates2Private PUBLIC_LIBRARIES Qt::Core Qt::Gui diff --git a/src/imports/platform/platform.pro b/src/imports/platform/platform.pro index 06f34949..d9bcfcb8 100644 --- a/src/imports/platform/platform.pro +++ b/src/imports/platform/platform.pro @@ -3,7 +3,7 @@ TARGETPATH = Qt/labs/platform IMPORT_VERSION = 1.1 QT += qml quick -QT_PRIVATE += core-private gui-private qml-private quick-private +QT_PRIVATE += core-private gui-private qml-private quick-private quicktemplates2-private DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII diff --git a/src/imports/platform/qquickplatformmenuitem.cpp b/src/imports/platform/qquickplatformmenuitem.cpp index e5741b6b..45e6ba2d 100644 --- a/src/imports/platform/qquickplatformmenuitem.cpp +++ b/src/imports/platform/qquickplatformmenuitem.cpp @@ -43,6 +43,7 @@ #include <QtGui/qkeysequence.h> #include <QtGui/qpa/qplatformtheme.h> #include <QtGui/private/qguiapplication_p.h> +#include <QtQuickTemplates2/private/qquickshortcutcontext_p_p.h> #include "widgets/qwidgetplatform_p.h" @@ -505,13 +506,46 @@ QVariant QQuickPlatformMenuItem::shortcut() const return m_shortcut; } +bool QQuickPlatformMenuItem::event(QEvent *e) +{ +#if QT_CONFIG(shortcut) + if (e->type() == QEvent::Shortcut) { + QShortcutEvent *se = static_cast<QShortcutEvent *>(e); + if (se->shortcutId() == m_shortcutId) { + activate(); + return true; + } + } +#endif + return QObject::event(e); +} + void QQuickPlatformMenuItem::setShortcut(const QVariant& shortcut) { if (m_shortcut == shortcut) return; +#if QT_CONFIG(shortcut) + if (m_shortcutId != -1) { + QKeySequence sequence; + if (m_shortcut.type() == QVariant::Int) + sequence = QKeySequence(static_cast<QKeySequence::StandardKey>(m_shortcut.toInt())); + else + sequence = QKeySequence::fromString(m_shortcut.toString()); + QGuiApplicationPrivate::instance()->shortcutMap.removeShortcut(m_shortcutId, this, sequence); + } +#endif m_shortcut = shortcut; sync(); +#if QT_CONFIG(shortcut) + QKeySequence sequence; + if (m_shortcut.type() == QVariant::Int) + sequence = QKeySequence(static_cast<QKeySequence::StandardKey>(m_shortcut.toInt())); + else + sequence = QKeySequence::fromString(m_shortcut.toString()); + m_shortcutId = QGuiApplicationPrivate::instance()->shortcutMap.addShortcut(this, sequence, + Qt::WindowShortcut, QQuickShortcutContext::matcher); +#endif emit shortcutChanged(); } diff --git a/src/imports/platform/qquickplatformmenuitem_p.h b/src/imports/platform/qquickplatformmenuitem_p.h index f1143e64..e3d5258a 100644 --- a/src/imports/platform/qquickplatformmenuitem_p.h +++ b/src/imports/platform/qquickplatformmenuitem_p.h @@ -167,6 +167,7 @@ protected: QQuickPlatformIconLoader *iconLoader() const; + bool event(QEvent *e) override; private Q_SLOTS: void activate(); void updateIcon(); @@ -187,6 +188,7 @@ private: QQuickPlatformMenuItemGroup *m_group; mutable QQuickPlatformIconLoader *m_iconLoader; QPlatformMenuItem *m_handle; + int m_shortcutId = -1; friend class QQuickPlatformMenu; friend class QQuickPlatformMenuItemGroup; |