diff --git a/src/UI/DockWidgetTitleBar.hh b/src/UI/DockWidgetTitleBar.hh
index 7b9402c00ef410d0ff45d45c9e9396b870ad3a5c..620c9a947e3537b566ee45a69be521cf63b97005 100644
--- a/src/UI/DockWidgetTitleBar.hh
+++ b/src/UI/DockWidgetTitleBar.hh
@@ -1,9 +1,6 @@
 #pragma once
 
 #include "Utils.hh"
-#include "../Lib/Utils.hh"
-
-class QDockWidget;
 
 namespace Vivy
 {
diff --git a/src/UI/UnclosableDockWidget.cc b/src/UI/UnclosableDockWidget.cc
new file mode 100644
index 0000000000000000000000000000000000000000..504fb790be0ec2834ef951fd5000c453fa632dd1
--- /dev/null
+++ b/src/UI/UnclosableDockWidget.cc
@@ -0,0 +1,16 @@
+#include "UnclosableDockWidget.hh"
+#include "DockWidgetTitleBar.hh"
+
+using namespace Vivy;
+
+UnclosableDockWidget::UnclosableDockWidget(const QString &name, QWidget *parent) noexcept
+    : QDockWidget(name, parent)
+{
+    DockWidgetTitleBar::addToDock(this);
+}
+
+void
+UnclosableDockWidget::closeEvent(QCloseEvent *event) noexcept
+{
+    event->ignore();
+}
diff --git a/src/UI/UnclosableDockWidget.hh b/src/UI/UnclosableDockWidget.hh
new file mode 100644
index 0000000000000000000000000000000000000000..2e13bcaa077e73a51c7f05952a616b6833ba3251
--- /dev/null
+++ b/src/UI/UnclosableDockWidget.hh
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "Utils.hh"
+
+namespace Vivy
+{
+class UnclosableDockWidget final : public QDockWidget {
+    Q_OBJECT
+    VIVY_UNMOVABLE_OBJECT(UnclosableDockWidget)
+
+public:
+    explicit UnclosableDockWidget(const QString &, QWidget *parent) noexcept;
+
+protected:
+    void closeEvent(QCloseEvent *event) noexcept override;
+};
+}
diff --git a/src/UI/VivyDocumentView.cc b/src/UI/VivyDocumentView.cc
index 1bc93560dee72eb95ede95222d56f7175f89ecb6..95ba41cfaf0132077932f253acfb359d960ced4c 100644
--- a/src/UI/VivyDocumentView.cc
+++ b/src/UI/VivyDocumentView.cc
@@ -1,6 +1,5 @@
 #include "VivyDocumentView.hh"
 #include "PropertyModel.hh"
-#include "DockWidgetTitleBar.hh"
 #include "Utils.hh"
 #include "DocumentViews/AudioVisualizer.hh"
 #include "DocumentViews/AssLinesView.hh"
@@ -77,11 +76,10 @@ VivyDocumentView::loadVideoView() noexcept
 {
     if (document->checkDocumentCapabilities(VivyDocument::Capabilities::VideoAble)) {
         if (!videoView) {
-            videoView = new QDockWidget("Video View", this);
+            videoView = new UnclosableDockWidget("Video View", this);
             videoView->setAllowedAreas(Qt::AllDockWidgetAreas);
             videoView->setFeatures(allDockFeatures);
             addDockWidget(Qt::BottomDockWidgetArea, videoView, Qt::Vertical);
-            DockWidgetTitleBar::addToDock(videoView);
         }
 
         // Kubat: because the dock is "closable", when closed the widget itself
@@ -98,12 +96,11 @@ VivyDocumentView::loadAssView() noexcept
 {
     if (document->checkDocumentCapabilities(VivyDocument::Capabilities::AssAble)) {
         if (!assLines) {
-            assLines = new QDockWidget("ASS Lines", this);
+            assLines = new UnclosableDockWidget("ASS Lines", this);
             assLines->setFeatures(onlyClosableDockFeatures);
             assLines->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea |
                                       Qt::BottomDockWidgetArea);
             addDockWidget(Qt::BottomDockWidgetArea, assLines, Qt::Vertical);
-            DockWidgetTitleBar::addToDock(assLines);
         }
 
         assModel.reset(new AssLinesModel(document->getAssSubDocument()->getLines()));
@@ -126,14 +123,12 @@ VivyDocumentView::loadAudioView() noexcept
         }
 
         if (!visualizer) {
-            visualizer = new QDockWidget("Visualizer", this);
-
+            visualizer = new UnclosableDockWidget("Visualizer", this);
             visualizer->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum);
             visualizer->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::TopDockWidgetArea |
                                         Qt::BottomDockWidgetArea);
             visualizer->setFeatures(onlyClosableDockFeatures);
             addDockWidget(Qt::LeftDockWidgetArea, visualizer, Qt::Horizontal);
-            DockWidgetTitleBar::addToDock(visualizer);
         }
 
         // Kubat: don't check, may throw an error but don't think we can
@@ -178,11 +173,10 @@ VivyDocumentView::openProperties() noexcept
     view->expandAll();
 
     if (!property) {
-        property = new QDockWidget("Properties", this);
+        property = new UnclosableDockWidget("Properties", this);
         property->setAllowedAreas(Qt::AllDockWidgetAreas);
         property->setFeatures(allDockFeatures);
         addDockWidget(Qt::RightDockWidgetArea, property, Qt::Vertical);
-        DockWidgetTitleBar::addToDock(property);
     }
 
     property->setWidget(view);
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index 59db8987710f841d955d25da28a53d8142f347c6..0a6f13b4519362f6468632348a854051a44e4b64 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -11,6 +11,7 @@
 #include "DocumentViews/AssLinesView.hh"
 #include "DocumentViews/AssLinesModel.hh"
 #include "PropertyModel.hh"
+#include "UnclosableDockWidget.hh"
 
 namespace Vivy
 {
@@ -46,10 +47,10 @@ private:
     std::shared_ptr<VivyDocument> document;
     std::unique_ptr<PropertyModel> propertyModel{ nullptr };
     std::unique_ptr<AssLinesModel> assModel{ nullptr };
-    QDockWidget *visualizer{ nullptr };
-    QDockWidget *property{ nullptr };
-    QDockWidget *assLines{ nullptr };
-    QDockWidget *videoView{ nullptr };
+    UnclosableDockWidget *visualizer{ nullptr };
+    UnclosableDockWidget *property{ nullptr };
+    UnclosableDockWidget *assLines{ nullptr };
+    UnclosableDockWidget *videoView{ nullptr };
     QAction *openPropertiesAct{ nullptr };
 };