diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc index 4de94c3ff1db74d25b361a9602cb260a5f96be1f..70b1c2414dc47bcedeb9f80ccc13041f8c75d6b8 100644 --- a/src/UI/AbstractDocumentView.cc +++ b/src/UI/AbstractDocumentView.cc @@ -15,14 +15,18 @@ AbstractDocumentView::AbstractDocumentView(AbstractDocumentView::Type type, setTabPosition(Qt::RightDockWidgetArea, QTabWidget::East); } -// A utility function to delete all the child widgets void -AbstractDocumentView::deleteAllContent() noexcept +AbstractDocumentView::allowToCloseAllDocks() noexcept { // Allow to close all dock widgets for (UnclosableDockWidget *const dock : dockWidgets) dock->allowClose(); +} +// A utility function to delete all the child widgets +void +AbstractDocumentView::deleteAllContent() noexcept +{ // Delete all widgets if (layout() != nullptr) { QLayoutItem *item; @@ -30,7 +34,7 @@ AbstractDocumentView::deleteAllContent() noexcept delete item->widget(); delete item; } - delete layout(); + delete layout(); // XXX } } diff --git a/src/UI/AbstractDocumentView.hh b/src/UI/AbstractDocumentView.hh index 8f5473a895a9258dd00186f37214e820bf525b52..7745665b35e2bc5f669c86c4223afc0b839a0060 100644 --- a/src/UI/AbstractDocumentView.hh +++ b/src/UI/AbstractDocumentView.hh @@ -45,6 +45,7 @@ signals: protected: void deleteAllContent() noexcept; + void allowToCloseAllDocks() noexcept; void delDockWidget(UnclosableDockWidget **) noexcept; void addDockWidget(Qt::DockWidgetArea, UnclosableDockWidget *, Qt::Orientation) noexcept; diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc index 5615f900219518d07187144a59617c6a7644f960..dca4130d4fba97ec60b7d261b06c59362441a890 100644 --- a/src/UI/MainWindow.cc +++ b/src/UI/MainWindow.cc @@ -164,7 +164,15 @@ MainWindow::MainWindow() noexcept newDocument(); } -MainWindow::~MainWindow() noexcept { qDebug() << "Closing the main window!"; } +void +MainWindow::closeEvent(QCloseEvent *event) noexcept +{ + qDebug() << "Closing the main window!"; + forEachViews<VivyDocumentView>( + [](VivyDocumentView *view, int) { view->closeDocument(); }); // XXX + // event->accept(); + QMainWindow::closeEvent(event); +} void MainWindow::updateFakeVimUsage(bool yes) noexcept diff --git a/src/UI/MainWindow.hh b/src/UI/MainWindow.hh index d268f160418675e7bb4543ba4b376dfcc8103f73..7d375a94be296067d5ef6b2a700f04c86921f536 100644 --- a/src/UI/MainWindow.hh +++ b/src/UI/MainWindow.hh @@ -25,7 +25,6 @@ class MainWindow final : public QMainWindow { public: explicit MainWindow() noexcept; - ~MainWindow() noexcept override; AbstractDocument *getCurrentDocument() const; template <class Document> Document *getCurrentDocument() const @@ -91,6 +90,9 @@ private: } } +protected: + void closeEvent(QCloseEvent *) noexcept override; + private slots: void newDocument() noexcept; void openDocument() noexcept; diff --git a/src/UI/UnclosableDockWidget.cc b/src/UI/UnclosableDockWidget.cc index a148703591668672c52fe00a547bd6de8d1b1c1a..583948db63c30af4dd229cc892fdb9c945abd5a3 100644 --- a/src/UI/UnclosableDockWidget.cc +++ b/src/UI/UnclosableDockWidget.cc @@ -21,6 +21,6 @@ UnclosableDockWidget::closeEvent(QCloseEvent *event) noexcept void UnclosableDockWidget::allowClose() noexcept { - qDebug() << "Dock" << windowTitle() << "is now allowed to be closed"; + // qDebug() << "Dock" << windowTitle() << "is now allowed to be closed"; allowedToClose = true; } diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc index 1f1f3ec32e839f2e92e4a25b4d91e53bfd6925ff..8bb95c5c29141f24eaa9a07d0a1d43d238416143 100644 --- a/src/UI/VivyDocumentView.cc +++ b/src/UI/VivyDocumentView.cc @@ -147,12 +147,13 @@ VivyDocumentView::closeDocument() noexcept qDebug() << "Closing the document:" << document->getName() << "( ref count is" << document.use_count() << ")"; vivyApp->documentStore.closeDocument(document->getUuid()); + allowToCloseAllDocks(); // Kubat: the visualizer pointer should have been deleted by the // deleteAllContent() call if it was created. - deleteAllContent(); - visualizer = nullptr; - property = nullptr; + // deleteAllContent(); + // visualizer = nullptr; + // property = nullptr; } QIcon