#pragma once #include "../defines.hpp" #include "../helpers/defer/Promise.hpp" #include "PluginAPI.hpp" #include #include class IHyprWindowDecoration; class CPlugin { public: std::string m_name = ""; std::string m_description = ""; std::string m_author = ""; std::string m_version = ""; std::string m_path = ""; bool m_loadedWithConfig = false; HANDLE m_handle = nullptr; std::vector m_registeredLayouts; std::vector m_registeredDecorations; std::vector>> m_registeredCallbacks; std::vector m_registeredDispatchers; std::vector> m_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_allowConfigVars = false; private: std::vector> m_loadedPlugins; jmp_buf m_pluginFaultJumpBuf; std::expected loadPluginInternal(const std::string& path); }; inline UP g_pPluginSystem;