7b430130e3
Signed-off-by: Antoine Damhet <antoine.damhet@lse.epita.fr>
107 lines
2.9 KiB
Diff
107 lines
2.9 KiB
Diff
From d61735d0dc74fc1a50564fe72cb26a07c4d49e56 Mon Sep 17 00:00:00 2001
|
|
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
|
|
Date: Mon, 9 Mar 2020 21:23:37 -0300
|
|
Subject: [PATCH 14/20] UI: Retrieve Wayland surface from QWindow
|
|
|
|
On Wayland, we want to query the window's underlying
|
|
platform for the Wayland surface, instead of foolishly
|
|
retrieving the X11 display.
|
|
|
|
Pass QWindow instead of WId directly, and set the surface
|
|
as the platform data on Wayland systems.
|
|
---
|
|
UI/qt-display.cpp | 2 +-
|
|
UI/qt-wrappers.cpp | 28 +++++++++++++++++++++++-----
|
|
UI/qt-wrappers.hpp | 3 ++-
|
|
3 files changed, 26 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp
|
|
index 1bb97c7b..685ee6f9 100644
|
|
--- a/UI/qt-display.cpp
|
|
+++ b/UI/qt-display.cpp
|
|
@@ -89,7 +89,7 @@ void OBSQTDisplay::CreateDisplay()
|
|
info.format = GS_BGRA;
|
|
info.zsformat = GS_ZS_NONE;
|
|
|
|
- QTToGSWindow(winId(), info.window);
|
|
+ QTToGSWindow(windowHandle(), info.window);
|
|
|
|
display = obs_display_create(&info, backgroundColor);
|
|
|
|
diff --git a/UI/qt-wrappers.cpp b/UI/qt-wrappers.cpp
|
|
index e8a51d37..1485a181 100644
|
|
--- a/UI/qt-wrappers.cpp
|
|
+++ b/UI/qt-wrappers.cpp
|
|
@@ -27,9 +27,14 @@
|
|
#include <QKeyEvent>
|
|
|
|
#if !defined(_WIN32) && !defined(__APPLE__)
|
|
+#include <obs-nix-platform.h>
|
|
#include <QX11Info>
|
|
#endif
|
|
|
|
+#ifdef ENABLE_WAYLAND
|
|
+#include <qpa/qplatformnativeinterface.h>
|
|
+#endif
|
|
+
|
|
static inline void OBSErrorBoxva(QWidget *parent, const char *msg, va_list args)
|
|
{
|
|
char full_message[4096];
|
|
@@ -105,15 +110,28 @@ void OBSMessageBox::critical(QWidget *parent, const QString &title,
|
|
mb.exec();
|
|
}
|
|
|
|
-void QTToGSWindow(WId windowId, gs_window &gswindow)
|
|
+void QTToGSWindow(QWindow *window, gs_window &gswindow)
|
|
{
|
|
#ifdef _WIN32
|
|
- gswindow.hwnd = (HWND)windowId;
|
|
+ gswindow.hwnd = (HWND)window->winId();
|
|
#elif __APPLE__
|
|
- gswindow.view = (id)windowId;
|
|
+ gswindow.view = (id)window->winId();
|
|
#else
|
|
- gswindow.id = windowId;
|
|
- gswindow.display = QX11Info::display();
|
|
+ switch (obs_get_nix_platform()) {
|
|
+ case OBS_NIX_PLATFORM_X11_GLX:
|
|
+ case OBS_NIX_PLATFORM_X11_EGL:
|
|
+ gswindow.id = window->winId();
|
|
+ gswindow.display = obs_get_nix_platform_display();
|
|
+ break;
|
|
+#ifdef ENABLE_WAYLAND
|
|
+ case OBS_NIX_PLATFORM_WAYLAND:
|
|
+ QPlatformNativeInterface *native =
|
|
+ QGuiApplication::platformNativeInterface();
|
|
+ gswindow.display =
|
|
+ native->nativeResourceForWindow("surface", window);
|
|
+ break;
|
|
+#endif
|
|
+ }
|
|
#endif
|
|
}
|
|
|
|
diff --git a/UI/qt-wrappers.hpp b/UI/qt-wrappers.hpp
|
|
index 69996deb..f191f8f9 100644
|
|
--- a/UI/qt-wrappers.hpp
|
|
+++ b/UI/qt-wrappers.hpp
|
|
@@ -20,6 +20,7 @@
|
|
#include <QApplication>
|
|
#include <QMessageBox>
|
|
#include <QWidget>
|
|
+#include <QWindow>
|
|
#include <QThread>
|
|
#include <obs.hpp>
|
|
|
|
@@ -55,7 +56,7 @@ public:
|
|
|
|
void OBSErrorBox(QWidget *parent, const char *msg, ...);
|
|
|
|
-void QTToGSWindow(WId windowId, gs_window &gswindow);
|
|
+void QTToGSWindow(QWindow *window, gs_window &gswindow);
|
|
|
|
uint32_t TranslateQtKeyboardEventModifiers(Qt::KeyboardModifiers mods);
|
|
|
|
--
|
|
2.28.0
|
|
|