diff -Nru ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/debian/changelog ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/debian/changelog --- ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/debian/changelog 2014-04-02 19:37:14.000000000 +0000 +++ ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/debian/changelog 2014-04-02 19:37:14.000000000 +0000 @@ -1,3 +1,11 @@ +ubuntu-keyboard (0.99.trunk.phablet2+14.04.20140402-0ubuntu1) trusty; urgency=low + + [ Olivier Tilloy ] + * When sending a key event, send KeyPress AND the corresponding + KeyRelease event. (LP: #1300382) + + -- Ubuntu daily release Wed, 02 Apr 2014 19:32:28 +0000 + ubuntu-keyboard (0.99.trunk.phablet2+14.04.20140318-0ubuntu1) trusty; urgency=low [ Bill Filler ] diff -Nru ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/src/view/abstracttexteditor.cpp ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/src/view/abstracttexteditor.cpp --- ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/src/view/abstracttexteditor.cpp 2014-03-18 14:42:19.000000000 +0000 +++ ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/src/view/abstracttexteditor.cpp 2014-04-02 19:32:20.000000000 +0000 @@ -495,8 +495,7 @@ if (event_key != Qt::Key_unknown) { commitPreedit(); - QKeyEvent ev(QEvent::KeyPress, event_key, Qt::NoModifier, keyText); - sendKeyEvent(ev); + sendKeyPressAndReleaseEvents(event_key, Qt::NoModifier, keyText); } } @@ -765,8 +764,7 @@ Q_D(AbstractTextEditor); if (d->text->preedit().isEmpty()) { - QKeyEvent ev(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier); - sendKeyEvent(ev); + sendKeyPressAndReleaseEvents(Qt::Key_Backspace, Qt::NoModifier); } else { d->text->removeFromPreedit(1); @@ -834,4 +832,12 @@ } } +void AbstractTextEditor::sendKeyPressAndReleaseEvents( + int key, Qt::KeyboardModifiers modifiers, const QString& text) { + QKeyEvent press(QEvent::KeyPress, key, modifiers, text); + sendKeyEvent(press); + QKeyEvent release(QEvent::KeyRelease, key, modifiers, text); + sendKeyEvent(release); +} + } // namespace MaliitKeyboard diff -Nru ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/src/view/abstracttexteditor.h ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/src/view/abstracttexteditor.h --- ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/src/view/abstracttexteditor.h 2014-03-18 14:42:02.000000000 +0000 +++ ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/src/view/abstracttexteditor.h 2014-04-02 19:32:20.000000000 +0000 @@ -157,6 +157,9 @@ Q_SLOT void autoRepeatBackspace(); void autoRepeatWordBackspace(); QString wordLeftOfCursor() const; + + void sendKeyPressAndReleaseEvents(int key, Qt::KeyboardModifiers modifiers, + const QString& text = QString()); }; } // namespace MaliitKeyboard diff -Nru ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/tests/unittests/ut_repeat-backspace/ut_repeat-backspace.cpp ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/tests/unittests/ut_repeat-backspace/ut_repeat-backspace.cpp --- ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140318/tests/unittests/ut_repeat-backspace/ut_repeat-backspace.cpp 2014-03-18 14:42:02.000000000 +0000 +++ ubuntu-keyboard-0.99.trunk.phablet2+14.04.20140402/tests/unittests/ut_repeat-backspace/ut_repeat-backspace.cpp 2014-04-02 19:32:20.000000000 +0000 @@ -107,13 +107,13 @@ (editor.data()->*initiate)(backspace); editor->onKeyReleased(backspace); - QCOMPARE(host->keyEventCount(), 1); - QCOMPARE(host->lastKeyEvent().type(), QEvent::KeyPress); + QCOMPARE(host->keyEventCount(), 2); + QCOMPARE(host->lastKeyEvent().type(), QEvent::KeyRelease); QCOMPARE(host->lastKeyEvent().key(), int(Qt::Key_Backspace)); QTest::qWait(delay); - QCOMPARE(host->keyEventCount(), 1); + QCOMPARE(host->keyEventCount(), 2); } /* @@ -190,20 +190,20 @@ QCOMPARE(host->keyEventCount(), 0); TestUtils::waitForSignal(host.data(), SIGNAL(keyEventSent(QKeyEvent))); - QCOMPARE(host->keyEventCount(), 1); - QCOMPARE(host->lastKeyEvent().type(), QEvent::KeyPress); + QCOMPARE(host->keyEventCount(), 2); + QCOMPARE(host->lastKeyEvent().type(), QEvent::KeyRelease); QCOMPARE(host->lastKeyEvent().key(), int(Qt::Key_Backspace)); TestUtils::waitForSignal(host.data(), SIGNAL(keyEventSent(QKeyEvent))); - QCOMPARE(host->keyEventCount(), 2); - QCOMPARE(host->lastKeyEvent().type(), QEvent::KeyPress); + QCOMPARE(host->keyEventCount(), 4); + QCOMPARE(host->lastKeyEvent().type(), QEvent::KeyRelease); QCOMPARE(host->lastKeyEvent().key(), int(Qt::Key_Backspace)); (editor.data()->*finalize)(backspace); QTest::qWait(delay); - QCOMPARE(host->keyEventCount(), 2); + QCOMPARE(host->keyEventCount(), 4); } };