2020-08-13 21:08:54 +02:00
|
|
|
/*
|
|
|
|
SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org>
|
|
|
|
|
|
|
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
|
|
|
*/
|
2016-07-15 09:28:16 +02:00
|
|
|
|
|
|
|
#include "dialogstatetest.h"
|
2019-12-14 16:58:05 +01:00
|
|
|
#include <QSignalSpy>
|
2016-07-15 09:28:16 +02:00
|
|
|
#include <KWindowSystem>
|
|
|
|
|
|
|
|
void DialogStateTest::initTestCase()
|
|
|
|
{
|
|
|
|
m_dialog = new PlasmaQuick::Dialog;
|
|
|
|
m_dialog->setLocation(Plasma::Types::TopEdge);
|
|
|
|
m_dialog->setGeometry(0, 0, 50, 50);
|
|
|
|
|
|
|
|
qRegisterMetaType<WId>("WId");
|
|
|
|
}
|
|
|
|
|
|
|
|
void DialogStateTest::cleanupTestCase()
|
|
|
|
{
|
|
|
|
delete m_dialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DialogStateTest::windowState()
|
|
|
|
{
|
2019-08-30 17:54:04 +02:00
|
|
|
if (QGuiApplication::platformName() == "wayland") {
|
|
|
|
QEXPECT_FAIL("windowState", "KWindowSystem::windowAdded doesn't work on wayland", Continue);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-07-15 09:28:16 +02:00
|
|
|
for (int i = 0; i <= 100; ++i) {
|
|
|
|
m_dialog->show();
|
|
|
|
|
|
|
|
QSignalSpy windowAddedSpy(KWindowSystem::self(), &KWindowSystem::windowAdded);
|
|
|
|
QVERIFY(windowAddedSpy.isValid());
|
|
|
|
QVERIFY(windowAddedSpy.wait());
|
|
|
|
|
|
|
|
bool windowAdded = false;
|
|
|
|
|
|
|
|
while (windowAddedSpy.count()) {
|
|
|
|
const QVariantList &arguments = windowAddedSpy.takeFirst();
|
|
|
|
|
|
|
|
if (arguments.at(0).value<WId>() == m_dialog->winId()) {
|
|
|
|
windowAdded = true;
|
|
|
|
break;
|
|
|
|
}
|
2018-08-10 12:07:23 +02:00
|
|
|
if (windowAddedSpy.isEmpty()) {
|
|
|
|
QVERIFY(windowAddedSpy.wait());
|
|
|
|
}
|
2016-07-15 09:28:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
QVERIFY(windowAdded);
|
|
|
|
|
|
|
|
QVERIFY(verifyState(m_dialog));
|
|
|
|
|
|
|
|
m_dialog->hide();
|
|
|
|
|
|
|
|
QSignalSpy windowRemovedSpy(KWindowSystem::self(), &KWindowSystem::windowRemoved);
|
|
|
|
QVERIFY(windowRemovedSpy.isValid());
|
|
|
|
QVERIFY(windowRemovedSpy.wait());
|
|
|
|
|
|
|
|
bool windowRemoved = false;
|
|
|
|
|
|
|
|
while (windowRemovedSpy.count()) {
|
|
|
|
const QVariantList &arguments = windowRemovedSpy.takeFirst();
|
|
|
|
|
|
|
|
if (arguments.at(0).value<WId>() == m_dialog->winId()) {
|
|
|
|
windowRemoved = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
QVERIFY(windowRemoved);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool DialogStateTest::verifyState(PlasmaQuick::Dialog *dialog) const
|
|
|
|
{
|
|
|
|
KWindowInfo info(dialog->winId(), NET::WMState);
|
|
|
|
|
|
|
|
if (!(info.state() & NET::SkipTaskbar)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!info.hasState(NET::SkipPager)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
QTEST_MAIN(DialogStateTest)
|