OSDN Git Service

optimize QKeySequencePrivate::keyBindings table
authorIvailo Monev <xakepa10@laimg.moc>
Wed, 17 Jun 2020 17:11:48 +0000 (17:11 +0000)
committerIvailo Monev <xakepa10@laimg.moc>
Wed, 17 Jun 2020 17:38:05 +0000 (17:38 +0000)
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
src/gui/kernel/qkeysequence.cpp
src/gui/kernel/qkeysequence_p.h

index 1d16d98..a0729bf 100644 (file)
@@ -538,81 +538,80 @@ static const struct KeyNameTblData {
 
 static const short KeyNameTblSize = sizeof(KeyNameTbl) / sizeof(KeyNameTblData);
 
-//Table of key bindings. It must be sorted on key sequence.
-//A priority of 1 indicates that this is the primary key binding when multiple are defined.
-
+// Table of key bindings, must be sorted by standard key priority
 const QKeyBinding QKeySequencePrivate::keyBindings[] = {
-//   StandardKey                            Priority    Key Sequence                            Platforms
-    {QKeySequence::InsertParagraphSeparator,0,          Qt::Key_Return},
-    {QKeySequence::InsertParagraphSeparator,0,          Qt::Key_Enter},
-    {QKeySequence::Delete,                  1,          Qt::Key_Delete},
-    {QKeySequence::MoveToStartOfLine,       0,          Qt::Key_Home},
-    {QKeySequence::MoveToEndOfLine,         0,          Qt::Key_End},
-    {QKeySequence::MoveToPreviousChar,      0,          Qt::Key_Left},
-    {QKeySequence::MoveToPreviousLine,      0,          Qt::Key_Up},
-    {QKeySequence::MoveToNextChar,          0,          Qt::Key_Right},
-    {QKeySequence::MoveToNextLine,          0,          Qt::Key_Down},
-    {QKeySequence::MoveToPreviousPage,      1,          Qt::Key_PageUp},
-    {QKeySequence::MoveToNextPage,          1,          Qt::Key_PageDown},
-    {QKeySequence::HelpContents,            0,          Qt::Key_F1},
-    {QKeySequence::FindNext,                0,          Qt::Key_F3},
-    {QKeySequence::Refresh,                 0,          Qt::Key_F5},
-    {QKeySequence::Undo,                    0,          Qt::Key_F14}, //Undo on sun keyboards
-    {QKeySequence::Copy,                    0,          Qt::Key_F16}, //Copy on sun keyboards
-    {QKeySequence::Paste,                   0,          Qt::Key_F18}, //Paste on sun keyboards      
-    {QKeySequence::Cut,                     0,          Qt::Key_F20}, //Cut on sun keyboards
-    {QKeySequence::PreviousChild,           0,          Qt::Key_Back},
-    {QKeySequence::NextChild,               0,          Qt::Key_Forward}, 
-    {QKeySequence::InsertLineSeparator,     0,          Qt::SHIFT | Qt::Key_Return},
-    {QKeySequence::InsertLineSeparator,     0,          Qt::SHIFT | Qt::Key_Enter},
-    {QKeySequence::Paste,                   0,          Qt::SHIFT | Qt::Key_Insert}, 
-    {QKeySequence::Cut,                     0,          Qt::SHIFT | Qt::Key_Delete},
-    {QKeySequence::SelectStartOfLine,       0,          Qt::SHIFT | Qt::Key_Home},
-    {QKeySequence::SelectEndOfLine,         0,          Qt::SHIFT | Qt::Key_End},
-    {QKeySequence::SelectPreviousChar,      0,          Qt::SHIFT | Qt::Key_Left},
-    {QKeySequence::SelectPreviousLine,      0,          Qt::SHIFT | Qt::Key_Up},
-    {QKeySequence::SelectNextChar,          0,          Qt::SHIFT | Qt::Key_Right},
-    {QKeySequence::SelectNextLine,          0,          Qt::SHIFT | Qt::Key_Down},
-    {QKeySequence::SelectPreviousPage,      0,          Qt::SHIFT | Qt::Key_PageUp},
-    {QKeySequence::SelectNextPage,          0,          Qt::SHIFT | Qt::Key_PageDown},
-    {QKeySequence::WhatsThis,               1,          Qt::SHIFT | Qt::Key_F1},
-    {QKeySequence::FindPrevious,            0,          Qt::SHIFT | Qt::Key_F3},
-    {QKeySequence::ZoomIn,                  1,          Qt::CTRL | Qt::Key_Plus},
-    {QKeySequence::ZoomOut,                 1,          Qt::CTRL | Qt::Key_Minus},
-    {QKeySequence::SelectAll,               1,          Qt::CTRL | Qt::Key_A},
-    {QKeySequence::Bold,                    1,          Qt::CTRL | Qt::Key_B},
-    {QKeySequence::Copy,                    1,          Qt::CTRL | Qt::Key_C},
-    {QKeySequence::Delete,                  0,          Qt::CTRL | Qt::Key_D,}, //emacs (line edit only)
-    {QKeySequence::Find,                    0,          Qt::CTRL | Qt::Key_F},
-    {QKeySequence::Italic,                  0,          Qt::CTRL | Qt::Key_I}, 
-    {QKeySequence::DeleteEndOfLine,         0,          Qt::CTRL | Qt::Key_K}, //emacs (line edit only)
-    {QKeySequence::New,                     1,          Qt::CTRL | Qt::Key_N},
-    {QKeySequence::Open,                    1,          Qt::CTRL | Qt::Key_O},
-    {QKeySequence::Print,                   1,          Qt::CTRL | Qt::Key_P},
-    {QKeySequence::Save,                    1,          Qt::CTRL | Qt::Key_S},
-    {QKeySequence::AddTab,                  0,          Qt::CTRL | Qt::Key_T},
-    {QKeySequence::Underline,               1,          Qt::CTRL | Qt::Key_U}, 
-    {QKeySequence::Paste,                   1,          Qt::CTRL | Qt::Key_V},
-    {QKeySequence::Close,                   0,          Qt::CTRL | Qt::Key_W},
-    {QKeySequence::Cut,                     1,          Qt::CTRL | Qt::Key_X},
-    {QKeySequence::Undo,                    1,          Qt::CTRL | Qt::Key_Z},
-    {QKeySequence::NextChild,               1,          Qt::CTRL | Qt::Key_Tab},
-    {QKeySequence::DeleteStartOfWord,       0,          Qt::CTRL | Qt::Key_Backspace},
-    {QKeySequence::Copy,                    0,          Qt::CTRL | Qt::Key_Insert}, 
-    {QKeySequence::DeleteEndOfWord,         0,          Qt::CTRL | Qt::Key_Delete},
-    {QKeySequence::MoveToStartOfDocument,   0,          Qt::CTRL | Qt::Key_Home},
-    {QKeySequence::MoveToEndOfDocument,     0,          Qt::CTRL | Qt::Key_End},
-    {QKeySequence::MoveToPreviousWord,      0,          Qt::CTRL | Qt::Key_Left},
-    {QKeySequence::MoveToNextWord,          0,          Qt::CTRL | Qt::Key_Right},
-    {QKeySequence::Redo,                    0,          Qt::CTRL | Qt::SHIFT | Qt::Key_Z},
-    {QKeySequence::PreviousChild,           1,          Qt::CTRL | Qt::SHIFT | Qt::Key_Backtab},
-    {QKeySequence::Paste,                   0,          Qt::CTRL | Qt::SHIFT | Qt::Key_Insert},
-    {QKeySequence::SelectStartOfDocument,   0,          Qt::CTRL | Qt::SHIFT | Qt::Key_Home},
-    {QKeySequence::SelectEndOfDocument,     0,          Qt::CTRL | Qt::SHIFT | Qt::Key_End},
-    {QKeySequence::SelectPreviousWord,      0,          Qt::CTRL | Qt::SHIFT | Qt::Key_Left},
-    {QKeySequence::SelectNextWord,          0,          Qt::CTRL | Qt::SHIFT | Qt::Key_Right},
-    {QKeySequence::Back,                    1,          Qt::ALT  | Qt::Key_Left},
-    {QKeySequence::Forward,                 1,          Qt::ALT  | Qt::Key_Right},
+    // StandardKey                             Key Sequence
+    { QKeySequence::Delete,                    Qt::Key_Delete },
+    { QKeySequence::Copy,                      Qt::CTRL | Qt::Key_C },
+    { QKeySequence::Copy,                      Qt::Key_F16 }, // Copy on sun keyboards
+    { QKeySequence::Paste,                     Qt::CTRL | Qt::Key_V },
+    { QKeySequence::Paste,                     Qt::Key_F18 }, //Paste on sun keyboards
+    { QKeySequence::Paste,                     Qt::SHIFT | Qt::Key_Insert },
+    { QKeySequence::Cut,                       Qt::CTRL | Qt::Key_X },
+    { QKeySequence::Cut,                       Qt::Key_F20 }, // Cut on sun keyboards
+    { QKeySequence::Undo,                      Qt::CTRL | Qt::Key_Z },
+    { QKeySequence::NextChild,                 Qt::CTRL | Qt::Key_Tab },
+    { QKeySequence::PreviousChild,             Qt::CTRL | Qt::SHIFT | Qt::Key_Backtab },
+    { QKeySequence::InsertParagraphSeparator,  Qt::Key_Return },
+    { QKeySequence::InsertLineSeparator,       Qt::SHIFT | Qt::Key_Return },
+    // Non-priority
+    { QKeySequence::Back,                      Qt::ALT  | Qt::Key_Left },
+    { QKeySequence::Forward,                   Qt::ALT  | Qt::Key_Right },
+    { QKeySequence::MoveToPreviousPage,        Qt::Key_PageUp },
+    { QKeySequence::MoveToNextPage,            Qt::Key_PageDown },
+    { QKeySequence::WhatsThis,                 Qt::SHIFT | Qt::Key_F1 },
+    { QKeySequence::ZoomIn,                    Qt::CTRL | Qt::Key_Plus },
+    { QKeySequence::ZoomOut,                   Qt::CTRL | Qt::Key_Minus },
+    { QKeySequence::SelectAll,                 Qt::CTRL | Qt::Key_A },
+    { QKeySequence::Bold,                      Qt::CTRL | Qt::Key_B },
+    { QKeySequence::New,                       Qt::CTRL | Qt::Key_N },
+    { QKeySequence::Open,                      Qt::CTRL | Qt::Key_O },
+    { QKeySequence::Print,                     Qt::CTRL | Qt::Key_P },
+    { QKeySequence::Save,                      Qt::CTRL | Qt::Key_S },
+    { QKeySequence::Underline,                 Qt::CTRL | Qt::Key_U },
+    { QKeySequence::InsertParagraphSeparator,  Qt::Key_Enter },
+    { QKeySequence::MoveToStartOfLine,         Qt::Key_Home },
+    { QKeySequence::MoveToEndOfLine,           Qt::Key_End },
+    { QKeySequence::MoveToPreviousChar,        Qt::Key_Left },
+    { QKeySequence::MoveToPreviousLine,        Qt::Key_Up },
+    { QKeySequence::MoveToNextChar,            Qt::Key_Right },
+    { QKeySequence::MoveToNextLine,            Qt::Key_Down },
+    { QKeySequence::HelpContents,              Qt::Key_F1 },
+    { QKeySequence::FindNext,                  Qt::Key_F3 },
+    { QKeySequence::Refresh,                   Qt::Key_F5 },
+    { QKeySequence::Undo,                      Qt::Key_F14 }, // Undo on sun keyboards
+    { QKeySequence::PreviousChild,             Qt::Key_Back },
+    { QKeySequence::NextChild,                 Qt::Key_Forward },
+    { QKeySequence::InsertLineSeparator,       Qt::SHIFT | Qt::Key_Enter },
+    { QKeySequence::Cut,                       Qt::SHIFT | Qt::Key_Delete },
+    { QKeySequence::SelectStartOfLine,         Qt::SHIFT | Qt::Key_Home },
+    { QKeySequence::SelectEndOfLine,           Qt::SHIFT | Qt::Key_End },
+    { QKeySequence::SelectPreviousChar,        Qt::SHIFT | Qt::Key_Left },
+    { QKeySequence::SelectPreviousLine,        Qt::SHIFT | Qt::Key_Up },
+    { QKeySequence::SelectNextChar,            Qt::SHIFT | Qt::Key_Right },
+    { QKeySequence::SelectNextLine,            Qt::SHIFT | Qt::Key_Down },
+    { QKeySequence::SelectPreviousPage,        Qt::SHIFT | Qt::Key_PageUp },
+    { QKeySequence::SelectNextPage,            Qt::SHIFT | Qt::Key_PageDown },
+    { QKeySequence::FindPrevious,              Qt::SHIFT | Qt::Key_F3 },
+    { QKeySequence::Delete,                    Qt::CTRL | Qt::Key_D }, // Emacs (line edit only)
+    { QKeySequence::Find,                      Qt::CTRL | Qt::Key_F },
+    { QKeySequence::Italic,                    Qt::CTRL | Qt::Key_I },
+    { QKeySequence::DeleteEndOfLine,           Qt::CTRL | Qt::Key_K }, // Emacs (line edit only)
+    { QKeySequence::AddTab,                    Qt::CTRL | Qt::Key_T },
+    { QKeySequence::Close,                     Qt::CTRL | Qt::Key_W },
+    { QKeySequence::DeleteStartOfWord,         Qt::CTRL | Qt::Key_Backspace },
+    { QKeySequence::Copy,                      Qt::CTRL | Qt::Key_Insert },
+    { QKeySequence::DeleteEndOfWord,           Qt::CTRL | Qt::Key_Delete },
+    { QKeySequence::MoveToStartOfDocument,     Qt::CTRL | Qt::Key_Home },
+    { QKeySequence::MoveToEndOfDocument,       Qt::CTRL | Qt::Key_End },
+    { QKeySequence::MoveToPreviousWord,        Qt::CTRL | Qt::Key_Left },
+    { QKeySequence::MoveToNextWord,            Qt::CTRL | Qt::Key_Right },
+    { QKeySequence::Redo,                      Qt::CTRL | Qt::SHIFT | Qt::Key_Z },
+    { QKeySequence::Paste,                     Qt::CTRL | Qt::SHIFT | Qt::Key_Insert },
+    { QKeySequence::SelectStartOfDocument,     Qt::CTRL | Qt::SHIFT | Qt::Key_Home },
+    { QKeySequence::SelectEndOfDocument,       Qt::CTRL | Qt::SHIFT | Qt::Key_End },
+    { QKeySequence::SelectPreviousWord,        Qt::CTRL | Qt::SHIFT | Qt::Key_Left },
+    { QKeySequence::SelectNextWord,            Qt::CTRL | Qt::SHIFT | Qt::Key_Right },
 };
 
 const short QKeySequencePrivate::numberOfKeyBindings = sizeof(QKeySequencePrivate::keyBindings) / sizeof(QKeyBinding);
@@ -792,13 +791,9 @@ QKeySequence::QKeySequence(const QKeySequence& keysequence)
 QList<QKeySequence> QKeySequence::keyBindings(StandardKey key)
 {
     QList <QKeySequence> list;
-    for (short i = 0; i < QKeySequencePrivate::numberOfKeyBindings; ++i) {
-        QKeyBinding keyBinding = QKeySequencePrivate::keyBindings[i];
-        if (keyBinding.standardKey == key) {
-            if (keyBinding.priority > 0)
-                list.prepend(QKeySequence(keyBinding.shortcut));
-            else
-                list.append(QKeySequence(keyBinding.shortcut));
+    for (short i = 0; i < QKeySequencePrivate::numberOfKeyBindings; i++) {
+        if (QKeySequencePrivate::keyBindings[i].standardKey == key) {
+            list.append(QKeySequence(QKeySequencePrivate::keyBindings[i].shortcut));
         }
     }
     return list;
index 0bb3b13..c6aa3e1 100644 (file)
@@ -52,9 +52,8 @@ QT_BEGIN_NAMESPACE
 #ifndef QT_NO_SHORTCUT
 struct Q_AUTOTEST_EXPORT QKeyBinding
 {
-    QKeySequence::StandardKey standardKey;
-    short priority;
-    uint shortcut;
+    const QKeySequence::StandardKey standardKey;
+    const uint shortcut;
 };
 
 class Q_AUTOTEST_EXPORT QKeySequencePrivate