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>
This commit is contained in:
parent
311f889632
commit
9eb06a2848
@ -29,7 +29,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
\note Since focus is an exclusive property, \a window may loose its focus to another window at
|
\note Since focus is an exclusive property, \a window may loose its focus to another window at
|
||||||
any time - even after the method has returned \c true.
|
any time - even after the method has returned \c true.
|
||||||
|
|
||||||
\sa qWaitForWindowExposed(), QWindow::isActive()
|
\sa qWaitForWindowExposed(), qWaitForWindowFocused(), QWindow::isActive()
|
||||||
*/
|
*/
|
||||||
Q_GUI_EXPORT bool QTest::qWaitForWindowActive(QWindow *window, int timeout)
|
Q_GUI_EXPORT bool QTest::qWaitForWindowActive(QWindow *window, int timeout)
|
||||||
{
|
{
|
||||||
@ -44,6 +44,27 @@ Q_GUI_EXPORT bool QTest::qWaitForWindowActive(QWindow *window, int timeout)
|
|||||||
return QTest::qWaitFor([&]() { return window->isActive(); }, timeout);
|
return QTest::qWaitFor([&]() { return window->isActive(); }, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 6.7
|
||||||
|
|
||||||
|
Returns \c true, if \a window is the focus window within \a timeout milliseconds. Otherwise returns \c false.
|
||||||
|
|
||||||
|
The method is useful in tests that call QWindow::show() and rely on the window
|
||||||
|
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 window from
|
||||||
|
becoming focused.
|
||||||
|
|
||||||
|
\note Since focus is an exclusive property, \a window may loose its focus to another window at
|
||||||
|
any time - even after the method has returned \c true.
|
||||||
|
|
||||||
|
\sa qWaitForWindowExposed(), qWaitForWindowActive(), QGuiApplication::focusWindow()
|
||||||
|
*/
|
||||||
|
Q_GUI_EXPORT bool QTest::qWaitForWindowFocused(QWindow *window, int timeout)
|
||||||
|
{
|
||||||
|
return QTest::qWaitFor([&]() { return qGuiApp->focusWindow() == window; }, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\since 5.0
|
\since 5.0
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ Q_GUI_EXPORT bool qt_handleTouchEventv2(QWindow *w, const QPointingDevice *devic
|
|||||||
namespace QTest {
|
namespace QTest {
|
||||||
|
|
||||||
[[nodiscard]] Q_GUI_EXPORT bool qWaitForWindowActive(QWindow *window, int timeout = 5000);
|
[[nodiscard]] Q_GUI_EXPORT bool qWaitForWindowActive(QWindow *window, int timeout = 5000);
|
||||||
|
[[nodiscard]] Q_GUI_EXPORT bool qWaitForWindowFocused(QWindow *window, int timeout = 5000);
|
||||||
[[nodiscard]] Q_GUI_EXPORT bool qWaitForWindowExposed(QWindow *window, int timeout = 5000);
|
[[nodiscard]] Q_GUI_EXPORT bool qWaitForWindowExposed(QWindow *window, int timeout = 5000);
|
||||||
|
|
||||||
Q_GUI_EXPORT QPointingDevice * createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen,
|
Q_GUI_EXPORT QPointingDevice * createTouchDevice(QInputDevice::DeviceType devType = QInputDevice::DeviceType::TouchScreen,
|
||||||
|
@ -60,6 +60,32 @@ Q_WIDGETS_EXPORT bool QTest::qWaitForWindowActive(QWidget *widget, int timeout)
|
|||||||
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
|
\since 5.0
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ class QWidget;
|
|||||||
namespace QTest {
|
namespace QTest {
|
||||||
|
|
||||||
[[nodiscard]] Q_WIDGETS_EXPORT bool qWaitForWindowActive(QWidget *widget, int timeout = 5000);
|
[[nodiscard]] Q_WIDGETS_EXPORT bool qWaitForWindowActive(QWidget *widget, int timeout = 5000);
|
||||||
|
[[nodiscard]] Q_WIDGETS_EXPORT bool qWaitForWindowFocused(QWidget *widget, int timeout = 5000);
|
||||||
[[nodiscard]] Q_WIDGETS_EXPORT bool qWaitForWindowExposed(QWidget *widget, int timeout = 5000);
|
[[nodiscard]] Q_WIDGETS_EXPORT bool qWaitForWindowExposed(QWidget *widget, int timeout = 5000);
|
||||||
|
|
||||||
class Q_WIDGETS_EXPORT QTouchEventWidgetSequence : public QTouchEventSequence
|
class Q_WIDGETS_EXPORT QTouchEventWidgetSequence : public QTouchEventSequence
|
||||||
|
Loading…
x
Reference in New Issue
Block a user