[autotests] Extend PlasmaSurface to verify position of OSD windows
This adds a new test case which maps an OSD window and verifies that it's positioned correctly. Then an additional screen is added which should not affect the position, but as the test case shows: it does affect the position. CCBUG: 366696
This commit is contained in:
parent
a98a1b1376
commit
f99a456f33
1 changed files with 37 additions and 0 deletions
|
@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "kwin_wayland_test.h"
|
#include "kwin_wayland_test.h"
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "shell_client.h"
|
#include "shell_client.h"
|
||||||
|
#include "screens.h"
|
||||||
#include "wayland_server.h"
|
#include "wayland_server.h"
|
||||||
#include "workspace.h"
|
#include "workspace.h"
|
||||||
#include <KWayland/Client/connection_thread.h>
|
#include <KWayland/Client/connection_thread.h>
|
||||||
|
@ -50,6 +51,7 @@ private Q_SLOTS:
|
||||||
void testAcceptsFocus();
|
void testAcceptsFocus();
|
||||||
|
|
||||||
void testDesktopIsOpaque();
|
void testDesktopIsOpaque();
|
||||||
|
void testOSDPlacement();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ConnectionThread *m_connection = nullptr;
|
ConnectionThread *m_connection = nullptr;
|
||||||
|
@ -199,5 +201,40 @@ void PlasmaSurfaceTest::testDesktopIsOpaque()
|
||||||
QCOMPARE(c->depth(), 24);
|
QCOMPARE(c->depth(), 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlasmaSurfaceTest::testOSDPlacement()
|
||||||
|
{
|
||||||
|
QScopedPointer<Surface> surface(Test::createSurface());
|
||||||
|
QVERIFY(!surface.isNull());
|
||||||
|
QScopedPointer<ShellSurface> shellSurface(Test::createShellSurface(surface.data()));
|
||||||
|
QVERIFY(!shellSurface.isNull());
|
||||||
|
QScopedPointer<PlasmaShellSurface> plasmaSurface(m_plasmaShell->createSurface(surface.data()));
|
||||||
|
QVERIFY(!plasmaSurface.isNull());
|
||||||
|
plasmaSurface->setRole(PlasmaShellSurface::Role::OnScreenDisplay);
|
||||||
|
|
||||||
|
// now render and map the window
|
||||||
|
auto c = Test::renderAndWaitForShown(surface.data(), QSize(100, 50), Qt::blue);
|
||||||
|
|
||||||
|
QVERIFY(c);
|
||||||
|
QCOMPARE(c->windowType(), NET::OnScreenDisplay);
|
||||||
|
QVERIFY(c->isOnScreenDisplay());
|
||||||
|
QCOMPARE(c->geometry(), QRect(590, 649, 100, 50));
|
||||||
|
|
||||||
|
// change the screen size
|
||||||
|
QSignalSpy screensChangedSpy(screens(), &Screens::changed);
|
||||||
|
QVERIFY(screensChangedSpy.isValid());
|
||||||
|
const QVector<QRect> geometries{QRect(0, 0, 1280, 1024), QRect(1280, 0, 1280, 1024)};
|
||||||
|
QMetaObject::invokeMethod(kwinApp()->platform(), "outputGeometriesChanged",
|
||||||
|
Qt::DirectConnection,
|
||||||
|
Q_ARG(QVector<QRect>, geometries));
|
||||||
|
QVERIFY(screensChangedSpy.wait());
|
||||||
|
QCOMPARE(screensChangedSpy.count(), 1);
|
||||||
|
QCOMPARE(screens()->count(), 2);
|
||||||
|
QCOMPARE(screens()->geometry(0), geometries.at(0));
|
||||||
|
QCOMPARE(screens()->geometry(1), geometries.at(1));
|
||||||
|
|
||||||
|
QEXPECT_FAIL("", "Geometry should not change due to a screen being added", Continue);
|
||||||
|
QCOMPARE(c->geometry(), QRect(590, 649, 100, 50));
|
||||||
|
}
|
||||||
|
|
||||||
WAYLANDTEST_MAIN(PlasmaSurfaceTest)
|
WAYLANDTEST_MAIN(PlasmaSurfaceTest)
|
||||||
#include "plasma_surface_test.moc"
|
#include "plasma_surface_test.moc"
|
||||||
|
|
Loading…
Reference in a new issue