aur-obs-studio-wayland/0016-UI-Destroy-obs_display...

53 lines
1.5 KiB
Diff

From 7e2e627ebf4d9f52afebb7dcda95429f68362f32 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Date: Tue, 18 Aug 2020 19:38:29 -0300
Subject: [PATCH 16/16] UI: Destroy obs_display when becoming invisible
When a window is made invisible, then visible again, the
obs_display is reused. Turns out, QT destroys the wl_surface
associated with the previewer on Wayland. However, the EGL
surface created on top of this wl_surface is not, and any
attempt to attach a new buffer to it will crash OBS.
Destroy the obs_display when becoming invisible, and when
running as a Wayland client.
---
UI/qt-display.cpp | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp
index 685ee6f9..fc83e0e0 100644
--- a/UI/qt-display.cpp
+++ b/UI/qt-display.cpp
@@ -6,6 +6,12 @@
#include <QResizeEvent>
#include <QShowEvent>
+#include <obs-config.h>
+
+#ifdef ENABLE_WAYLAND
+#include <obs-nix-platform.h>
+#endif
+
static inline long long color_to_int(const QColor &color)
{
auto shift = [&](unsigned val, int shift) {
@@ -33,8 +39,13 @@ OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags)
setAttribute(Qt::WA_NativeWindow);
auto windowVisible = [this](bool visible) {
- if (!visible)
+ if (!visible) {
+#ifdef ENABLE_WAYLAND
+ if (obs_get_nix_platform() == OBS_NIX_PLATFORM_WAYLAND)
+ display = nullptr;
+#endif
return;
+ }
if (!display) {
CreateDisplay();
--
2.28.0