UI: Delete projector when monitor is disconnected

This commit is contained in:
Clayton Groeneveld 2020-05-28 21:21:04 -05:00 committed by jp9000
parent b9de258c16
commit 846c3d5acc
2 changed files with 18 additions and 1 deletions

View file

@ -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();
}

View file

@ -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,