diff options
| author | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-09-18 15:19:06 +0200 |
|---|---|---|
| committer | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-09-18 15:19:06 +0200 |
| commit | 46f3cc477fc00aae887f085e063d6cb10bfdcd4c (patch) | |
| tree | 0585601759ccbae2ed2abecedaf16e06b80676d0 /src/controls/qquickaction.cpp | |
| parent | 4c184095d378622fb0c3bb1692b331b3cc04e010 (diff) | |
| parent | 04e000d2b1719696581bb4ae6ec21e39236ef38c (diff) | |
Merge branch 'stable' into dev
Conflicts:
src/controls/qquickaction.cpp
Change-Id: I85255ba5c27c0d8ea023d0867e5963d43f8f1ddb
Diffstat (limited to 'src/controls/qquickaction.cpp')
| -rw-r--r-- | src/controls/qquickaction.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/controls/qquickaction.cpp b/src/controls/qquickaction.cpp index cfd0b4faf..0d77eb328 100644 --- a/src/controls/qquickaction.cpp +++ b/src/controls/qquickaction.cpp @@ -41,6 +41,7 @@ #include "qquickaction_p.h" #include "qquickexclusivegroup_p.h" +#include "qquickmenuitem_p.h" #include <QtGui/qguiapplication.h> #include <QtQuick/qquickitem.h> @@ -214,6 +215,8 @@ void QQuickAction::setText(const QString &text) emit textChanged(); } +namespace { + bool qShortcutContextMatcher(QObject *o, Qt::ShortcutContext context) { switch (context) { @@ -237,6 +240,38 @@ bool qShortcutContextMatcher(QObject *o, Qt::ShortcutContext context) return false; } +bool qMnemonicContextMatcher(QObject *o, Qt::ShortcutContext context) +{ + switch (context) { + case Qt::ApplicationShortcut: + return true; + case Qt::WindowShortcut: { + QObject *w = o; + while (w && !w->isWindowType()) { + w = w->parent(); + if (QQuickItem * item = qobject_cast<QQuickItem*>(w)) + w = item->window(); + else if (QQuickMenuBase *mb = qobject_cast<QQuickMenuBase *>(w)) { + QQuickItem *vi = mb->visualItem(); + if (vi && vi->isVisible()) + w = vi->window(); + else + break; // Non visible menu objects don't get mnemonic match + } + } + if (w && w == QGuiApplication::focusWindow()) + return true; + } + case Qt::WidgetShortcut: + case Qt::WidgetWithChildrenShortcut: + break; + } + + return false; +} + +} // namespace + QVariant QQuickAction::shortcut() const { return m_shortcut.toString(QKeySequence::NativeText); @@ -278,7 +313,7 @@ void QQuickAction::setMnemonicFromText(const QString &text) if (!m_mnemonic.isEmpty()) { Qt::ShortcutContext context = Qt::WindowShortcut; - QGuiApplicationPrivate::instance()->shortcutMap.addShortcut(this, m_mnemonic, context, qShortcutContextMatcher); + QGuiApplicationPrivate::instance()->shortcutMap.addShortcut(this, m_mnemonic, context, qMnemonicContextMatcher); } } |
