summaryrefslogtreecommitdiffstats
path: root/src/controls/qquickaction.cpp
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-09-18 15:19:06 +0200
committerGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-09-18 15:19:06 +0200
commit46f3cc477fc00aae887f085e063d6cb10bfdcd4c (patch)
tree0585601759ccbae2ed2abecedaf16e06b80676d0 /src/controls/qquickaction.cpp
parent4c184095d378622fb0c3bb1692b331b3cc04e010 (diff)
parent04e000d2b1719696581bb4ae6ec21e39236ef38c (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.cpp37
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);
}
}