summaryrefslogtreecommitdiffstats
path: root/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/other/qfocusevent/tst_qfocusevent.cpp')
-rw-r--r--tests/auto/other/qfocusevent/tst_qfocusevent.cpp97
1 files changed, 55 insertions, 42 deletions
diff --git a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
index 0242f8a36e..8297b53ea1 100644
--- a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
+++ b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
@@ -1,33 +1,8 @@
-/****************************************************************************
-**
-** 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>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+#include <QTest>
#include <qapplication.h>
#include <qlineedit.h>
#include <qmenu.h>
@@ -41,12 +16,14 @@
#include <qpa/qplatformintegration.h>
#include <private/qguiapplication_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_FORWARD_DECLARE_CLASS(QWidget)
class FocusLineEdit : public QLineEdit
{
public:
- FocusLineEdit( QWidget* parent = 0, const char* name = 0 ) : QLineEdit(name, parent) {}
+ FocusLineEdit(QWidget *parent = nullptr, const char *name = nullptr ) : QLineEdit(name, parent) {}
int focusInEventReason;
int focusOutEventReason;
bool focusInEventRecieved;
@@ -54,19 +31,19 @@ public:
bool focusOutEventRecieved;
bool focusOutEventLostFocus;
protected:
- virtual void keyPressEvent( QKeyEvent *e )
+ virtual void keyPressEvent( QKeyEvent *e ) override
{
// qDebug( QString("keyPressEvent: %1").arg(e->key()) );
QLineEdit::keyPressEvent( e );
}
- void focusInEvent( QFocusEvent* e )
+ void focusInEvent( QFocusEvent* e ) override
{
QLineEdit::focusInEvent( e );
focusInEventReason = e->reason();
focusInEventGotFocus = e->gotFocus();
focusInEventRecieved = true;
}
- void focusOutEvent( QFocusEvent* e )
+ void focusOutEvent( QFocusEvent* e ) override
{
QLineEdit::focusOutEvent( e );
focusOutEventReason = e->reason();
@@ -107,7 +84,7 @@ void tst_QFocusEvent::initTestCase()
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
QSKIP("QWindow::requestActivate() is not supported on this platform.");
- testFocusWidget = new QWidget( 0 );
+ testFocusWidget = new QWidget( nullptr );
childFocusWidgetOne = new FocusLineEdit( testFocusWidget );
childFocusWidgetOne->setGeometry( 10, 10, 180, 20 );
childFocusWidgetTwo = new FocusLineEdit( testFocusWidget );
@@ -137,7 +114,7 @@ void tst_QFocusEvent::initWidget()
{
// On X11 we have to ensure the event was processed before doing any checking, on Windows
// this is processed straight away.
- QApplication::setActiveWindow(testFocusWidget);
+ QApplicationPrivate::setActiveWindow(testFocusWidget);
childFocusWidgetOne->setFocus(); // The first lineedit should have focus
QVERIFY(QTest::qWaitForWindowActive(testFocusWidget));
QTRY_VERIFY(childFocusWidgetOne->hasFocus());
@@ -322,8 +299,8 @@ void tst_QFocusEvent::checkReason_focusWidget()
QTRY_VERIFY(edit1.hasFocus());
edit2.setFocus();
- QVERIFY(frame1.focusWidget() != 0);
- QVERIFY(frame2.focusWidget() != 0);
+ QVERIFY(frame1.focusWidget() != nullptr);
+ QVERIFY(frame2.focusWidget() != nullptr);
}
void tst_QFocusEvent::checkReason_ActiveWindow()
@@ -335,7 +312,6 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
QVERIFY(QTest::qWaitForWindowExposed(d));
d->activateWindow(); // ### CDE
- QApplication::setActiveWindow(d);
QVERIFY(QTest::qWaitForWindowActive(d));
QTRY_VERIFY(childFocusWidgetOne->focusOutEventRecieved);
@@ -344,7 +320,7 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
#if defined(Q_OS_WIN)
if (QSysInfo::kernelVersion() == "10.0.15063") {
// Activate window of testFocusWidget, focus in that window goes to childFocusWidgetOne
- QWARN("Windows 10 Creators Update (10.0.15063) requires explicit activateWindow()");
+ qWarning("Windows 10 Creators Update (10.0.15063) requires explicit activateWindow()");
testFocusWidget->activateWindow();
}
#endif
@@ -357,9 +333,10 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
d->hide();
if (!QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)
- || !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)) {
+ || !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)
+ || !QGuiApplication::platformName().compare(QLatin1String("cocoa"), Qt::CaseInsensitive)) {
// Activate window of testFocusWidget, focus in that window goes to childFocusWidgetOne
- QWARN("Platforms offscreen and minimal require explicit activateWindow()");
+ qWarning("Platforms offscreen, minimal and macOS require explicit activateWindow()");
testFocusWidget->activateWindow();
}
@@ -369,6 +346,42 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
QVERIFY( childFocusWidgetOne->hasFocus() );
QVERIFY( childFocusWidgetOne->focusInEventRecieved );
QCOMPARE( childFocusWidgetOne->focusInEventReason, (int)Qt::ActiveWindowFocusReason);
+
+ const bool windowActivationReasonFail =
+ QGuiApplication::platformName().toLower() == "minimal";
+
+ struct Window : public QWindow
+ {
+ Qt::FocusReason lastReason = Qt::NoFocusReason;
+ protected:
+ void focusInEvent(QFocusEvent *event) override
+ {
+ lastReason = event->reason();
+ }
+ void focusOutEvent(QFocusEvent *event) override
+ {
+ lastReason = event->reason();
+ }
+ };
+
+ Window window;
+ window.show();
+ window.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ if (windowActivationReasonFail)
+ QEXPECT_FAIL("", "Platform doesn't set window activation reason for QWindow", Continue);
+ QCOMPARE(window.lastReason, Qt::ActiveWindowFocusReason);
+ window.lastReason = Qt::NoFocusReason;
+
+ Window window2;
+ window2.show();
+ window2.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&window2));
+
+ if (windowActivationReasonFail)
+ QEXPECT_FAIL("", "Platform doesn't set window activation reason for QWindow", Continue);
+ QCOMPARE(window.lastReason, Qt::ActiveWindowFocusReason);
}