Declarative plugin management (#2180)

* Declarative plugin management

Allow declaring `plugin` entries in the hyprland configuration.

Plugins will be loaded if an entry is added and unloaded if that entry
is removed.

* Replace pointers with copying in updateconfigPlugins

* Include which plugin was declared twice in error
This commit is contained in:
outfoxxed
2023-05-01 07:10:53 -07:00
committed by GitHub
parent dc469dc4c1
commit 3a631e40db
6 changed files with 86 additions and 8 deletions

View File

@@ -15,6 +15,8 @@ class CPlugin {
std::string path = "";
bool m_bLoadedWithConfig = false;
HANDLE m_pHandle = nullptr;
std::vector<IHyprLayout*> registeredLayouts;
@@ -27,14 +29,15 @@ class CPluginSystem {
public:
CPluginSystem();
CPlugin* loadPlugin(const std::string& path);
void unloadPlugin(const CPlugin* plugin, bool eject = false);
void unloadAllPlugins();
CPlugin* getPluginByPath(const std::string& path);
CPlugin* getPluginByHandle(HANDLE handle);
std::vector<CPlugin*> getAllPlugins();
CPlugin* loadPlugin(const std::string& path);
void unloadPlugin(const CPlugin* plugin, bool eject = false);
void unloadAllPlugins();
std::vector<std::string> updateConfigPlugins(const std::vector<std::string>& plugins, bool& changed);
CPlugin* getPluginByPath(const std::string& path);
CPlugin* getPluginByHandle(HANDLE handle);
std::vector<CPlugin*> getAllPlugins();
bool m_bAllowConfigVars = false;
bool m_bAllowConfigVars = false;
private:
std::vector<std::unique_ptr<CPlugin>> m_vLoadedPlugins;