A splash screen is usually shown during initialization, before the main window is shown. At that point, an application might not spin an event loop. The documentation therefore recommends to run processEvents() periodically, in order to ensure that the splash screen is actually shown. Async window managers (e.g. XCB) might require more than one call to processEvents() for the splash screen to be shown. It can't be guaranteed, that a specific number of calls to processEvents() make the splash screen visible. Calls to processEvents() are not considered good practice in application code. QSplashScreen::finish() uses a copy of QTest::qWaitForWindowExposed(), to automatically close the splash screen, when the main window is shown. => Re-write the static inline waitForWindowExposed to wait for the widget's windowHandle()->isVisible(). That ensures visibility to the window system. The previous version waited for isExposed() to become true. That ensured exposure to the application, but not visibility. => Intercept QEvent::Show and process events, until the splash screen becomes visible. => Remove references to processEvents() as a requirement to show the splash screen from the documentation. It remains a requirement for processing mouse and keyboard events. => Re-activate tst_QSplashScreen and test visibility in the constructor test function. Drive by: - implement switch in event override - factor out paint event handling in a function - update documentation about calling processEvents() to enable mouse handling. Fixes: QTBUG-119225 Pick-to: 6.6 6.5 Change-Id: I07910705246b4e3234e01cc4896f5bc4b2c56772 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 7835f9e60157987b4aafc9b860f925d775151b7c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This directory contains autotests and benchmarks based on Qt Test. In order to run the autotests reliably, you need to configure a desktop to match the test environment that these tests are written for. Linux X11: * The user must be logged in to an active desktop; you can't run the autotests without a valid DISPLAY that allows X11 connections. * The tests are run against a KDE3 or KDE4 desktop. * Window manager uses "click to focus", and not "focus follows mouse". Many tests move the mouse cursor around and expect this to not affect focus and activation. * Disable "click to activate", i.e., when a window is opened, the window manager should automatically activate it (give it input focus) and not wait for the user to click the window.