diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gui/kernel/qwindow.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 5bab203abc8..daee1cdd3bd 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; } |
