blob: a29e8408a30795dc24c667e7ed6e69240f3a772a [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtTest/QtTest>
#include <QtWidgets/QDesktopWidget>
#include <QtGui/QWindow>
#include <QDebug>
// the complete class is deprecated
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
class tst_QDesktopWidget : public QObject
{
Q_OBJECT
private slots:
void cleanup();
#if QT_DEPRECATED_SINCE(5, 11)
void numScreens();
void primaryScreen();
void screenNumberForQPoint();
#endif
void screenNumberForQWidget();
void availableGeometry();
void screenGeometry();
void topLevels();
};
void tst_QDesktopWidget::cleanup()
{
QVERIFY(QApplication::topLevelWidgets().isEmpty());
}
#if QT_DEPRECATED_SINCE(5, 11)
void tst_QDesktopWidget::numScreens()
{
QDesktopWidget desktop;
QVERIFY(desktop.numScreens() > 0);
}
void tst_QDesktopWidget::primaryScreen()
{
QDesktopWidget desktop;
QVERIFY(desktop.primaryScreen() >= 0);
QVERIFY(desktop.primaryScreen() < desktop.numScreens());
}
#endif
void tst_QDesktopWidget::availableGeometry()
{
QDesktopWidget desktop;
QTest::ignoreMessage(QtWarningMsg, "QDesktopWidget::availableGeometry(): Attempt "
"to get the available geometry of a null widget");
QRect r = desktop.availableGeometry(nullptr);
QVERIFY(r.isNull());
#if QT_DEPRECATED_SINCE(5, 11)
QRect total;
QRect available;
for (int i = 0; i < desktop.screenCount(); ++i) {
total = desktop.screenGeometry(i);
available = desktop.availableGeometry(i);
QVERIFY(total.contains(available));
}
total = desktop.screenGeometry();
available = desktop.availableGeometry();
QVERIFY(total.contains(available));
QCOMPARE(desktop.availableGeometry(desktop.primaryScreen()), available);
QCOMPARE(desktop.screenGeometry(desktop.primaryScreen()), total);
#endif
}
void tst_QDesktopWidget::screenNumberForQWidget()
{
QDesktopWidget desktop;
QCOMPARE(desktop.screenNumber(nullptr), 0);
QWidget widget;
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QVERIFY(widget.isVisible());
int widgetScreen = desktop.screenNumber(&widget);
QVERIFY(widgetScreen > -1);
QVERIFY(widgetScreen < QGuiApplication::screens().size());
}
#if QT_DEPRECATED_SINCE(5, 11)
void tst_QDesktopWidget::screenNumberForQPoint()
{
// make sure QDesktopWidget::screenNumber(QPoint) returns the correct screen
QDesktopWidget *desktopWidget = QApplication::desktop();
QRect allScreens;
for (int i = 0; i < desktopWidget->numScreens(); ++i) {
QRect screenGeometry = desktopWidget->screenGeometry(i);
QCOMPARE(desktopWidget->screenNumber(screenGeometry.center()), i);
allScreens |= screenGeometry;
}
// make sure QDesktopWidget::screenNumber(QPoint) returns a valid screen for points that aren't on any screen
int screen;
screen = desktopWidget->screenNumber(allScreens.topLeft() - QPoint(1, 1));
QVERIFY(screen >= 0 && screen < desktopWidget->numScreens());
screen = desktopWidget->screenNumber(allScreens.topRight() + QPoint(1, 1));
QVERIFY(screen >= 0 && screen < desktopWidget->numScreens());
screen = desktopWidget->screenNumber(allScreens.bottomLeft() - QPoint(1, 1));
QVERIFY(screen >= 0 && screen < desktopWidget->numScreens());
screen = desktopWidget->screenNumber(allScreens.bottomRight() + QPoint(1, 1));
QVERIFY(screen >= 0 && screen < desktopWidget->numScreens());
}
#endif
void tst_QDesktopWidget::screenGeometry()
{
QDesktopWidget *desktopWidget = QApplication::desktop();
QTest::ignoreMessage(QtWarningMsg, "QDesktopWidget::screenGeometry(): Attempt "
"to get the screen geometry of a null widget");
QRect r = desktopWidget->screenGeometry(nullptr);
QVERIFY(r.isNull());
QWidget widget;
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
r = desktopWidget->screenGeometry(&widget);
#if QT_DEPRECATED_SINCE(5, 11)
QRect total;
QRect available;
for (int i = 0; i < desktopWidget->screenCount(); ++i) {
total = desktopWidget->screenGeometry(i);
available = desktopWidget->availableGeometry(i);
}
#endif
}
void tst_QDesktopWidget::topLevels()
{
// Desktop widgets/windows should not be listed as top-levels.
int topLevelDesktopWidgets = 0;
int topLevelDesktopWindows = 0;
foreach (const QWidget *w, QApplication::topLevelWidgets())
if (w->windowType() == Qt::Desktop)
topLevelDesktopWidgets++;
foreach (const QWindow *w, QGuiApplication::topLevelWindows())
if (w->type() == Qt::Desktop)
topLevelDesktopWindows++;
QCOMPARE(topLevelDesktopWidgets, 0);
QCOMPARE(topLevelDesktopWindows, 0);
}
QT_WARNING_POP
QTEST_MAIN(tst_QDesktopWidget)
#include "tst_qdesktopwidget.moc"