summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2014-06-18 14:53:53 +0200
committerFriedemann Kleint <Friedemann.Kleint@digia.com>2014-07-30 06:29:00 +0200
commit0240110c58f0d6b694445f6685f0f77b14b769d8 (patch)
treead2268b065362ae5e3f95fde52b8176ade366f75 /tests
parentcd89ec830d1a34601540a24fe00a8b56bab8312c (diff)
QMdiArea: Store focus widget when new QMdiSubWindow is added.
Introduce function QMdiSubWindowPrivate::storeFocusWidget() to store focus widget and call this when de-activating a sub window. Change restoreFocus() to return a bool and call it from QMdiSubWindowPrivate::setActive(). Task-number: QTBUG-38378 Change-Id: I18dbe66ce85213ca5b4907b5a09126544415351a Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp47
1 files changed, 46 insertions, 1 deletions
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
index ffc3e3b67d..60fd946d52 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
+++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the test suite of the Qt Toolkit.
@@ -58,6 +58,7 @@
#include <QStyle>
#include <QStyleOptionTitleBar>
#include <QPushButton>
+#include <QScreen>
#include <QSizeGrip>
#include "../../../qtest-config.h"
@@ -182,6 +183,7 @@ private slots:
void mouseDoubleClick();
void setSystemMenu();
void restoreFocus();
+ void restoreFocusOverCreation();
void changeFocusWithTab();
void closeEvent();
void setWindowTitle();
@@ -1126,6 +1128,7 @@ void tst_QMdiSubWindow::restoreFocus()
expectedFocusWindow->showMinimized();
qApp->processEvents();
QVERIFY(expectedFocusWindow->isMinimized());
+ qDebug() << expectedFocusWindow<< qApp->focusWidget();
QCOMPARE(qApp->focusWidget(), static_cast<QWidget *>(expectedFocusWindow));
// Minimized -> normal
@@ -1178,6 +1181,48 @@ void tst_QMdiSubWindow::restoreFocus()
QCOMPARE(qApp->focusWidget(), static_cast<QWidget *>(expectedFocusWindow));
}
+class MultiWidget : public QWidget {
+public:
+ explicit MultiWidget(QWidget *parent = 0) : QWidget(parent)
+ , m_lineEdit1(new QLineEdit(this)), m_lineEdit2(new QLineEdit(this))
+ {
+ QVBoxLayout *lt = new QVBoxLayout(this);
+ lt->addWidget(m_lineEdit1);
+ lt->addWidget(m_lineEdit2);
+ }
+
+ QLineEdit *m_lineEdit1;
+ QLineEdit *m_lineEdit2;
+};
+
+void tst_QMdiSubWindow::restoreFocusOverCreation()
+{
+ // QTBUG-38378, verify that the focus child of a subwindow
+ // is not "forgotten" when adding yet another subwindow.
+ QMdiArea mdiArea;
+ mdiArea.resize(800, 800);
+ mdiArea.move(QGuiApplication::primaryScreen()->availableGeometry().center() - QPoint(400, 400));
+ mdiArea.setWindowTitle(QStringLiteral("restoreFocusOverCreation"));
+
+ MultiWidget *subWidget1 = new MultiWidget;
+ MultiWidget *subWidget2 = new MultiWidget;
+
+ QMdiSubWindow *subWindow1 = mdiArea.addSubWindow(subWidget1);
+ subWidget1->m_lineEdit2->setFocus();
+ subWindow1->show();
+ mdiArea.show();
+ QApplication::setActiveWindow(&mdiArea);
+ QVERIFY(QTest::qWaitForWindowActive(&mdiArea));
+ QCOMPARE(QApplication::focusWidget(), subWidget1->m_lineEdit2);
+
+ QMdiSubWindow *subWindow2 = mdiArea.addSubWindow(subWidget2);
+ subWindow2->show();
+ QTRY_COMPARE(QApplication::focusWidget(), subWidget2->m_lineEdit1);
+
+ mdiArea.setActiveSubWindow(subWindow1);
+ QTRY_COMPARE(QApplication::focusWidget(), subWidget1->m_lineEdit2);
+}
+
void tst_QMdiSubWindow::changeFocusWithTab()
{
QWidget *widget = new QWidget;