From c265e00187758c5cb2cc777b434580bdaf2eb103 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Mon, 30 Aug 2021 18:52:30 +0200 Subject: [PATCH] UI: Closing a document view permits to close the unclosable docks --- src/UI/AbstractDocumentView.cc | 10 +++++++--- src/UI/AbstractDocumentView.hh | 1 + src/UI/MainWindow.cc | 10 +++++++++- src/UI/MainWindow.hh | 4 +++- src/UI/UnclosableDockWidget.cc | 2 +- src/UI/VivyDocumentView.cc | 7 ++++--- 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/UI/AbstractDocumentView.cc b/src/UI/AbstractDocumentView.cc index 4de94c3f..70b1c241 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 8f5473a8..7745665b 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 5615f900..dca4130d 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 d268f160..7d375a94 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 a1487035..583948db 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 1f1f3ec3..8bb95c5c 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 -- GitLab