#pragma once #include "../defines.hpp" #include "PluginAPI.hpp" #include class IHyprWindowDecoration; class CPlugin { public: std::string name = ""; std::string description = ""; std::string author = ""; std::string version = ""; std::string path = ""; HANDLE m_pHandle = nullptr; std::vector registeredLayouts; std::vector registeredDecorations; std::vector> registeredCallbacks; std::vector registeredDispatchers; }; 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 getAllPlugins(); bool m_bAllowConfigVars = false; private: std::vector> m_vLoadedPlugins; jmp_buf m_jbPluginFaultJumpBuf; }; inline std::unique_ptr g_pPluginSystem;