diff options
author | Jani Honkonen <jani.honkonen@digia.com> | 2012-02-03 15:04:32 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-31 20:21:28 (GMT) |
commit | 6265ac63fe85e1ff8b2d9ca3d023b3a1a8b281f0 (patch) | |
tree | 2f46656282e5d33917ae8cf2807cbd30963e4d31 /src/gui | |
parent | 1dddfaa82cadd782366ba7dc9d0995b6c9865a24 (diff) | |
download | Qt-6265ac63fe85e1ff8b2d9ca3d023b3a1a8b281f0.zip Qt-6265ac63fe85e1ff8b2d9ca3d023b3a1a8b281f0.tar.gz Qt-6265ac63fe85e1ff8b2d9ca3d023b3a1a8b281f0.tar.bz2 |
Fix limitting shortcuts to keypad only
The Qt::KeypadModifier modifier is internally masked away from all
shortcuts. So it is not possible to set a keypad only shortcut.
Changed the implementation so that first a full keysequence match is
searched. Then if no match is found the same sequence is tried
without the keypad modifer.
Added a autotest for this also to cover the basic use cases relating
to this.
This is a backport of qt5 commit:
547a1bea492954d828aa0798be93384669812489
Task-number: QTBUG-20191
Change-Id: Ibb6809050ff6da23bdb1c087b93e517d1963d34c
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/kernel/qshortcutmap.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/gui/kernel/qshortcutmap.cpp b/src/gui/kernel/qshortcutmap.cpp index 4ff1ca3..51172de 100644 --- a/src/gui/kernel/qshortcutmap.cpp +++ b/src/gui/kernel/qshortcutmap.cpp @@ -390,6 +390,12 @@ QKeySequence::SequenceMatch QShortcutMap::nextState(QKeyEvent *e) d->identicals.resize(0); result = find(e); + if (result == QKeySequence::NoMatch && (e->modifiers() & Qt::KeypadModifier)) { + // Try to find a match without keypad modifier + QKeyEvent event = *e; + event.setModifiers(e->modifiers() & ~Qt::KeypadModifier); + result = find(&event); + } if (result == QKeySequence::NoMatch && e->modifiers() & Qt::ShiftModifier) { // If Shift + Key_Backtab, also try Shift + Qt::Key_Tab if (e->key() == Qt::Key_Backtab) { @@ -579,8 +585,7 @@ void QShortcutMap::createNewSequences(QKeyEvent *e, QVector<QKeySequence> &ksl) curKsl.setKey(0, 2); curKsl.setKey(0, 3); } - // Filtering keycode here with 0xdfffffff to ignore the Keypad modifier - curKsl.setKey(possibleKeys.at(pkNum) & 0xdfffffff, index); + curKsl.setKey(possibleKeys.at(pkNum), index); } } } |