Improved qWaitForWindowShown().
authorSamuel Rødal <samuel.rodal@nokia.com>
Wed, 14 Mar 2012 11:16:45 +0000 (12:16 +0100)
committerQt by Nokia <qt-info@nokia.com>
Thu, 15 Mar 2012 10:40:50 +0000 (11:40 +0100)
Made faster by actually waiting for the window to be exposed, using
similar waiting logic as qWait(). Should speed up autotests that use it
quite a bit.

Change-Id: I628c6110a554fdbbf5bed7e91f57c2fe341113ed
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/testlib/qtestsystem.h

index 1f10967..ade5f4c 100644 (file)
@@ -53,9 +53,6 @@ QT_BEGIN_NAMESPACE
 
 
 class QWidget;
-#ifdef Q_WS_X11
-extern void qt_x11_wait_for_window_manager(QWidget *w);
-#endif
 
 namespace QTest
 {
@@ -74,22 +71,25 @@ namespace QTest
 
     inline static bool qWaitForWindowShown(QWidget *window)
     {
-#if defined(Q_WS_X11)
-        qt_x11_wait_for_window_manager(window);
-        QCoreApplication::processEvents();
-#else
         Q_UNUSED(window);
         qWait(200);
-#endif
         return true;
     }
+
     inline static bool qWaitForWindowShown(QWindow *window)
     {
-        Q_UNUSED(window);
-        qWait(200);
+        QElapsedTimer timer;
+        timer.start();
+        while (!window->isExposed()) {
+            int remaining = int(timer.elapsed()) - 1000;
+            if (remaining <= 0)
+                break;
+            QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
+            QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+            QTest::qSleep(10);
+        }
         return true;
     }
-
 }
 
 QT_END_NAMESPACE