optimize QKeySequencePrivate::keyBindings table

Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
This commit is contained in:
Ivailo Monev 2020-06-17 17:11:48 +00:00
parent 1198f4f1b2
commit 96f4c571d9
2 changed files with 78 additions and 84 deletions

View 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;

View 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