From 0383fe5e97c53ea8c0a178247619b9331885e9c0 Mon Sep 17 00:00:00 2001 From: Norihiro Kamae Date: Fri, 8 Nov 2024 12:06:22 +0900 Subject: [PATCH] dock: Fix display not updated when docked and un-docked on macOS On macOS, after the scope dock window was docked to or undocked from the main window, the display was vanished. The handlers of `visibleChanged` and `screenChanged` are copied from obs-source-dock. --- src/scope-widget.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/scope-widget.cpp b/src/scope-widget.cpp index 40f03c9..cb12b5e 100644 --- a/src/scope-widget.cpp +++ b/src/scope-widget.cpp @@ -196,6 +196,31 @@ ScopeWidget::ScopeWidget(QWidget *parent) : QWidget(parent) data->i_mouse_last = -1; data->i_src_menu = -1; + connect(windowHandle(), &QWindow::visibleChanged, [this](bool visible) { + if (!visible) { +#if !defined(_WIN32) && !defined(__APPLE__) + DestroyDisplay(); +#endif + return; + } + + if (!data->disp) { + CreateDisplay(); + } else { + QSize size = GetPixelSize(this); + obs_display_resize(data->disp, size.width(), size.height()); + } + }); + + connect(windowHandle(), &QWindow::screenChanged, [this](QScreen *screen) { + CreateDisplay(); + + if (data->disp) { + QSize size = GetPixelSize(this); + obs_display_resize(data->disp, size.width(), size.height()); + } + }); + windowHandle()->installEventFilter(new SurfaceEventFilter(this)); } @@ -204,6 +229,7 @@ ScopeWidget::~ScopeWidget() scope_dock_deleted(this); if (data) { + data->destroying = true; DestroyDisplay(); pthread_mutex_lock(&data->mutex); @@ -262,7 +288,6 @@ void ScopeWidget::DestroyDisplay() obs_display_destroy(data->disp); data->disp = NULL; - data->destroying = true; } void ScopeWidget::resizeEvent(QResizeEvent *event)