diff options
author | Pekka Vuorela <pekka.ta.vuorela@nokia.com> | 2012-03-01 16:54:50 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-22 16:13:21 +0100 |
commit | 7e90df7bf5aafd09ea5ed8bcc370db6a8912d173 (patch) | |
tree | af527348997c94a4b7362e99a0a4aecfaf144489 /tests/auto/widgets/kernel/qwidget | |
parent | 045c79f5ed6960109f9ebf76775fa1289c5080b0 (diff) |
FocusAboutToChange event to be send before focus changes
Focus change happen as: FocusAboutToChange event -> focus change
-> FocusOut event -> FocusIn event.
Input method need to have focus when calling commit(). Notification
on focus about to be lost allows QWindow implementations to commit in
time.
Also changes QWidget documentation to match code reality.
Change-Id: I17a8a374a33dd700909f79e370b42348869261a6
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
Diffstat (limited to 'tests/auto/widgets/kernel/qwidget')
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 49c93f8f03..975c88db05 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -5103,6 +5103,27 @@ void tst_QWidget::multipleToplevelFocusCheck() QTRY_COMPARE(QApplication::focusWidget(), (QWidget *)0); } +class FocusWidget: public QWidget +{ +protected: + virtual bool event(QEvent *ev) + { + if (ev->type() == QEvent::FocusAboutToChange) + widgetDuringFocusAboutToChange = qApp->focusWidget(); + return QWidget::event(ev); + } + virtual void focusOutEvent(QFocusEvent *) + { + widgetDuringFocusOut = qApp->focusWidget(); + } + +public: + FocusWidget(QWidget *parent) : QWidget(parent), widgetDuringFocusAboutToChange(0), widgetDuringFocusOut(0) {} + + QWidget *widgetDuringFocusAboutToChange; + QWidget *widgetDuringFocusOut; +}; + void tst_QWidget::setFocus() { { @@ -5169,20 +5190,16 @@ void tst_QWidget::setFocus() // window and children show, but window *is* active, children get focus QWidget window; - QWidget child1(&window); + FocusWidget child1(&window); child1.setFocusPolicy(Qt::StrongFocus); QWidget child2(&window); child2.setFocusPolicy(Qt::StrongFocus); window.show(); -#ifdef Q_WS_X11 - QApplication::setActiveWindow(&window); - QTest::qWaitForWindowShown(&window); -#else window.activateWindow(); - QApplication::processEvents(); -#endif + QTest::qWaitForWindowShown(&window); + QTRY_VERIFY(qGuiApp->focusWindow()); child1.setFocus(); QTRY_VERIFY(child1.hasFocus()); @@ -5193,6 +5210,10 @@ void tst_QWidget::setFocus() QVERIFY(child2.hasFocus()); QCOMPARE(window.focusWidget(), &child2); QCOMPARE(QApplication::focusWidget(), &child2); + + // focus changed in between the events + QCOMPARE(child1.widgetDuringFocusAboutToChange, &child1); + QCOMPARE(child1.widgetDuringFocusOut, &child2); } { @@ -5200,12 +5221,9 @@ void tst_QWidget::setFocus() QWidget window; window.show(); -#ifdef Q_WS_X11 - QApplication::setActiveWindow(&window); - QTest::qWaitForWindowShown(&window); -#else window.activateWindow(); -#endif + QTest::qWaitForWindowShown(&window); + QTRY_VERIFY(qGuiApp->focusWindow()); QWidget child1(&window); child1.setFocusPolicy(Qt::StrongFocus); @@ -5219,10 +5237,6 @@ void tst_QWidget::setFocus() QCOMPARE(QApplication::focusWidget(), static_cast<QWidget *>(0)); child1.show(); -#ifdef Q_WS_X11 - QApplication::setActiveWindow(&child1); - child1.activateWindow(); -#endif QApplication::processEvents(); QTRY_VERIFY(child1.hasFocus()); QCOMPARE(window.focusWidget(), &child1); @@ -5245,12 +5259,9 @@ void tst_QWidget::setFocus() QWidget window; window.show(); -#ifdef Q_WS_X11 - QApplication::setActiveWindow(&window); - QTest::qWaitForWindowShown(&window); -#else window.activateWindow(); -#endif + QTest::qWaitForWindowShown(&window); + QTRY_VERIFY(qGuiApp->focusWindow()); QWidget child1(&window); child1.setFocusPolicy(Qt::StrongFocus); |