diff options
-rw-r--r-- | dist/changes-5.0.0 | 5 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget.cpp | 44 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget.h | 1 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget_p.h | 1 | ||||
-rw-r--r-- | tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 13 | ||||
-rw-r--r-- | tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 10 | ||||
-rw-r--r-- | tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 26 | ||||
-rw-r--r-- | tests/auto/qinputcontext/tst_qinputcontext.cpp | 66 | ||||
-rw-r--r-- | tests/auto/qwidget/tst_qwidget.cpp | 14 |
9 files changed, 43 insertions, 137 deletions
diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0 index ca63359b54..803e16ac46 100644 --- a/dist/changes-5.0.0 +++ b/dist/changes-5.0.0 @@ -58,6 +58,11 @@ QtCore QtGui ----- +QtWidgets +--------- +* QWidget::setInputContext() is removed. Input contexts are now platform + specific. + QtNetwork --------- diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 4cb01b9e72..f8d5e68da7 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -372,24 +372,9 @@ void QWidgetPrivate::updateWidgetTransform() } } -QInputContext *QWidgetPrivate::assignedInputContext() const -{ -#ifndef QT_NO_IM - const QWidget *widget = q_func(); - while (widget) { - if (QInputContext *qic = widget->d_func()->ic) - return qic; - widget = widget->parentWidget(); - } -#endif - return 0; -} - QInputContext *QWidgetPrivate::inputContext() const { #ifndef QT_NO_IM - if (QInputContext *qic = assignedInputContext()) - return qic; return qApp->inputContext(); #else return 0; @@ -415,31 +400,6 @@ QInputContext *QWidget::inputContext() return d->inputContext(); } -/*! - This function sets the input context \a context - on this widget. - - Qt takes ownership of the given input \a context. - - \sa inputContext() -*/ -void QWidget::setInputContext(QInputContext *context) -{ - Q_D(QWidget); - if (!testAttribute(Qt::WA_InputMethodEnabled)) - return; -#ifndef QT_NO_IM - if (context == d->ic) - return; - if (d->ic) - delete d->ic; - d->ic = context; - if (d->ic) - d->ic->setParent(this); -#endif -} - - #ifdef QT_KEYPAD_NAVIGATION QPointer<QWidget> QWidgetPrivate::editingWidget; @@ -10415,9 +10375,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) case Qt::WA_InputMethodEnabled: { #ifndef QT_NO_IM QWidget *focusWidget = d->effectiveFocusWidget(); - QInputContext *ic = focusWidget->d_func()->assignedInputContext(); - if (!ic && (!on || hasFocus())) - ic = focusWidget->d_func()->inputContext(); + QInputContext *ic = qApp->inputContext(); if (ic) { if (on && hasFocus() && ic->focusWidget() != focusWidget && isEnabled() && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) { diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index 3db0408bbd..365d995b4f 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -616,7 +616,6 @@ public: void ensurePolished() const; QInputContext *inputContext(); - void setInputContext(QInputContext *); bool isAncestorOf(const QWidget *child) const; diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h index 6e1568e0fa..775152bf0f 100644 --- a/src/widgets/kernel/qwidget_p.h +++ b/src/widgets/kernel/qwidget_p.h @@ -573,7 +573,6 @@ public: // sub-classes that their internals are about to be released. virtual void aboutToDestroy() {} - QInputContext *assignedInputContext() const; QInputContext *inputContext() const; inline QWidget *effectiveFocusWidget() { QWidget *w = q_func(); diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 79dd2bdd7d..2d629176f3 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -10411,10 +10411,8 @@ void tst_QGraphicsItem::updateMicroFocus() QGraphicsView view2(&scene); layout.addWidget(&view, 0, 0); layout.addWidget(&view2, 0, 1); - MyInputContext ic2; - view2.setInputContext(&ic2); - MyInputContext ic; - view.setInputContext(&ic); + MyInputContext *ic = new MyInputContext; + qApp->setInputContext(ic); MyInputWidget input; input.setPos(0, 0); input.resize(150, 150); @@ -10427,13 +10425,10 @@ void tst_QGraphicsItem::updateMicroFocus() QTest::qWaitForWindowShown(&parent); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&parent)); //We reset the number of updates that happened previously (initialisation) - ic.nbUpdates = 0; - ic2.nbUpdates = 0; + ic->nbUpdates = 0; input.doUpdateMicroFocus(); QApplication::processEvents(); - QTRY_COMPARE(ic.nbUpdates, 1); - //No update since view2 does not have the focus. - QTRY_COMPARE(ic2.nbUpdates, 0); + QTRY_COMPARE(ic->nbUpdates, 1); } void tst_QGraphicsItem::textItem_shortcuts() diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 910f0bb688..b4c419a4f6 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -3867,21 +3867,21 @@ void tst_QGraphicsScene::inputMethod() QGraphicsScene scene; QGraphicsView view(&scene); - TestInputContext inputContext; - view.setInputContext(&inputContext); + TestInputContext *inputContext = new TestInputContext; + qApp->setInputContext(inputContext); view.show(); QApplication::setActiveWindow(&view); view.setFocus(); QTest::qWaitForWindowShown(&view); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); - inputContext.resetCalls = 0; + inputContext->resetCalls = 0; scene.addItem(item); QInputMethodEvent event; scene.setFocusItem(item); QCOMPARE(!!(item->flags() & QGraphicsItem::ItemIsFocusable), scene.focusItem() == item); - QCOMPARE(inputContext.resetCalls, 0); + QCOMPARE(inputContext->resetCalls, 0); item->eventCalls = 0; qApp->sendEvent(&scene, &event); @@ -3894,7 +3894,7 @@ void tst_QGraphicsScene::inputMethod() 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(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 diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index d6bc8ff3e8..d1ccd7cae5 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -4124,8 +4124,8 @@ void tst_QGraphicsView::inputContextReset() QGraphicsView view(&scene); QVERIFY(view.testAttribute(Qt::WA_InputMethodEnabled)); - InputContextTester inputContext; - view.setInputContext(&inputContext); + InputContextTester *inputContext = new InputContextTester; + qApp->setInputContext(inputContext); view.show(); QTest::qWaitForWindowShown(&view); @@ -4135,39 +4135,39 @@ void tst_QGraphicsView::inputContextReset() QGraphicsItem *item1 = new QGraphicsRectItem; item1->setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemAcceptsInputMethod); - inputContext.resets = 0; + inputContext->resets = 0; scene.addItem(item1); - QCOMPARE(inputContext.resets, 0); + QCOMPARE(inputContext->resets, 0); - inputContext.resets = 0; + inputContext->resets = 0; scene.setFocusItem(item1); QCOMPARE(scene.focusItem(), (QGraphicsItem *)item1); QVERIFY(view.testAttribute(Qt::WA_InputMethodEnabled)); - QCOMPARE(inputContext.resets, 0); + QCOMPARE(inputContext->resets, 0); - inputContext.resets = 0; + inputContext->resets = 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.resets, 2); + QCOMPARE(inputContext->resets, 2); // introduce another item that is focusable but does not accept input methods QGraphicsItem *item2 = new QGraphicsRectItem; item2->setFlags(QGraphicsItem::ItemIsFocusable); scene.addItem(item2); - inputContext.resets = 0; + inputContext->resets = 0; scene.setFocusItem(item2); - QCOMPARE(inputContext.resets, 0); + QCOMPARE(inputContext->resets, 0); - inputContext.resets = 0; + inputContext->resets = 0; scene.setFocusItem(item1); - QCOMPARE(inputContext.resets, 0); + QCOMPARE(inputContext->resets, 0); // test changing between between items that accept input methods. item2->setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemAcceptsInputMethod); scene.setFocusItem(item2); - QCOMPARE(inputContext.resets, 1); + QCOMPARE(inputContext->resets, 1); } void tst_QGraphicsView::indirectPainting() diff --git a/tests/auto/qinputcontext/tst_qinputcontext.cpp b/tests/auto/qinputcontext/tst_qinputcontext.cpp index 27aea904f2..2f74988954 100644 --- a/tests/auto/qinputcontext/tst_qinputcontext.cpp +++ b/tests/auto/qinputcontext/tst_qinputcontext.cpp @@ -88,7 +88,6 @@ private slots: void closeSoftwareInputPanel(); void selections(); void focusProxy(); - void contextInheritance(); void symbianTestCoeFepInputContext_data(); void symbianTestCoeFepInputContext(); void symbianTestCoeFepAutoCommit_data(); @@ -306,12 +305,10 @@ void tst_QInputContext::filterMouseEvents() QApplication::setActiveWindow(&le); QFilterInputContext *ic = new QFilterInputContext; - le.setInputContext(ic); + qApp->setInputContext(ic); QTest::mouseClick(&le, Qt::LeftButton); QVERIFY(ic->lastTypes.indexOf(QEvent::MouseButtonRelease) >= 0); - - le.setInputContext(0); } class RequestSoftwareInputPanelStyle : public QWindowsStyle @@ -357,11 +354,8 @@ void tst_QInputContext::requestSoftwareInputPanel() layout->addWidget(le2); w.setLayout(layout); - QFilterInputContext *ic1, *ic2; - ic1 = new QFilterInputContext; - ic2 = new QFilterInputContext; - le1->setInputContext(ic1); - le2->setInputContext(ic2); + QFilterInputContext *ic = new QFilterInputContext; + qApp->setInputContext(ic); w.show(); QApplication::setActiveWindow(&w); @@ -369,20 +363,20 @@ void tst_QInputContext::requestSoftwareInputPanel() // Testing single click panel activation. newStyle->m_rsipBehavior = QStyle::RSIP_OnMouseClick; QTest::mouseClick(le2, Qt::LeftButton, Qt::NoModifier, QPoint(5, 5)); - QVERIFY(ic2->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) >= 0); - ic2->lastTypes.clear(); + QVERIFY(ic->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) >= 0); + ic->lastTypes.clear(); // Testing double click panel activation. newStyle->m_rsipBehavior = QStyle::RSIP_OnMouseClickAndAlreadyFocused; QTest::mouseClick(le1, Qt::LeftButton, Qt::NoModifier, QPoint(5, 5)); - QVERIFY(ic1->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) < 0); + QVERIFY(ic->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) < 0); QTest::mouseClick(le1, Qt::LeftButton, Qt::NoModifier, QPoint(5, 5)); - QVERIFY(ic1->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) >= 0); - ic1->lastTypes.clear(); + QVERIFY(ic->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) >= 0); + ic->lastTypes.clear(); // Testing right mouse button QTest::mouseClick(le1, Qt::RightButton, Qt::NoModifier, QPoint(5, 5)); - QVERIFY(ic1->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) < 0); + QVERIFY(ic->lastTypes.indexOf(QEvent::RequestSoftwareInputPanel) < 0); qApp->setStyle(oldStyle); oldStyle->setParent(qApp); @@ -402,11 +396,8 @@ void tst_QInputContext::closeSoftwareInputPanel() layout->addWidget(rb); w.setLayout(layout); - QFilterInputContext *ic1, *ic2; - ic1 = new QFilterInputContext; - ic2 = new QFilterInputContext; - le1->setInputContext(ic1); - le2->setInputContext(ic2); + QFilterInputContext *ic = new QFilterInputContext; + qApp->setInputContext(ic); w.show(); QApplication::setActiveWindow(&w); @@ -414,11 +405,11 @@ void tst_QInputContext::closeSoftwareInputPanel() // Testing that panel doesn't close between two input methods aware widgets. QTest::mouseClick(le1, Qt::LeftButton, Qt::NoModifier, QPoint(5, 5)); QTest::mouseClick(le2, Qt::LeftButton, Qt::NoModifier, QPoint(5, 5)); - QVERIFY(ic2->lastTypes.indexOf(QEvent::CloseSoftwareInputPanel) < 0); + QVERIFY(ic->lastTypes.indexOf(QEvent::CloseSoftwareInputPanel) < 0); // Testing that panel closes when focusing non-aware widget. QTest::mouseClick(rb, Qt::LeftButton, Qt::NoModifier, QPoint(5, 5)); - QVERIFY(ic2->lastTypes.indexOf(QEvent::CloseSoftwareInputPanel) >= 0); + QVERIFY(ic->lastTypes.indexOf(QEvent::CloseSoftwareInputPanel) >= 0); } void tst_QInputContext::selections() @@ -474,37 +465,6 @@ void tst_QInputContext::focusProxy() QCOMPARE(gic->focusWidget(), &proxy); } -void tst_QInputContext::contextInheritance() -{ - QWidget parent; - QWidget child(&parent); - - parent.setAttribute(Qt::WA_InputMethodEnabled, true); - child.setAttribute(Qt::WA_InputMethodEnabled, true); - - QCOMPARE(parent.inputContext(), qApp->inputContext()); - QCOMPARE(child.inputContext(), qApp->inputContext()); - - QInputContext *qic = new QFilterInputContext; - parent.setInputContext(qic); - QCOMPARE(parent.inputContext(), qic); - QCOMPARE(child.inputContext(), qic); - - parent.setAttribute(Qt::WA_InputMethodEnabled, false); - QVERIFY(!parent.inputContext()); - QCOMPARE(child.inputContext(), qic); - parent.setAttribute(Qt::WA_InputMethodEnabled, true); - - parent.setInputContext(0); - QCOMPARE(parent.inputContext(), qApp->inputContext()); - QCOMPARE(child.inputContext(), qApp->inputContext()); - - qic = new QFilterInputContext; - qApp->setInputContext(qic); - QCOMPARE(parent.inputContext(), qic); - QCOMPARE(child.inputContext(), qic); -} - #ifdef QT_WEBKIT_LIB class AutoWebView : public QWebView { diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 1414123296..f7d3e465df 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -589,21 +589,11 @@ void tst_QWidget::getSetCheck() QCOMPARE(true, obj1.acceptDrops()); // QInputContext * QWidget::inputContext() - // void QWidget::setInputContext(QInputContext *) MyInputContext *var13 = new MyInputContext; - obj1.setInputContext(var13); + qApp->setInputContext(var13); QCOMPARE((QInputContext *)0, obj1.inputContext()); // The widget by default doesn't have the WA_InputMethodEnabled attribute obj1.setAttribute(Qt::WA_InputMethodEnabled); - obj1.setInputContext(var13); QCOMPARE(static_cast<QInputContext *>(var13), obj1.inputContext()); - // QWidget takes ownership, so check parent - QCOMPARE(var13->parent(), static_cast<QObject *>(&obj1)); - // Check self assignment - obj1.setInputContext(obj1.inputContext()); - QCOMPARE(static_cast<QInputContext *>(var13), obj1.inputContext()); - obj1.setInputContext((QInputContext *)0); - QCOMPARE(qApp->inputContext(), obj1.inputContext()); - QVERIFY(qApp->inputContext() != var13); // bool QWidget::autoFillBackground() // void QWidget::setAutoFillBackground(bool) @@ -9937,7 +9927,7 @@ void tst_QWidget::focusProxyAndInputMethods() InputContextTester *inputContext = new InputContextTester; QWidget *toplevel = new QWidget(0, Qt::X11BypassWindowManagerHint); toplevel->setAttribute(Qt::WA_InputMethodEnabled, true); - toplevel->setInputContext(inputContext); // ownership is transferred + qApp->setInputContext(inputContext); // ownership is transferred QWidget *child = new QWidget(toplevel); child->setFocusProxy(toplevel); |