diff --git a/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp b/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp index 6bb286d83..07a8a49fc 100644 --- a/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp +++ b/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.cpp @@ -99,21 +99,36 @@ void LibMpvWidget::maybeUpdate() { } } -void LibMpvWidget::on_update(void* ctx) { - QMetaObject::invokeMethod((LibMpvWidget*)ctx, "maybeUpdate"); +void LibMpvWidget::onMpvRedraw(void* ctx) { + QMetaObject::invokeMethod((LibMpvWidget*)ctx, &LibMpvWidget::maybeUpdate, Qt::ConnectionType::QueuedConnection); } void LibMpvWidget::initializeGL() { mpv_opengl_init_params gl_init_params[1] = {get_proc_address, nullptr}; + mpv_render_param display{MPV_RENDER_PARAM_INVALID, nullptr}; + +#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) + if (QGuiApplication::platformName() == QStringLiteral("xcb")) { + display.type = MPV_RENDER_PARAM_X11_DISPLAY; + display.data = qApp->nativeInterface()->display(); + } + + if (QGuiApplication::platformName() == QStringLiteral("wayland")) { + display.type = MPV_RENDER_PARAM_WL_DISPLAY; + display.data = qApp->nativeInterface()->display(); + } +#endif + mpv_render_param params[]{{MPV_RENDER_PARAM_API_TYPE, const_cast(MPV_RENDER_API_TYPE_OPENGL)}, {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params}, + display, {MPV_RENDER_PARAM_INVALID, nullptr}}; if (mpv_render_context_create(&m_mpvGl, m_mpvHandle, params) < 0) { qFatal("failed to initialize mpv GL context"); } - mpv_render_context_set_update_callback(m_mpvGl, LibMpvWidget::on_update, reinterpret_cast(this)); + mpv_render_context_set_update_callback(m_mpvGl, LibMpvWidget::onMpvRedraw, reinterpret_cast(this)); } void LibMpvWidget::paintGL() { diff --git a/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.h b/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.h index 2bb908295..ab260c6d4 100644 --- a/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.h +++ b/src/librssguard/gui/mediaplayer/libmpv/libmpvwidget.h @@ -44,7 +44,7 @@ class LibMpvWidget : public BASE_WIDGET { virtual void paintGL(); private: - static void on_update(void* ctx); + static void onMpvRedraw(void* ctx); mpv_render_context* m_mpvGl; #endif