diff options
author | Shawn Rutledge <shawn.rutledge@nokia.com> | 2012-09-05 14:22:31 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-21 22:03:53 +0200 |
commit | f4c1ae672652bc908ea1e0a8e353557b392940d7 (patch) | |
tree | 183c22f3ca46d45c1ecacf2ba6aca7e622fe2dbc /tests/manual/qscreen/main.cpp | |
parent | 945d17b6e92605de158839c488ebcafc19ac9aa6 (diff) |
Added manual test for QScreen properties
Shows property values in fields which auto-update when the properties
change.
Change-Id: Ib97566a74cb8d0fff5f85bf97783e89dfb07481f
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'tests/manual/qscreen/main.cpp')
-rw-r--r-- | tests/manual/qscreen/main.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/tests/manual/qscreen/main.cpp b/tests/manual/qscreen/main.cpp new file mode 100644 index 0000000000..2a95cbc1e9 --- /dev/null +++ b/tests/manual/qscreen/main.cpp @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "propertywatcher.h" +#include <QApplication> +#include <QScreen> +#include <QWindow> +#include <QDebug> +#include <QFormLayout> +#include <QLineEdit> + +int i = 0; + +void updateSiblings(PropertyWatcher* w) +{ + QLineEdit *siblingsField = w->findChild<QLineEdit *>("siblings"); + QScreen* screen = (QScreen*)w->subject(); + QStringList siblingsList; + foreach (QScreen *sibling, screen->virtualSiblings()) + siblingsList << sibling->name(); + siblingsField->setText(siblingsList.join(", ")); +} + +void screenAdded(QScreen* screen) +{ + screen->setOrientationUpdateMask((Qt::ScreenOrientations)0x0F); + qDebug("\nscreenAdded %s siblings %d first %s", qPrintable(screen->name()), + screen->virtualSiblings().count(), qPrintable(screen->virtualSiblings().first()->name())); + PropertyWatcher *w = new PropertyWatcher(screen, QString::number(i++)); + QLineEdit *siblingsField = new QLineEdit(); + siblingsField->setObjectName("siblings"); + siblingsField->setReadOnly(true); + w->layout()->insertRow(0, "virtualSiblings", siblingsField); + updateSiblings(w); + + // This doesn't work. If the multiple screens are part of + // a virtual desktop (i.e. they are virtual siblings), then + // setScreen has no effect, and we need the code below to + // change the window geometry. If on the other hand the + // screens are really separate, so that windows are not + // portable between them, XCreateWindow needs to have not just + // a different root Window but also a different Display, in order to + // put the window on the other screen. That would require a + // different QXcbConnection. So this setScreen call doesn't seem useful. + //w->windowHandle()->setScreen(screen); + + // But this works as long as the screens are all virtual siblings + w->show(); + QRect geom = w->geometry(); + geom.moveCenter(screen->geometry().center()); + w->move(geom.topLeft()); + + // workaround for the fact that virtualSiblings is not a property, + // thus there is no change notification: + // allow the user to update the field manually + QObject::connect(w, &PropertyWatcher::updatedAllFields, &updateSiblings); +} + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QList<QScreen *> screens = QGuiApplication::screens(); + foreach (QScreen *screen, screens) + screenAdded(screen); + QObject::connect((const QGuiApplication*)QGuiApplication::instance(), &QGuiApplication::screenAdded, &screenAdded); + return a.exec(); +} |