53 lines
1.5 KiB
Diff
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
|
||
|
|