diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp index 77ad2d1eb..991e18ffe 100644 --- a/UI/window-projector.cpp +++ b/UI/window-projector.cpp @@ -63,6 +63,8 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, }; connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback); + connect(App(), &QGuiApplication::screenRemoved, this, + &OBSProjector::ScreenRemoved); if (type == ProjectorType::Multiview) { obs_enter_graphics(); @@ -168,12 +170,14 @@ OBSProjector::~OBSProjector() multiviewProjectors.removeAll(this); App()->DecrementSleepInhibition(); + + screen = nullptr; } void OBSProjector::SetMonitor(int monitor) { savedMonitor = monitor; - QScreen *screen = QGuiApplication::screens()[monitor]; + screen = QGuiApplication::screens()[monitor]; setGeometry(screen->geometry()); showFullScreen(); SetHideCursor(); @@ -1078,6 +1082,7 @@ void OBSProjector::OpenWindowedProjector() savedMonitor = -1; UpdateProjectorTitle(QT_UTF8(obs_source_get_name(source))); + screen = nullptr; } void OBSProjector::ResizeToContent() @@ -1135,3 +1140,12 @@ void OBSProjector::SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden) SetAlwaysOnTop(this, isAlwaysOnTop); } + +void OBSProjector::ScreenRemoved(QScreen *screen_) +{ + if (GetMonitor() < 0 || !screen) + return; + + if (screen == screen_) + EscapeTriggered(); +} diff --git a/UI/window-projector.hpp b/UI/window-projector.hpp index a3406f3d8..599cf678d 100644 --- a/UI/window-projector.hpp +++ b/UI/window-projector.hpp @@ -77,12 +77,15 @@ private: QRect prevGeometry; void SetMonitor(int monitor); + QScreen *screen = nullptr; + private slots: void EscapeTriggered(); void OpenFullScreenProjector(); void ResizeToContent(); void OpenWindowedProjector(); void AlwaysOnTopToggled(bool alwaysOnTop); + void ScreenRemoved(QScreen *screen_); public: OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,