diff options
author | Paul Olav Tvete <paul.tvete@qt.io> | 2021-09-27 10:14:42 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@qt.io> | 2021-09-30 20:51:52 +0200 |
commit | b869d9b768a39c9476c2b9f162d611d3dc397051 (patch) | |
tree | c61e8ac18cdcdd5588706f15c80164174ef9bd45 /tests | |
parent | b1b75326f4779c5a8d4ce65626ef8a80079ff994 (diff) |
Add manual test for window activation
This is a manual test of QWindow::requestActivate() and how it
interacts with implicit activation from the window system. Written in
order to test QtWayland, but hopefully also useful for testing on other
platforms.
Task-number: QTBUG-91542
Change-Id: Id18dc6d146d213a7c730cff343d9fc25f6c42514
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/manual/windowactivation/main.cpp | 150 | ||||
-rw-r--r-- | tests/manual/windowactivation/windowactivation.pro | 6 |
2 files changed, 156 insertions, 0 deletions
diff --git a/tests/manual/windowactivation/main.cpp b/tests/manual/windowactivation/main.cpp new file mode 100644 index 0000000000..94f4afdde8 --- /dev/null +++ b/tests/manual/windowactivation/main.cpp @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2021 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 <QtWidgets> + +class RasterWindow : public QRasterWindow +{ + Q_OBJECT + +public: + RasterWindow(const QColor &color) + : m_color(color) + { + } + +protected: + void paintEvent(QPaintEvent *) + { + QPainter p(this); + p.fillRect(QRect(0, 0, width(), height()), m_color); + } + +private: + QColor m_color; +}; + +class ActivateButton : public QPushButton +{ + Q_OBJECT +public: + ActivateButton(const QString &text, QWindow *window) + : QPushButton(text) + { + connect(this, &QPushButton::clicked, window, [window](){ + window->requestActivate(); + }); + connect(window, &QWindow::activeChanged, this, [this, window](){ + setPalette(window->isActive() ? QPalette(Qt::red) : qApp->palette()); + }); + } +}; + +class Controller : public QWidget +{ + Q_OBJECT +public: + Controller() { + setWindowTitle("Controller window"); + auto *ed1 = new QTextEdit; + ed1->setWindowTitle("Editor 1"); + ed1->show(); + auto *ed2 = new QTextEdit; + ed2->setWindowTitle("Editor 2"); + ed2->show(); + + auto *win1 = new RasterWindow(Qt::red); + win1->setTitle("Window 1"); + win1->resize(300, 200); + win1->show(); + + auto *win2 = new RasterWindow(Qt::green); + win2->setTitle("Window 2"); + win2->resize(300, 200); + win2->show(); + + auto *noFocus = new RasterWindow(Qt::black); + noFocus->setTitle("No focus"); + noFocus->resize(300, 200); + noFocus->setFlags(noFocus->flags() | Qt::WindowDoesNotAcceptFocus); + noFocus->show(); + + lab = new QLabel(this); + lab->move(5, 5); + connect(qApp, &QGuiApplication::focusObjectChanged, this, &Controller::updateInfo); + + auto *topLayout = new QVBoxLayout(this); + topLayout->addWidget(lab); + + topLayout->addWidget(new ActivateButton("Activate editor 1", ed1->windowHandle())); + topLayout->addWidget(new ActivateButton("Activate editor 2", ed2->windowHandle())); + topLayout->addWidget(new ActivateButton("Activate window 1", win1)); + topLayout->addWidget(new ActivateButton("Activate window 2", win2)); + + topLayout->addStretch(); + QPushButton *quitButton = new QPushButton("Quit"); + topLayout->addWidget(quitButton); + connect(quitButton, &QPushButton::clicked, this, [](){ + QApplication::quit(); + }); + + resize(800, 600); + } + +public slots: + void updateInfo() { + QString outString; + QWindow *fWin = QGuiApplication::focusWindow(); + QString windowTitle = fWin ? fWin->title() : QString{}; + QWidget *aWdg = QApplication::activeWindow(); + QString widgetTitle = aWdg ? aWdg->windowTitle() : QString{}; + QDebug(&outString) << "focus window" << fWin << windowTitle + << "\nfocus object" << QGuiApplication::focusObject() + << "\nfocus widget" << QApplication::focusWidget() + << "\nactive widget" << aWdg << widgetTitle; + lab->setText(outString); + } + +private: + QLabel *lab = nullptr; +}; + + + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + Controller controller; + controller.show(); + controller.updateInfo(); + + return app.exec(); +} + +#include "main.moc" diff --git a/tests/manual/windowactivation/windowactivation.pro b/tests/manual/windowactivation/windowactivation.pro new file mode 100644 index 0000000000..c7f14500b4 --- /dev/null +++ b/tests/manual/windowactivation/windowactivation.pro @@ -0,0 +1,6 @@ +QT += widgets +TEMPLATE = app +TARGET = windowactivation +INCLUDEPATH += . + +SOURCES += main.cpp |