summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
authorPekka Vuorela <pekka.ta.vuorela@nokia.com>2012-03-01 16:54:50 +0200
committerQt by Nokia <qt-info@nokia.com>2012-03-22 16:13:21 +0100
commit7e90df7bf5aafd09ea5ed8bcc370db6a8912d173 (patch)
treeaf527348997c94a4b7362e99a0a4aecfaf144489 /tests/auto/widgets
parent045c79f5ed6960109f9ebf76775fa1289c5080b0 (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')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp53
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);