diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp index 1bb97c7ba..685ee6f97 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 0f13ac4c8..d33235215 100644 --- a/UI/qt-wrappers.cpp +++ b/UI/qt-wrappers.cpp @@ -30,9 +30,14 @@ #include #if !defined(_WIN32) && !defined(__APPLE__) +#include #include #endif +#ifdef ENABLE_WAYLAND +#include +#endif + static inline void OBSErrorBoxva(QWidget *parent, const char *msg, va_list args) { char full_message[4096]; @@ -108,15 +113,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 600bab2fe..02312d748 100644 --- a/UI/qt-wrappers.hpp +++ b/UI/qt-wrappers.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -56,7 +57,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);