Fix broken qWaitForWindowShown() behavior

qWaitForWindowShown() should check window->isActive() instead of
window->isExposed() and return false if timeout.

Add two new qWaitForWindowActive() and qWaitForWindowExposed()
functions.
Change-Id: Idd9601805c2e84b0d36ddd5471031b627d289953
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
bb10
Charles Yin 2012-03-16 15:09:18 +10:00 committed by Qt by Nokia
parent 9b0f381f2a
commit c7fb7a6782
2 changed files with 56 additions and 5 deletions

View File

@ -862,7 +862,7 @@ QT_BEGIN_NAMESPACE
/*! \fn bool QTest::qWaitForWindowShown(QWidget *window)
\since 4.6
Waits until the \a window is shown in the screen. This is mainly useful for
Waits until the \a window is shown on the screen. This is mainly useful for
asynchronous systems like X11, where a window will be mapped to screen some
time after being asked to show itself on the screen. Returns true.
@ -870,6 +870,37 @@ QT_BEGIN_NAMESPACE
\snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 24
*/
/*! \fn bool QTest::qWaitForWindowShown(QWindow *window, int timeout)
\since 5.0
Waits for \a timeout milliseconds or until the \a window is shown on the screen.
This is mainly useful for asynchronous systems like X11, where a window will be mapped to screen some
time after being asked to show itself on the screen.
Returns true if \c window is show in \a timout milliseconds, otherwise returns false.
\sa QTest::qWaitForWindowActive(), QTest::qWaitForWindowExposed()
*/
/*! \fn bool QTest::qWaitForWindowActive(QWindow *window, int timeout)
\since 5.0
Waits for \a timeout milliseconds or until the \a window is active.
Returns true if \c window is active in \a timout milliseconds, otherwise returns false.
\sa QTest::qWaitForWindowActive(), QTest::qWaitForWindowShown(), QWindow::isActive()
*/
/*! \fn bool QTest::qWaitForWindowExposed(QWindow *window, int timeout)
\since 5.0
Waits for \a timeout milliseconds or until the \a window is exposed.
Returns true if \c window is exposed in \a timout milliseconds, otherwise returns false.
\sa QTest::qWaitForWindowShown(), QTest::qWaitForWindowExposed(), QWindow::isExposed()
*/
/*!
\class QTest::QTouchEventSequence
\inmodule QtTest

View File

@ -76,19 +76,39 @@ namespace QTest
return true;
}
inline static bool qWaitForWindowShown(QWindow *window)
inline static bool qWaitForWindowActive(QWindow *window, int timeout = 1000)
{
QElapsedTimer timer;
timer.start();
while (!window->isExposed()) {
int remaining = int(timer.elapsed()) - 1000;
while (!window->isActive()) {
int remaining = timeout - int(timer.elapsed());
if (remaining <= 0)
break;
QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
QTest::qSleep(10);
}
return true;
return window->isActive();
}
inline static bool qWaitForWindowExposed(QWindow *window, int timeout = 1000)
{
QElapsedTimer timer;
timer.start();
while (!window->isExposed()) {
int remaining = timeout - int(timer.elapsed());
if (remaining <= 0)
break;
QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
QTest::qSleep(10);
}
return window->isExposed();
}
inline static bool qWaitForWindowShown(QWindow *window, int timeout = 1000)
{
return qWaitForWindowActive(window, timeout);
}
}