summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Varga <pvarga@inf.u-szeged.hu>2016-12-19 17:36:50 +0100
committerPeter Varga <pvarga@inf.u-szeged.hu>2017-01-22 20:02:47 +0000
commitb21083353a224d1a183f28b970abc8be56649da1 (patch)
tree684b5cd39f0bf49336c2335e68e98b8b27b8715f
parent221f83d34a3dce9f185afe679290d600beb5b81b (diff)
Fix handling of empty input method events
Task-number: QTBUG-55766 Change-Id: I4e6ade8f000f66ff1bb28f3b856ae140834292f1 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/core/render_widget_host_view_qt.cpp5
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp14
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp29
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("<html><body>" \
- "<input type='text' id='input3' value='QtWebEngine2'/>" \
- "</body></html>");
- 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("<html><body>" \
"<input type='text' id='input4' value='QtWebEngine inputMethod'/>" \
"</body></html>");
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("<html><body>"
+ " <input type='text' id='input1' value='QtWebEngine'/>"
+ "</body></html>");
+ 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"