diff options
author | David Edmundson <davidedmundson@kde.org> | 2013-08-08 17:33:35 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-20 22:22:21 +0200 |
commit | 725bdc3fd2f88c7f49f59a151579fd128cf543dc (patch) | |
tree | c9b472af22114805a5e6a132989e0d98920e4bea /src/gui/kernel/qevent.cpp | |
parent | e2322c885f6dd67834c5110c6b7e2b63ea8b6186 (diff) |
Fetch StandardKey shortcuts from QPlatformTheme
This allows platforms to dynamically alter their keyboard
shortcuts, for example if they are user-configurable on that
platform. Current behavior remains the same.
QEvent previously used the hardcoded values in QKeySequencePrivate so
this was modified to use QKeySequence::keyBindings().
In order to keep the speed of QEvent's former binary search, we moved
this code to QPlatformTheme::keyBindings(), making it faster for all
keyBinding lookups.
As we now need to search by StandardKey instead of by shortcut the list
is reordered and a test is changed to reflect that.
Change-Id: Iefb402fbbe8768be2208ce036f3c2deed72dcc6c
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@digia.com>
Diffstat (limited to 'src/gui/kernel/qevent.cpp')
-rw-r--r-- | src/gui/kernel/qevent.cpp | 46 |
1 files changed, 2 insertions, 44 deletions
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 96fbc42f72..e11c4671e6 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -45,7 +45,6 @@ #include "qpa/qplatformintegration.h" #include "qpa/qplatformdrag.h" #include "private/qevent_p.h" -#include "private/qkeysequence_p.h" #include "qdebug.h" #include "qmimedata.h" #include "private/qdnd_p.h" @@ -1036,50 +1035,9 @@ bool QKeyEvent::matches(QKeySequence::StandardKey matchKey) const { //The keypad and group switch modifier should not make a difference uint searchkey = (modifiers() | key()) & ~(Qt::KeypadModifier | Qt::GroupSwitchModifier); - const uint platform = QKeySequencePrivate::currentKeyPlatforms(); - uint N = QKeySequencePrivate::numberOfKeyBindings; - int first = 0; - int last = N - 1; - - while (first <= last) { - int mid = (first + last) / 2; - QKeyBinding midVal = QKeySequencePrivate::keyBindings[mid]; - - if (searchkey > midVal.shortcut){ - first = mid + 1; // Search in top half - } - else if (searchkey < midVal.shortcut){ - last = mid - 1; // Search in bottom half - } - else { - //found correct shortcut value, now we must check for platform match - if ((midVal.platform & platform) && (midVal.standardKey == matchKey)) { - return true; - } else { //We may have several equal values for different platforms, so we must search in both directions - - //search forward - for ( unsigned int i = mid + 1 ; i < N - 1 ; ++i) { - QKeyBinding current = QKeySequencePrivate::keyBindings[i]; - if (current.shortcut != searchkey) - break; - else if (current.platform & platform && current.standardKey == matchKey) - return true; - } - - //search back - for ( int i = mid - 1 ; i >= 0 ; --i) { - QKeyBinding current = QKeySequencePrivate::keyBindings[i]; - if (current.shortcut != searchkey) - break; - else if (current.platform & platform && current.standardKey == matchKey) - return true; - } - return false; //we could not find it among the matching keySequences - } - } - } - return false; //we could not find matching keySequences at all + const QList<QKeySequence> bindings = QKeySequence::keyBindings(matchKey); + return bindings.contains(QKeySequence(searchkey)); } #endif // QT_NO_SHORTCUT |