summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Wolff <oliver.wolff@digia.com>2012-10-11 07:40:14 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-13 05:51:19 +0200
commitbcbcf5e71884b006b0c89c4509af171de5aa59d7 (patch)
tree98d6a871d32b87e509ba0dd62d249c0a9be4f163
parent9e44b76093e08fed7b57b52246f39a38f3265727 (diff)
Be able to obtain list of possible key combinations in platform integration
As there is no way to obtain the list of possible keys for a shortcut in a platform independent way there needs to be a way to get that from the platform integration. Task-number: QTBUG-26902 Change-Id: I520add56ee09d5c3c58709fb29dad2fbfe4c9d0b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
-rw-r--r--src/gui/kernel/qkeymapper_qpa.cpp7
-rw-r--r--src/gui/kernel/qplatformintegration.cpp14
-rw-r--r--src/gui/kernel/qplatformintegration.h2
3 files changed, 22 insertions, 1 deletions
diff --git a/src/gui/kernel/qkeymapper_qpa.cpp b/src/gui/kernel/qkeymapper_qpa.cpp
index 5073720ed8..0c225a4c91 100644
--- a/src/gui/kernel/qkeymapper_qpa.cpp
+++ b/src/gui/kernel/qkeymapper_qpa.cpp
@@ -43,6 +43,8 @@
#include <qdebug.h>
#include <private/qevent_p.h>
#include <private/qlocale_p.h>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
QT_BEGIN_NAMESPACE
@@ -66,7 +68,10 @@ void QKeyMapperPrivate::clearMappings()
QList<int> QKeyMapperPrivate::possibleKeys(QKeyEvent *e)
{
- QList<int> result;
+ QList<int> result = QGuiApplicationPrivate::platformIntegration()->possibleKeys(e);
+ if (!result.isEmpty())
+ return result;
+
if (e->key() && (e->key() != Qt::Key_unknown))
result << int(e->key() + e->modifiers());
else if (!e->text().isEmpty())
diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp
index 631f392284..cf55c59bab 100644
--- a/src/gui/kernel/qplatformintegration.cpp
+++ b/src/gui/kernel/qplatformintegration.cpp
@@ -313,6 +313,20 @@ Qt::KeyboardModifiers QPlatformIntegration::queryKeyboardModifiers() const
}
/*!
+ Should be used to obtain a list of possible shortcuts for the given key
+ event. As that needs system functionality it cannot be done in qkeymapper.
+
+ One example for more than 1 possibility is the key combination of Shift+5.
+ That one might trigger a shortcut which is set as "Shift+5" as well as one
+ using %. These combinations depend on the currently set keyboard layout
+ which cannot be obtained by Qt functionality.
+*/
+QList<int> QPlatformIntegration::possibleKeys(const QKeyEvent *) const
+{
+ return QList<int>();
+}
+
+/*!
Should be called by the implementation whenever a new screen is added.
The first screen added will be the primary screen, used for default-created
diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h
index 7bc6c276c0..7e8888407c 100644
--- a/src/gui/kernel/qplatformintegration.h
+++ b/src/gui/kernel/qplatformintegration.h
@@ -76,6 +76,7 @@ class QPlatformTheme;
class QPlatformDialogHelper;
class QPlatformSharedGraphicsCache;
class QPlatformServices;
+class QKeyEvent;
class Q_GUI_EXPORT QPlatformIntegration
{
@@ -141,6 +142,7 @@ public:
virtual QVariant styleHint(StyleHint hint) const;
virtual Qt::KeyboardModifiers queryKeyboardModifiers() const;
+ virtual QList<int> possibleKeys(const QKeyEvent *) const;
virtual QStringList themeNames() const;
virtual QPlatformTheme *createPlatformTheme(const QString &name) const;