Skip to content

Commit fb5b49b

Browse files
author
hekra
committed
manage autorepeat
1 parent 0db4bd3 commit fb5b49b

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/Test/BasicKeyboardInterfaceTest.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ void BasicKeyboardInterfaceTestWidget::setResultModifier(const QString &str) {
7474
}
7575

7676
void LEdit::keyPressEvent(QKeyEvent *pe) {
77+
qDebug() << "keypress k " << pe->key() << " auto " << pe->isAutoRepeat()<< " mod " << pe->modifiers();
7778
emit keyDown();
7879
currentText += pe->text();
7980
setText(currentText);
@@ -86,6 +87,7 @@ void LEdit::keyPressEvent(QKeyEvent *pe) {
8687
}
8788

8889
void LEdit::keyReleaseEvent(QKeyEvent *pe) {
90+
qDebug() << "keyprel k " << pe->key() << " auto " << pe->isAutoRepeat() << " mod " << pe->modifiers();
8991
emit keyUp();
9092
if (pe->modifiers() & Qt::ShiftModifier)
9193
emit keyModifier(QString::fromStdString("Shift"));

src/webdriver/extension_qt/q_key_converter.cc

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ bool QKeyConverter::ConvertKeysToWebKeyEvents(const string16& client_keys,
170170

171171
//static_cast<Qt::KeyboardModifier>(modifiers)
172172
Qt::KeyboardModifiers sticky_modifiers(*modifiers);
173-
for (size_t i = 0; i < keys.size(); ++i) {
173+
174+
for (size_t i = 0, size = keys.size(); i < size; ++i) {
174175
char16 key = keys[i];
175176

176177
if (key == kWebDriverNullKey) {
@@ -287,6 +288,14 @@ bool QKeyConverter::ConvertKeysToWebKeyEvents(const string16& client_keys,
287288
}
288289
}
289290

291+
bool autoPress = false, autoRelease = false;
292+
293+
if (i < size - 1 && key == keys[i + 1])
294+
autoRelease = true;
295+
296+
if (i > 0 && key == keys[i - 1])
297+
autoPress = true;
298+
290299
// Create the key events.
291300
bool necessary_modifiers[3];
292301
for (int i = 0; i < 3; ++i) {
@@ -295,24 +304,24 @@ bool QKeyConverter::ConvertKeysToWebKeyEvents(const string16& client_keys,
295304
!(sticky_modifiers & kModifiers[i].mask);
296305
if (necessary_modifiers[i]) {
297306
key_events.push_back(
298-
QKeyEvent(QEvent::KeyPress, kModifiers[i].key_code, sticky_modifiers));
307+
QKeyEvent(QEvent::KeyPress, kModifiers[i].key_code, sticky_modifiers, QString(), autoPress));
299308
}
300309
}
301310

302311
if (unmodified_text.length() || modified_text.length()) {
303-
key_events.push_back(QKeyEvent(QEvent::KeyPress, key_code, all_modifiers, unmodified_text.c_str()));
304-
key_events.push_back(QKeyEvent(QEvent::KeyRelease, key_code, all_modifiers, unmodified_text.c_str()));
312+
key_events.push_back(QKeyEvent(QEvent::KeyPress, key_code, all_modifiers, unmodified_text.c_str(), autoPress));
313+
key_events.push_back(QKeyEvent(QEvent::KeyRelease, key_code, all_modifiers, unmodified_text.c_str(), autoRelease));
305314
}
306315
else
307316
{
308-
key_events.push_back(QKeyEvent(QEvent::KeyPress, key_code, all_modifiers));
309-
key_events.push_back(QKeyEvent(QEvent::KeyRelease, key_code, all_modifiers));
317+
key_events.push_back(QKeyEvent(QEvent::KeyPress, key_code, all_modifiers, QString(), autoPress));
318+
key_events.push_back(QKeyEvent(QEvent::KeyRelease, key_code, all_modifiers, QString(), autoRelease));
310319
}
311320

312321
for (int i = 2; i > -1; --i) {
313322
if (necessary_modifiers[i]) {
314323
key_events.push_back(
315-
QKeyEvent(QEvent::KeyRelease, kModifiers[i].key_code, sticky_modifiers));
324+
QKeyEvent(QEvent::KeyRelease, kModifiers[i].key_code, sticky_modifiers, QString(), autoRelease));
316325
}
317326
}
318327
}

0 commit comments

Comments
 (0)