@@ -170,7 +170,8 @@ bool QKeyConverter::ConvertKeysToWebKeyEvents(const string16& client_keys,
170
170
171
171
// static_cast<Qt::KeyboardModifier>(modifiers)
172
172
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) {
174
175
char16 key = keys[i];
175
176
176
177
if (key == kWebDriverNullKey ) {
@@ -287,6 +288,14 @@ bool QKeyConverter::ConvertKeysToWebKeyEvents(const string16& client_keys,
287
288
}
288
289
}
289
290
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
+
290
299
// Create the key events.
291
300
bool necessary_modifiers[3 ];
292
301
for (int i = 0 ; i < 3 ; ++i) {
@@ -295,24 +304,24 @@ bool QKeyConverter::ConvertKeysToWebKeyEvents(const string16& client_keys,
295
304
!(sticky_modifiers & kModifiers [i].mask );
296
305
if (necessary_modifiers[i]) {
297
306
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 ));
299
308
}
300
309
}
301
310
302
311
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 ));
305
314
}
306
315
else
307
316
{
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 ));
310
319
}
311
320
312
321
for (int i = 2 ; i > -1 ; --i) {
313
322
if (necessary_modifiers[i]) {
314
323
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 ));
316
325
}
317
326
}
318
327
}
0 commit comments