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