#pragma once #include "../defines.hpp" #include "../helpers/defer/Promise.hpp" #include "PluginAPI.hpp" #include #include class IHyprWindowDecoration; class CPlugin { public: std::string name = ""; std::string description = ""; std::string author = ""; std::string version = ""; std::string path = ""; bool m_bLoadedWithConfig = false; HANDLE m_pHandle = nullptr; std::vector registeredLayouts; std::vector registeredDecorations; std::vector>> registeredCallbacks; std::vector registeredDispatchers; std::vector> registeredHyprctlCommands; }; class CPluginSystem { public: CPluginSystem(); SP> loadPlugin(const std::string& path); void unloadPlugin(const CPlugin* plugin, bool eject = false); void unloadAllPlugins(); void updateConfigPlugins(const std::vector& plugins, bool& changed); CPlugin* getPluginByPath(const std::string& path); CPlugin* getPluginByHandle(HANDLE handle); std::vector getAllPlugins(); size_t pluginCount(); void sigGetPlugins(CPlugin** data, size_t len); bool m_bAllowConfigVars = false; private: std::vector> m_vLoadedPlugins; jmp_buf m_jbPluginFaultJumpBuf; std::expected loadPluginInternal(const std::string& path); }; inline UP g_pPluginSystem;