Encode supported platforms in the plugin metdata

This way we don't load pipewire on X, or xcb on Wayland regardless
if they are configured as preferred or not.
This commit is contained in:
David Redondo
2023-01-18 15:13:42 +01:00
parent e865b187a2
commit 953cc4218b
7 changed files with 26 additions and 5 deletions

View File

@@ -0,0 +1,5 @@
{
"X-KDE-OnlyShowOnQtPlatforms": [
"wayland"
]
}

View File

@@ -22,7 +22,7 @@
#include "pw_framebuffer.h" #include "pw_framebuffer.h"
#include <KPluginFactory> #include <KPluginFactory>
K_PLUGIN_CLASS(PWFrameBufferPlugin) K_PLUGIN_CLASS_WITH_JSON(PWFrameBufferPlugin, "pipewire.json")
PWFrameBufferPlugin::PWFrameBufferPlugin(QObject *parent, const QVariantList &args) PWFrameBufferPlugin::PWFrameBufferPlugin(QObject *parent, const QVariantList &args)
: FrameBufferPlugin(parent, args) : FrameBufferPlugin(parent, args)

6
framebuffers/qt/qt.json Normal file
View File

@@ -0,0 +1,6 @@
{
"X-KDE-OnlyShowOnQtPlatforms": [
"xcb"
]
}

View File

@@ -24,7 +24,7 @@
#include <KPluginFactory> #include <KPluginFactory>
K_PLUGIN_CLASS(QtFrameBufferPlugin) K_PLUGIN_CLASS_WITH_JSON(QtFrameBufferPlugin, "qt.json")
QtFrameBufferPlugin::QtFrameBufferPlugin(QObject *parent, const QVariantList &args) QtFrameBufferPlugin::QtFrameBufferPlugin(QObject *parent, const QVariantList &args)
: FrameBufferPlugin(parent, args) : FrameBufferPlugin(parent, args)

View File

@@ -0,0 +1,6 @@
{
"X-KDE-OnlyShowOnQtPlatforms": [
"xcb"
]
}

View File

@@ -22,7 +22,7 @@
#include "xcb_framebuffer.h" #include "xcb_framebuffer.h"
#include <KPluginFactory> #include <KPluginFactory>
K_PLUGIN_CLASS(XCBFrameBufferPlugin) K_PLUGIN_CLASS_WITH_JSON(XCBFrameBufferPlugin, "xcb.json")
XCBFrameBufferPlugin::XCBFrameBufferPlugin(QObject *parent, const QVariantList &args) XCBFrameBufferPlugin::XCBFrameBufferPlugin(QObject *parent, const QVariantList &args)
: FrameBufferPlugin(parent, args) : FrameBufferPlugin(parent, args)

View File

@@ -24,6 +24,7 @@
#include "krfbconfig.h" #include "krfbconfig.h"
#include "krfbdebug.h" #include "krfbdebug.h"
#include <QGuiApplication>
#include <QGlobalStatic> #include <QGlobalStatic>
#include <KPluginFactory> #include <KPluginFactory>
@@ -40,7 +41,10 @@ Q_GLOBAL_STATIC(FrameBufferManagerStatic, frameBufferManagerStatic)
FrameBufferManager::FrameBufferManager() FrameBufferManager::FrameBufferManager()
{ {
const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/framebuffer"), {}, KPluginMetaData::AllowEmptyMetaData); const auto platformFilter = [] (const KPluginMetaData &pluginData) {
return pluginData.value(QStringLiteral("X-KDE-OnlyShowOnQtPlatforms"), QStringList()).contains(QGuiApplication::platformName());
};
const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("krfb/framebuffer"), platformFilter, KPluginMetaData::AllowEmptyMetaData);
for (const KPluginMetaData &data : plugins) { for (const KPluginMetaData &data : plugins) {
const KPluginFactory::Result<FrameBufferPlugin> result = KPluginFactory::instantiatePlugin<FrameBufferPlugin>(data); const KPluginFactory::Result<FrameBufferPlugin> result = KPluginFactory::instantiatePlugin<FrameBufferPlugin>(data);
if (result.plugin) { if (result.plugin) {
@@ -76,7 +80,7 @@ QSharedPointer<FrameBuffer> FrameBufferManager::frameBuffer(WId id, const QVaria
} }
} }
if (auto preferredPlugin = m_plugins[ KrfbConfig::preferredFrameBufferPlugin() ]) { if (auto preferredPlugin = m_plugins.value(KrfbConfig::preferredFrameBufferPlugin())) {
if (auto frameBuffer = QSharedPointer<FrameBuffer>(preferredPlugin->frameBuffer(args))) { if (auto frameBuffer = QSharedPointer<FrameBuffer>(preferredPlugin->frameBuffer(args))) {
qCDebug(KRFB) << "Using FrameBuffer:" << KrfbConfig::preferredFrameBufferPlugin(); qCDebug(KRFB) << "Using FrameBuffer:" << KrfbConfig::preferredFrameBufferPlugin();
m_frameBuffers.insert(id, frameBuffer.toWeakRef()); m_frameBuffers.insert(id, frameBuffer.toWeakRef());