summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qwindow.cpp24
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp16
2 files changed, 38 insertions, 2 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 5bab203abc..daee1cdd3b 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -845,8 +845,28 @@ void QWindow::showNormal()
bool QWindow::close()
{
- //should we have close?
- qDebug() << "unimplemented:" << __FILE__ << __LINE__;
+ Q_D(QWindow);
+
+ // Do not close non top level windows
+ if (parent())
+ return false;
+
+ if (QGuiApplicationPrivate::focus_window == this)
+ QGuiApplicationPrivate::focus_window = 0;
+
+ QObjectList childrenWindows = children();
+ for (int i = 0; i < childrenWindows.size(); i++) {
+ QObject *object = childrenWindows.at(i);
+ if (object->isWindowType()) {
+ QWindow *w = static_cast<QWindow*>(object);
+ QGuiApplicationPrivate::window_list.removeAll(w);
+ w->destroy();
+ }
+ }
+
+ QGuiApplicationPrivate::window_list.removeAll(this);
+ destroy();
+ d->maybeQuitOnLastWindowClosed();
return true;
}
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index 91f9e4ef49..a19af79caa 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -58,6 +58,7 @@ private slots:
void mouseToTouchTranslation();
void mouseToTouchLoop();
void orientation();
+ void close();
void initTestCase()
{
touchDevice = new QTouchDevice;
@@ -503,5 +504,20 @@ void tst_QWindow::orientation()
QCOMPARE(spy.count(), 1);
}
+void tst_QWindow::close()
+{
+ QWindow a;
+ QWindow b;
+ QWindow c(&a);
+
+ a.show();
+ b.show();
+
+ // we can not close a non top level window
+ QVERIFY(!c.close());
+ QVERIFY(a.close());
+ QVERIFY(b.close());
+}
+
#include <tst_qwindow.moc>
QTEST_MAIN(tst_QWindow);