diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2023-12-08 14:44:10 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2023-12-09 01:37:44 +0100 |
commit | 9eb06a2848257d054447777c645231afa87429c2 (patch) | |
tree | 41ebb71878e2dd30f9b577da3d345b05d20ab415 /src/widgets/kernel/qtestsupport_widgets.cpp | |
parent | 311f8896322bcd39d33369c8311a8c89ccdad449 (diff) |
Add QTest::qWaitForWindowFocused for checking focus window
As opposed to QTest::qWaitForWindowActive, which checks if the window
is active, which is not a guarantee that the window has focus.
Task-number: QTBUG-119287
Change-Id: I9fe65b0474095389f6518ebaaf07c71143b6f459
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/widgets/kernel/qtestsupport_widgets.cpp')
-rw-r--r-- | src/widgets/kernel/qtestsupport_widgets.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/widgets/kernel/qtestsupport_widgets.cpp b/src/widgets/kernel/qtestsupport_widgets.cpp index 3aa13b2416..226c56140d 100644 --- a/src/widgets/kernel/qtestsupport_widgets.cpp +++ b/src/widgets/kernel/qtestsupport_widgets.cpp @@ -60,6 +60,32 @@ Q_WIDGETS_EXPORT bool QTest::qWaitForWindowActive(QWidget *widget, int timeout) timeout); } + +/*! + \since 6.7 + + Returns \c true, if \a widget is the focus window within \a timeout milliseconds. Otherwise returns \c false. + + The method is useful in tests that call QWidget::show() and rely on the widget + having focus (for receiving keyboard events e.g.) before proceeding. + + \note The method will time out and return \c false if another window prevents \a widget from + becoming focused. + + \note Since focus is an exclusive property, \a widget may loose its focus to another window at + any time - even after the method has returned \c true. + + \sa qWaitForWindowExposed(), qWaitForWindowActive(), QGuiApplication::focusWindow() +*/ +Q_WIDGETS_EXPORT bool QTest::qWaitForWindowFocused(QWidget *widget, int timeout) +{ + return qWaitForWidgetWindow([&]() { + return widget->window()->windowHandle(); + }, [&](QWindow *window) { + return qGuiApp->focusWindow() == window; + }, timeout); +} + /*! \since 5.0 |