From 7f1255f2cb90c347ecf90c53d1b8064c7bba652d Mon Sep 17 00:00:00 2001 From: Lukáš Lalinský Date: Thu, 3 Sep 2009 10:56:29 +0200 Subject: Make the "Close" menu item not quit the application --- src/mainwindow.cpp | 38 ++++++++++++++++++++++++++++++++------ src/mainwindow.h | 4 ++++ 2 files changed, 36 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::mainWindows() +{ + QList result; + QWidgetList widgets = QApplication::topLevelWidgets(); + int listSize = widgets.size(); + for (int i = 0; i < listSize; i++) { + MainWindow *mainWin = qobject_cast(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(widget); - if (mainWin) - mainWin->close(); - } + foreach (MainWindow *window, mainWindows()) { + window->close(); + } } void diff --git a/src/mainwindow.h b/src/mainwindow.h index 923f6cd..815d29e 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -75,6 +75,8 @@ public slots: void copy(); void paste(); void updateClipboard(QClipboard::Mode mode); + + void closeDocument(); void closeAll(); void showGrid(bool); @@ -93,6 +95,8 @@ protected: void saveWindowState(); void restoreWindowState(); + static QList mainWindows(); + private: class MainWindowPrivate; MainWindowPrivate *const d; -- cgit v1.2.3-54-g00ecf