diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp index 1352df6e6..07c663dfd 100644 --- a/UI/qt-display.cpp +++ b/UI/qt-display.cpp @@ -42,6 +42,9 @@ protected: else mTimerId = startTimer(67); // Arbitrary break; + case QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed: + display->DestroyDisplay(); + break; case QEvent::Expose: createOBSDisplay(); break; @@ -52,7 +55,10 @@ protected: return result; } - void timerEvent(QTimerEvent *) { createOBSDisplay(true); } + void timerEvent(QTimerEvent *) + { + createOBSDisplay(display->isVisible()); + } private: void createOBSDisplay(bool force = false) diff --git a/UI/qt-display.hpp b/UI/qt-display.hpp index 1edba68de..4c3b3c92b 100644 --- a/UI/qt-display.hpp +++ b/UI/qt-display.hpp @@ -43,6 +43,7 @@ public: void SetDisplayBackgroundColor(const QColor &color); void UpdateDisplayBackgroundColor(); void CreateDisplay(bool force = false); + void DestroyDisplay() { display = nullptr; }; void OnMove(); void OnDisplayChange(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index e18a2a541..af3ca29c3 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -4707,6 +4707,10 @@ void OBSBasic::closeEvent(QCloseEvent *event) delete extraBrowsers; + ui->preview->DestroyDisplay(); + if (program) + program->DestroyDisplay(); + config_set_string(App()->GlobalConfig(), "BasicWindow", "DockState", saveState().toBase64().constData());