Fix using modifier keys

* Fix error in regex that prevented use of modifier keys in general.
* Added '#' modifier to press the "Meta" button. This correlates to the Windows key on Windows and Command key on macOS.
* Fix #6695 - send proper modifier keys based on documentation
This commit is contained in:
Jonathan White 2021-07-17 10:23:08 -04:00
parent 1150b69836
commit 58615d78bd
5 changed files with 22 additions and 1 deletions

View File

@ -553,7 +553,7 @@ AutoType::parseSequence(const QString& entrySequence, const Entry* entry, QStrin
// Group 3 = inner placeholder (allows nested placeholders) // Group 3 = inner placeholder (allows nested placeholders)
// Group 4 = repeat (opt) // Group 4 = repeat (opt)
// Group 5 = character // Group 5 = character
QRegularExpression regex("([+%^]*)({((?>[^{}]+?|(?2))+?)(?:\\s+(\\d+))?})|(.)"); QRegularExpression regex("([+%^#]*)(?:({((?>[^{}]+?|(?2))+?)(?:\\s+(\\d+))?})|(.))");
auto results = regex.globalMatch(sequence); auto results = regex.globalMatch(sequence);
while (results.hasNext()) { while (results.hasNext()) {
auto match = results.next(); auto match = results.next();
@ -569,6 +569,9 @@ AutoType::parseSequence(const QString& entrySequence, const Entry* entry, QStrin
if (match.captured(1).contains('%')) { if (match.captured(1).contains('%')) {
modifiers |= Qt::AltModifier; modifiers |= Qt::AltModifier;
} }
if (match.captured(1).contains('#')) {
modifiers |= Qt::MetaModifier;
}
const auto fullPlaceholder = match.captured(2); const auto fullPlaceholder = match.captured(2);
auto placeholder = match.captured(3).toLower(); auto placeholder = match.captured(3).toLower();

View File

@ -232,6 +232,9 @@ AutoTypeAction::Result AutoTypeExecutorMac::execType(const AutoTypeKey* action)
if (action->modifiers & Qt::AltModifier) { if (action->modifiers & Qt::AltModifier) {
m_platform->sendKey(Qt::Key_Alt, true); m_platform->sendKey(Qt::Key_Alt, true);
} }
if (action->modifiers & Qt::MetaModifier) {
m_platform->sendKey(Qt::Key_Meta, true);
}
if (action->key != Qt::Key_unknown) { if (action->key != Qt::Key_unknown) {
m_platform->sendKey(action->key, true); m_platform->sendKey(action->key, true);
@ -250,6 +253,9 @@ AutoTypeAction::Result AutoTypeExecutorMac::execType(const AutoTypeKey* action)
if (action->modifiers & Qt::AltModifier) { if (action->modifiers & Qt::AltModifier) {
m_platform->sendKey(Qt::Key_Alt, false); m_platform->sendKey(Qt::Key_Alt, false);
} }
if (action->modifiers & Qt::MetaModifier) {
m_platform->sendKey(Qt::Key_Meta, false);
}
Tools::sleep(execDelayMs); Tools::sleep(execDelayMs);
return AutoTypeAction::Result::Ok(); return AutoTypeAction::Result::Ok();

View File

@ -279,6 +279,9 @@ AutoTypeAction::Result AutoTypeExecutorWin::execType(const AutoTypeKey* action)
if (action->modifiers & Qt::AltModifier) { if (action->modifiers & Qt::AltModifier) {
m_platform->sendKey(Qt::Key_Alt, true); m_platform->sendKey(Qt::Key_Alt, true);
} }
if (action->modifiers & Qt::MetaModifier) {
m_platform->sendKey(Qt::Key_Meta, true);
}
if (action->key != Qt::Key_unknown) { if (action->key != Qt::Key_unknown) {
m_platform->sendKey(action->key, true); m_platform->sendKey(action->key, true);
@ -297,6 +300,9 @@ AutoTypeAction::Result AutoTypeExecutorWin::execType(const AutoTypeKey* action)
if (action->modifiers & Qt::AltModifier) { if (action->modifiers & Qt::AltModifier) {
m_platform->sendKey(Qt::Key_Alt, false); m_platform->sendKey(Qt::Key_Alt, false);
} }
if (action->modifiers & Qt::MetaModifier) {
m_platform->sendKey(Qt::Key_Meta, false);
}
Tools::sleep(execDelayMs); Tools::sleep(execDelayMs);
return AutoTypeAction::Result::Ok(); return AutoTypeAction::Result::Ok();

View File

@ -366,6 +366,10 @@ uint16 MacUtils::qtToNativeKeyCode(Qt::Key key)
case Qt::Key_Shift: case Qt::Key_Shift:
return kVK_Shift; return kVK_Shift;
case Qt::Key_Control: case Qt::Key_Control:
return kVK_Control;
case Qt::Key_Alt:
return kVK_Option;
case Qt::Key_Meta:
return kVK_Command; return kVK_Command;
case Qt::Key_Backspace: case Qt::Key_Backspace:
return kVK_Delete; return kVK_Delete;

View File

@ -265,6 +265,8 @@ WORD WinUtils::qtToNativeKeyCode(Qt::Key key)
return VK_DELETE; // 0x2E return VK_DELETE; // 0x2E
case Qt::Key_Help: case Qt::Key_Help:
return VK_HELP; // 0x2F return VK_HELP; // 0x2F
case Qt::Key_Meta:
return VK_LWIN; // 0x5B
case Qt::Key_F1: case Qt::Key_F1:
return VK_F1; // 0x70 return VK_F1; // 0x70