[platforms/virtual] Create output devices

Summary:
Create output devices in virtual backend. For that the setVirtualOutputs call
can only come after the Wayland server has been initiliazied such that the
display exists to create the output and output device interfaces. Tests have
been adjusted for that.

Test Plan:
```
98% tests passed, 3 tests failed out of 148

Total Test time (real) = 362.97 sec

The following tests FAILED:
         33 - kwin-testInternalWindow (Failed)
         39 - kwin-testPointerInput (Failed)
        101 - kwin-testMoveResize (Failed)
```
Failing of these tests looks unrelated to the change.

Reviewers: #kwin

Subscribers: kwin

Tags: #kwin

Maniphest Tasks: T11459

Differential Revision: https://phabricator.kde.org/D23477
This commit is contained in:
Roman Gilg 2019-08-26 23:16:53 +02:00
parent f013a4369c
commit cd6b69a4d2
33 changed files with 55 additions and 40 deletions

View file

@ -64,8 +64,8 @@ void ActivitiesTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->setUseKActivities(true); kwinApp()->setUseKActivities(true);
kwinApp()->start(); kwinApp()->start();

View file

@ -49,8 +49,8 @@ void ColorCorrectNightColorTest::initTestCase()
{ {
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));

View file

@ -62,8 +62,8 @@ void DebugConsoleTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -138,8 +138,8 @@ void DecorationInputTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// change some options // change some options
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);

View file

@ -58,8 +58,8 @@ void X11DesktopWindowTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -59,8 +59,8 @@ void DontCrashAuroraeDestroyDecoTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
config->group("org.kde.kdecoration2").writeEntry("library", "org.kde.kwin.aurorae"); config->group("org.kde.kdecoration2").writeEntry("library", "org.kde.kwin.aurorae");

View file

@ -55,8 +55,8 @@ void DontCrashEmptyDecorationTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// this test needs to enforce OpenGL compositing to get into the crashy condition // this test needs to enforce OpenGL compositing to get into the crashy condition
qputenv("KWIN_COMPOSE", QByteArrayLiteral("O2")); qputenv("KWIN_COMPOSE", QByteArrayLiteral("O2"));

View file

@ -62,8 +62,8 @@ void DontCrashNoBorder::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
config->group("org.kde.kdecoration2").writeEntry("NoPlugin", true); config->group("org.kde.kdecoration2").writeEntry("NoPlugin", true);

View file

@ -64,8 +64,8 @@ void DontCrashReinitializeCompositorTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
KConfigGroup plugins(config, QStringLiteral("Plugins")); KConfigGroup plugins(config, QStringLiteral("Plugins"));

View file

@ -62,8 +62,8 @@ void TestDontCrashUseractionsMenu::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// force style to breeze as that's the one which triggered the crash // force style to breeze as that's the one which triggered the crash
QVERIFY(kwinApp()->setStyle(QStringLiteral("breeze"))); QVERIFY(kwinApp()->setStyle(QStringLiteral("breeze")));

View file

@ -68,8 +68,8 @@ void InputStackingOrderTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -189,8 +189,8 @@ void InternalWindowTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));
kwinApp()->start(); kwinApp()->start();

View file

@ -189,8 +189,8 @@ void LockScreenTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
qputenv("KWIN_COMPOSE", QByteArrayLiteral("O2")); qputenv("KWIN_COMPOSE", QByteArrayLiteral("O2"));
kwinApp()->start(); kwinApp()->start();

View file

@ -69,8 +69,8 @@ void TestMaximized::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));

View file

@ -90,8 +90,8 @@ void TestPlacement::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));

View file

@ -75,8 +75,8 @@ void PlasmaWindowTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -75,8 +75,8 @@ void TestPointerConstraints::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// set custom config which disables the OnScreenNotification // set custom config which disables the OnScreenNotification
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);

View file

@ -147,8 +147,8 @@ void PointerInputTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig)); kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));

View file

@ -102,8 +102,8 @@ void QuickTilingTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// set custom config which disables the Outline // set custom config which disables the Outline
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);

View file

@ -57,8 +57,8 @@ void ScreenEdgeClientShowTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// set custom config which disable touch edge // set custom config which disable touch edge
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);

View file

@ -54,8 +54,8 @@ void ShadeTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -230,8 +230,8 @@ void TestShellClientRules::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -133,8 +133,8 @@ void TestShellClient::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -74,8 +74,8 @@ void StrutsTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// set custom config which disables the Outline // set custom config which disables the Outline
KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); KSharedConfig::Ptr config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);

View file

@ -63,8 +63,8 @@ void TouchInputTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -79,8 +79,8 @@ void TransientPlacementTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -58,8 +58,8 @@ void WindowRuleTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -69,8 +69,8 @@ void TestWindowSelection::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
qputenv("XKB_DEFAULT_RULES", "evdev"); qputenv("XKB_DEFAULT_RULES", "evdev");
kwinApp()->start(); kwinApp()->start();

View file

