summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2021-09-27 10:14:42 +0200
committerPaul Olav Tvete <paul.tvete@qt.io>2021-09-30 20:51:52 +0200
commitb869d9b768a39c9476c2b9f162d611d3dc397051 (patch)
treec61e8ac18cdcdd5588706f15c80164174ef9bd45 /tests
parentb1b75326f4779c5a8d4ce65626ef8a80079ff994 (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.cpp150
-rw-r--r--tests/manual/windowactivation/windowactivation.pro6
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