summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp38
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