@ -57,8 +57,8 @@ void XWaylandInputTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -58,10 +58,10 @@ void XwaylandSelectionsTest::initTestCase()
QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated); QSignalSpy workspaceCreatedSpy(kwinApp(), &Application::workspaceCreated);
QVERIFY(workspaceCreatedSpy.isValid()); QVERIFY(workspaceCreatedSpy.isValid());
kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024)); kwinApp()->platform()->setInitialWindowSize(QSize(1280, 1024));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
// QSignalSpy clipboardSyncDevicedCreated{waylandServer(), &WaylandServer::xclipboardSyncDataDeviceCreated}; // QSignalSpy clipboardSyncDevicedCreated{waylandServer(), &WaylandServer::xclipboardSyncDataDeviceCreated};
// QVERIFY(clipboardSyncDevicedCreated.isValid()); // QVERIFY(clipboardSyncDevicedCreated.isValid());
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit())); QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
QMetaObject::invokeMethod(kwinApp()->platform(), "setVirtualOutputs", Qt::DirectConnection, Q_ARG(int, 2));
kwinApp()->start(); kwinApp()->start();
QVERIFY(workspaceCreatedSpy.wait()); QVERIFY(workspaceCreatedSpy.wait());

View file

@ -49,6 +49,7 @@ VirtualBackend::VirtualBackend(QObject *parent)
} }
setSupportsPointerWarping(true); setSupportsPointerWarping(true);
setSupportsGammaControl(true); setSupportsGammaControl(true);
handleOutputs();
} }
VirtualBackend::~VirtualBackend() VirtualBackend::~VirtualBackend()
@ -65,12 +66,11 @@ void VirtualBackend::init()
*/ */
if (!m_outputs.size()) { if (!m_outputs.size()) {
VirtualOutput *dummyOutput = new VirtualOutput(this); VirtualOutput *dummyOutput = new VirtualOutput(this);
dummyOutput->setGeometry(QRect(QPoint(0, 0), initialWindowSize())); dummyOutput->init(QPoint(0, 0), initialWindowSize());
m_outputs << dummyOutput ; m_outputs << dummyOutput ;
m_enabledOutputs << dummyOutput ; m_enabledOutputs << dummyOutput ;
} }
setSoftWareCursor(true); setSoftWareCursor(true);
setReady(true); setReady(true);
waylandServer()->seat()->setHasPointer(true); waylandServer()->seat()->setHasPointer(true);
@ -126,15 +126,16 @@ void VirtualBackend::setVirtualOutputs(int count, QVector<QRect> geometries, QVe
int sumWidth = 0; int sumWidth = 0;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
VirtualOutput *vo = new VirtualOutput(this); VirtualOutput *vo = new VirtualOutput(this);
if (geometries.size()) {
const QRect geo = geometries.at(i);
vo->init(geo.topLeft(), geo.size());
} else {
vo->init(QPoint(sumWidth, 0), initialWindowSize());
sumWidth += initialWindowSize().width();
}
if (scales.size()) { if (scales.size()) {
vo->setScale(scales.at(i)); vo->setScale(scales.at(i));
} }
if (geometries.size()) {
vo->setGeometry(geometries.at(i));
} else if (!vo->geometry().isValid()) {
vo->setGeometry(QRect(QPoint(sumWidth, 0), initialWindowSize()));
sumWidth += initialWindowSize().width();
}
m_outputs[i] = m_enabledOutputs[i] = vo; m_outputs[i] = m_enabledOutputs[i] = vo;
} }

View file

@ -26,14 +26,26 @@ VirtualOutput::VirtualOutput(QObject *parent)
: AbstractWaylandOutput() : AbstractWaylandOutput()
{ {
Q_UNUSED(parent); Q_UNUSED(parent);
setScale(1.);
} }
VirtualOutput::~VirtualOutput() VirtualOutput::~VirtualOutput()
{ {
} }
void VirtualOutput::init(const QPoint &logicalPosition, const QSize &pixelSize)
{
KWayland::Server::OutputDeviceInterface::Mode mode;
mode.id = 0;
mode.size = pixelSize;
mode.flags = KWayland::Server::OutputDeviceInterface::ModeFlag::Current;
mode.refreshRate = 60000; // TODO
AbstractWaylandOutput::initWaylandOutputDevice("model_TODO", "manufacturer_TODO",
"UUID_TODO", { mode });
setEnabled(true);
setGeometry(QRect(logicalPosition, pixelSize));
setScale(1.);
}
QSize VirtualOutput::pixelSize() const QSize VirtualOutput::pixelSize() const
{ {
return m_pixelSize; return m_pixelSize;

View file

@ -37,6 +37,8 @@ public:
VirtualOutput(QObject *parent = nullptr); VirtualOutput(QObject *parent = nullptr);
~VirtualOutput() override; ~VirtualOutput() override;
void init(const QPoint &logicalPosition, const QSize &pixelSize);
QSize pixelSize() const override; QSize pixelSize() const override;
void setGeometry(const QRect &geo); void setGeometry(const QRect &geo);