diff options
author | Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com> | 2009-09-09 08:01:10 (GMT) |
---|---|---|
committer | Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com> | 2009-09-09 15:18:07 (GMT) |
commit | 948038f077ea413ab7aa7634d1c9987ec7ab50f6 (patch) | |
tree | 4f1142819abe81fedad25e276b28900f1b16c157 /tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp | |
parent | c44402453593cbdf2eafa66f6ee23d17aacf44fd (diff) | |
download | Qt-948038f077ea413ab7aa7634d1c9987ec7ab50f6.zip Qt-948038f077ea413ab7aa7634d1c9987ec7ab50f6.tar.gz Qt-948038f077ea413ab7aa7634d1c9987ec7ab50f6.tar.bz2 |
Only active QGraphicsScenes can have active input focus.
This change ensures that only active scenes can have active input
focus items. If you try to set input focus on items that are in an
inactive scene, these items will gain input focus only when the scene
is activated.
For scenes attached to a view, this change should only fix the bug that
you could have a blinking line edit in a scene when the view is inactive,
meaning you couldn't type into the line edit.
For scenes that have no view, you now must activate the scene in order
to give the items active input focus. This will affect those who use
QGraphicsScene with custom key and focus handling.
Reviewed-by: brad
Diffstat (limited to 'tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp')
-rw-r--r-- | tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 9249f6d..1ee8e51 100644 --- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -554,6 +554,9 @@ void tst_QGraphicsProxyWidget::eventFilter() QFETCH(bool, fromObject); QGraphicsScene scene; + QEvent windowActivate(QEvent::WindowActivate); + qApp->sendEvent(&scene, &windowActivate); + SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; scene.addItem(proxy); @@ -682,18 +685,18 @@ void tst_QGraphicsProxyWidget::focusInEvent_data() // protected void focusInEvent(QFocusEvent* event) void tst_QGraphicsProxyWidget::focusInEvent() { + // ### This test is just plain old broken QFETCH(bool, widgetHasFocus); QFETCH(bool, widgetCanHaveFocus); - QGraphicsView view; - QGraphicsScene scene(&view); + QGraphicsScene scene; + QEvent windowActivate(QEvent::WindowActivate); + qApp->sendEvent(&scene, &windowActivate); + SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; proxy->setEnabled(true); scene.addItem(proxy); proxy->setVisible(true); - view.show(); - QApplication::setActiveWindow(&view); - view.activateWindow(); QWidget *widget = new QWidget; widget->resize(100, 100); @@ -706,7 +709,11 @@ void tst_QGraphicsProxyWidget::focusInEvent() proxy->setWidget(widget); proxy->setFlag(QGraphicsItem::ItemIsFocusable, true); // <- shouldn't need to do this - QTRY_VERIFY(widget->isVisible() && view.isVisible()); + + // ### This test is just plain old broken - sending a focus in event + // does not cause items to gain input focus. The widget has focus + // because the proxy has focus, not because it got this event. + QFocusEvent event(QEvent::FocusIn, Qt::TabFocusReason); event.ignore(); proxy->call_focusInEvent(&event); @@ -776,6 +783,10 @@ void tst_QGraphicsProxyWidget::focusNextPrevChild() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&view); +#endif + QTest::qWait(250); if (hasScene) { scene.addItem(proxy); proxy->show(); @@ -819,6 +830,9 @@ void tst_QGraphicsProxyWidget::focusOutEvent() SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; scene.addItem(proxy); view.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&view); +#endif QApplication::setActiveWindow(&view); view.activateWindow(); view.setFocus(); @@ -1084,6 +1098,7 @@ void tst_QGraphicsProxyWidget::keyPressEvent() #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&view); #endif + QTest::qWait(250); SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; proxy->setFlag(QGraphicsItem::ItemIsFocusable, true); // ### remove me!!! @@ -1122,6 +1137,10 @@ void tst_QGraphicsProxyWidget::keyReleaseEvent() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&view); +#endif + QTest::qWait(250); SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget; proxy->setFlag(QGraphicsItem::ItemIsFocusable, true); // ### remove me!!! |