diff options
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r-- | src/mainwindow.cpp | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4b7b500..bc912b5 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -314,7 +314,7 @@ MainWindow::setupActions() m_actionClose->setText(tr("&Close")); m_actionClose->setIcon(loadIcon("window-close")); m_actionClose->setShortcut(QKeySequence(tr("Ctrl+W"))); - connect(m_actionClose, SIGNAL(triggered(bool)), SLOT(close())); + connect(m_actionClose, SIGNAL(triggered(bool)), SLOT(closeDocument())); m_actionQuit = new QAction(this); m_actionQuit->setText(tr("&Quit")); @@ -720,14 +720,40 @@ MainWindow::addRecentFile(const QString &fileName) } } +QList<MainWindow *> +MainWindow::mainWindows() +{ + QList<MainWindow *> result; + QWidgetList widgets = QApplication::topLevelWidgets(); + int listSize = widgets.size(); + for (int i = 0; i < listSize; i++) { + MainWindow *mainWin = qobject_cast<MainWindow *>(widgets.at(i)); + if (mainWin) { + result.append(mainWin); + } + } + return result; +} + +void +MainWindow::closeDocument() +{ + if (mainWindows().size() > 1) { + // There are still some windows open, close this one + close(); + } + else { + // This is the last window, close the document, but keep the window open + newModel(); + } +} + void MainWindow::closeAll() { - foreach (QWidget *widget, QApplication::topLevelWidgets()) { - MainWindow *mainWin = qobject_cast<MainWindow *>(widget); - if (mainWin) - mainWin->close(); - } + foreach (MainWindow *window, mainWindows()) { + window->close(); + } } void |