From b21083353a224d1a183f28b970abc8be56649da1 Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Mon, 19 Dec 2016 17:36:50 +0100 Subject: Fix handling of empty input method events Task-number: QTBUG-55766 Change-Id: I4e6ade8f000f66ff1bb28f3b856ae140834292f1 Reviewed-by: Allan Sandfeld Jensen --- src/core/render_widget_host_view_qt.cpp | 5 +++- .../widgets/qwebenginepage/tst_qwebenginepage.cpp | 14 ----------- .../widgets/qwebengineview/tst_qwebengineview.cpp | 29 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index 0a41d67ae..813bbe0d7 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -1114,7 +1114,10 @@ void RenderWidgetHostViewQt::handleInputMethodEvent(QInputMethodEvent *ev) QGuiApplication::postEvent(qApp->focusObject(), eventCopy); } else { m_receivedEmptyImeText = false; - m_host->ImeCancelComposition(); + if (m_imeInProgress) { + m_imeInProgress = false; + m_host->ImeCancelComposition(); + } } } } diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 00570a169..13412ccba 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -1882,20 +1882,6 @@ void tst_QWebEnginePage::inputMethods() //END - Tests for Selection when the Editor is not in Composition mode - //START - Test for sending empty QInputMethodEvent - page->setHtml("" \ - "" \ - ""); - evaluateJavaScriptSync(page, "var inputEle = document.getElementById('input3'); inputEle.focus(); inputEle.select();"); - - //Send empty QInputMethodEvent - QInputMethodEvent emptyEvent; - page->event(&emptyEvent); - - QString inputValue = evaluateJavaScriptSync(page, "document.getElementById('input3').value").toString(); - QCOMPARE(inputValue, QString("QtWebEngine2")); - //END - Test for sending empty QInputMethodEvent - page->setHtml("" \ "" \ ""); diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 5b99f0787..1160e4580 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -93,6 +93,7 @@ private Q_SLOTS: void softwareInputPanel(); void hiddenText(); + void emptyInputMethodEvent(); }; // This will be called before the first test function is executed. @@ -1219,5 +1220,33 @@ void tst_QWebEngineView::hiddenText() QVERIFY(!(view.focusProxy()->inputMethodHints() & Qt::ImhHiddenText)); } +void tst_QWebEngineView::emptyInputMethodEvent() +{ + QWebEngineView view; + view.show(); + + QSignalSpy selectionChangedSpy(&view, SIGNAL(selectionChanged())); + QSignalSpy loadFinishedSpy(&view, SIGNAL(loadFinished(bool))); + view.setHtml("" + " " + ""); + QVERIFY(loadFinishedSpy.wait()); + + evaluateJavaScriptSync(view.page(), "var inputEle = document.getElementById('input1'); inputEle.focus(); inputEle.select();"); + QTRY_VERIFY(!evaluateJavaScriptSync(view.page(), "window.getSelection().toString()").toString().isEmpty()); + + QEXPECT_FAIL("", "https://bugreports.qt.io/browse/QTBUG-53134", Continue); + QVERIFY(selectionChangedSpy.wait(100)); + QEXPECT_FAIL("", "https://bugreports.qt.io/browse/QTBUG-53134", Continue); + QCOMPARE(selectionChangedSpy.count(), 1); + + // Send empty QInputMethodEvent + QInputMethodEvent emptyEvent; + QApplication::sendEvent(view.focusProxy(), &emptyEvent); + + QString inputValue = evaluateJavaScriptSync(view.page(), "document.getElementById('input1').value").toString(); + QCOMPARE(inputValue, QString("QtWebEngine")); +} + QTEST_MAIN(tst_QWebEngineView) #include "tst_qwebengineview.moc" -- cgit v1.2.3