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
parent
9b0f381f2a
commit
c7fb7a6782
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue