autotests: Fix a race condition in X11WindowTest
NETWinInfo queries the window state and setState() will do nothing if the proposed new state matches the cached server side state. On the other hand, given how the test is structured, there can be pending fullscreen changes on the kwin side that are yet to be sent to the X server when the NETWinInfo object is created. This change fixes that race condition by adding an explicit Xcb::sync().
This commit is contained in:
parent
75075fdb89
commit
53b61ce5d7
1 changed files with 13 additions and 8 deletions
|
@ -2168,15 +2168,20 @@ void X11WindowTest::testFullscreenLayerWithActiveWaylandWindow()
|
||||||
QVERIFY(window->isFullScreen());
|
QVERIFY(window->isFullScreen());
|
||||||
workspace()->slotWindowFullScreen();
|
workspace()->slotWindowFullScreen();
|
||||||
QVERIFY(!window->isFullScreen());
|
QVERIFY(!window->isFullScreen());
|
||||||
|
|
||||||
// and fullscreen through X API
|
// and fullscreen through X API
|
||||||
NETWinInfo info(c.get(), windowId, kwinApp()->x11RootWindow(), NET::Properties(), NET::Properties2());
|
{
|
||||||
info.setState(NET::FullScreen, NET::FullScreen);
|
Xcb::sync(); // sync so NETWinInfo fetches the correct current state
|
||||||
NETRootInfo rootInfo(c.get(), NET::Properties());
|
|
||||||
rootInfo.setActiveWindow(windowId, NET::FromApplication, XCB_CURRENT_TIME, XCB_WINDOW_NONE);
|
NETWinInfo info(c.get(), windowId, kwinApp()->x11RootWindow(), NET::Properties(), NET::Properties2());
|
||||||
xcb_flush(c.get());
|
info.setState(NET::FullScreen, NET::FullScreen);
|
||||||
QTRY_VERIFY(window->isFullScreen());
|
NETRootInfo rootInfo(c.get(), NET::Properties());
|
||||||
QCOMPARE(workspace()->stackingOrder().last(), window);
|
rootInfo.setActiveWindow(windowId, NET::FromApplication, XCB_CURRENT_TIME, XCB_WINDOW_NONE);
|
||||||
QCOMPARE(workspace()->stackingOrder().last(), window);
|
xcb_flush(c.get());
|
||||||
|
QTRY_VERIFY(window->isFullScreen());
|
||||||
|
QCOMPARE(workspace()->stackingOrder().last(), window);
|
||||||
|
QCOMPARE(workspace()->stackingOrder().last(), window);
|
||||||
|
}
|
||||||
|
|
||||||
// activate wayland window again
|
// activate wayland window again
|
||||||
workspace()->activateWindow(waylandWindow);
|
workspace()->activateWindow(waylandWindow);
|
||||||
|
|
Loading…
Reference in a new issue