QtGui
-----
+QtWidgets
+---------
+* QWidget::setInputContext() is removed. Input contexts are now platform
+ specific.
+
QtNetwork
---------
}
}
-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;
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;
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)) {
void ensurePolished() const;
QInputContext *inputContext();
- void setInputContext(QInputContext *);
bool isAncestorOf(const QWidget *child) const;
// 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();
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);
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()
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);
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
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);
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()
void closeSoftwareInputPanel();
void selections();
void focusProxy();
- void contextInheritance();
void symbianTestCoeFepInputContext_data();
void symbianTestCoeFepInputContext();
void symbianTestCoeFepAutoCommit_data();
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
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);
// 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);
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);
// 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()
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
{
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)
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);