diff options
author | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-02-08 03:43:19 (GMT) |
---|---|---|
committer | Andrew den Exter <andrew.den-exter@nokia.com> | 2011-02-09 00:19:48 (GMT) |
commit | f7e789710568d263816f50bd5782cc7adec41249 (patch) | |
tree | b267e8889b36d5e53802134791ab97d0e6444db8 /tests/auto | |
parent | dd49b322b327fe87d8420abcce0e6cee877a88d7 (diff) | |
download | Qt-f7e789710568d263816f50bd5782cc7adec41249.zip Qt-f7e789710568d263816f50bd5782cc7adec41249.tar.gz Qt-f7e789710568d263816f50bd5782cc7adec41249.tar.bz2 |
Don't clear pre-edit text when a graphics items loses focus.
Don't forceably reset the input method state when a graphics item
loses focus, reset the input context and let it handle sending the
appropriate events itself. That way behavior is consistent with
QWidget and the input context can opt to commit its current
pre-edit text instead of discarding it. And don't change the focus
until after the input context has been reset or the input method
events won't be delivered.
Change-Id: Ic545bccab6bf671709c1d06d499217baf614e6f9
Task-number: QTBUG-16997
Reviewed-by: axis
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index b221cd9..d446ca7 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -3838,6 +3838,23 @@ public: mutable int queryCalls; }; +class TestInputContext : public QInputContext +{ +public: + TestInputContext() {} + + QString identifierName() { return QString(); } + QString language() { return QString(); } + + void reset() { + ++resetCalls; + sendEvent(QInputMethodEvent()); } + + bool isComposing() const { return false; } + + int resetCalls; +}; + void tst_QGraphicsScene::inputMethod() { QFETCH(int, flags); @@ -3847,14 +3864,22 @@ void tst_QGraphicsScene::inputMethod() item->setFlags((QGraphicsItem::GraphicsItemFlags)flags); QGraphicsScene scene; - QEvent activate(QEvent::WindowActivate); - QApplication::sendEvent(&scene, &activate); + QGraphicsView view(&scene); + TestInputContext inputContext; + view.setInputContext(&inputContext); + view.show(); + QApplication::setActiveWindow(&view); + view.setFocus(); + QTest::qWaitForWindowShown(&view); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); + inputContext.resetCalls = 0; scene.addItem(item); QInputMethodEvent event; scene.setFocusItem(item); QCOMPARE(!!(item->flags() & QGraphicsItem::ItemIsFocusable), scene.focusItem() == item); + QCOMPARE(inputContext.resetCalls, 0); item->eventCalls = 0; qApp->sendEvent(&scene, &event); @@ -3865,6 +3890,9 @@ void tst_QGraphicsScene::inputMethod() QCOMPARE(item->queryCalls, callFocusItem ? 1 : 0); scene.setFocusItem(0); + // the input context is reset twice, once because an item has lost focus and again because + // the Qt::WA_InputMethodEnabled flag is cleared because no item has focus. + QCOMPARE(inputContext.resetCalls, callFocusItem ? 2 : 0); QCOMPARE(item->eventCalls, callFocusItem ? 2 : 0); // verify correct delivery of "reset" event QCOMPARE(item->queryCalls, callFocusItem ? 1 : 0); // verify that value is unaffected |