@@ -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