File indexing completed on 2024-04-28 05:30:27

0001 /*
0002     SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "effect/globals.h"
0010 
0011 #include <QHash>
0012 #include <QObject>
0013 
0014 #include <KPluginMetaData>
0015 
0016 namespace KWin
0017 {
0018 
0019 class Plugin;
0020 
0021 /**
0022  * The PluginManager class loads and unloads binary compositor extensions.
0023  */
0024 class KWIN_EXPORT PluginManager : public QObject
0025 {
0026     Q_OBJECT
0027 
0028 public:
0029     PluginManager();
0030     ~PluginManager() override;
0031 
0032     QStringList loadedPlugins() const;
0033     QStringList availablePlugins() const;
0034 
0035 public Q_SLOTS:
0036     bool loadPlugin(const QString &pluginId);
0037     void unloadPlugin(const QString &pluginId);
0038 
0039 private:
0040     bool loadPlugin(const KPluginMetaData &metadata);
0041 
0042     std::map<QString, std::unique_ptr<Plugin>> m_plugins;
0043 };
0044 
0045 } // namespace KWin