Skip to content

Commit 22824dc

Browse files
author
hekra01
committed
Merge pull request #10 from cisco-open-source/key_repeat
Manage key autorepeat
2 parents 0db4bd3 + 0ac6841 commit 22824dc

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

Diff for: src/webdriver/extension_qt/q_key_converter.cc

+16-7
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::null, 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::null, autoPress));
318+
key_events.push_back(QKeyEvent(QEvent::KeyRelease, key_code, all_modifiers, QString::null, 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::null, autoRelease));
316325
}
317326
}
318327
}

0 commit comments

Comments
 (0)