2016-07-15 09:28:16 +02:00
|
|
|
/********************************************************************************
|
|
|
|
* Copyright 2016 Eike Hein <hein@kde.org> *
|
|
|
|
* *
|
|
|
|
* This library is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU Library General Public *
|
|
|
|
* License as published by the Free Software Foundation; either *
|
|
|
|
* version 2 of the License, or (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This library is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
|
|
|
|
* Library General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU Library General Public License *
|
|
|
|
* along with this library; see the file COPYING.LIB. If not, write to *
|
|
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *
|
|
|
|
* Boston, MA 02110-1301, USA. *
|
|
|
|
*********************************************************************************/
|
|
|
|
|
|
|
|
#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)
|