From 96f4c571d9d0828ff70a7b674107f42993332862 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 17 Jun 2020 17:11:48 +0000 Subject: [PATCH] optimize QKeySequencePrivate::keyBindings table Signed-off-by: Ivailo Monev --- src/gui/kernel/qkeysequence.cpp | 157 +++++++++++++++++++--------------------- src/gui/kernel/qkeysequence_p.h | 5 +- 2 files changed, 78 insertions(+), 84 deletions(-) diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 1d16d98a2..a0729bf92 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -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::keyBindings(StandardKey key) { QList 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; diff --git a/src/gui/kernel/qkeysequence_p.h b/src/gui/kernel/qkeysequence_p.h index 0bb3b132f..c6aa3e1e1 100644 --- a/src/gui/kernel/qkeysequence_p.h +++ b/src/gui/kernel/qkeysequence_p.h @@ -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 -- 2.11.0