parent
939696f97e
commit
60bda7ee3d
7 changed files with 155 additions and 111 deletions
|
|
@ -362,4 +362,28 @@ APICALL SVersionInfo HyprlandAPI::getHyprlandVersion(HANDLE handle) {
|
|||
return {};
|
||||
|
||||
return {GIT_COMMIT_HASH, GIT_TAG, GIT_DIRTY != std::string(""), GIT_BRANCH, GIT_COMMIT_MESSAGE};
|
||||
}
|
||||
|
||||
APICALL std::shared_ptr<SHyprCtlCommand> HyprlandAPI::registerHyprCtlCommand(HANDLE handle, SHyprCtlCommand cmd) {
|
||||
auto* const PLUGIN = g_pPluginSystem->getPluginByHandle(handle);
|
||||
|
||||
if (!PLUGIN)
|
||||
return nullptr;
|
||||
|
||||
auto PTR = g_pHyprCtl->registerCommand(cmd);
|
||||
PLUGIN->registeredHyprctlCommands.push_back(PTR);
|
||||
return PTR;
|
||||
}
|
||||
|
||||
APICALL bool HyprlandAPI::unregisterHyprCtlCommand(HANDLE handle, std::shared_ptr<SHyprCtlCommand> cmd) {
|
||||
|
||||
auto* const PLUGIN = g_pPluginSystem->getPluginByHandle(handle);
|
||||
|
||||
if (!PLUGIN)
|
||||
return false;
|
||||
|
||||
std::erase(PLUGIN->registeredHyprctlCommands, cmd);
|
||||
g_pHyprCtl->unregisterCommand(cmd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -273,6 +273,20 @@ namespace HyprlandAPI {
|
|||
for a different hash.
|
||||
*/
|
||||
APICALL SVersionInfo getHyprlandVersion(HANDLE handle);
|
||||
|
||||
/*
|
||||
Registers a hyprctl command
|
||||
|
||||
returns: Pointer. Nullptr on fail.
|
||||
*/
|
||||
APICALL std::shared_ptr<SHyprCtlCommand> registerHyprCtlCommand(HANDLE handle, SHyprCtlCommand cmd);
|
||||
|
||||
/*
|
||||
Unregisters a hyprctl command
|
||||
|
||||
returns: true on success. False otherwise.
|
||||
*/
|
||||
APICALL bool unregisterHyprCtlCommand(HANDLE handle, std::shared_ptr<SHyprCtlCommand> cmd);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -113,6 +113,10 @@ void CPluginSystem::unloadPlugin(const CPlugin* plugin, bool eject) {
|
|||
for (auto& d : rdi)
|
||||
HyprlandAPI::removeDispatcher(plugin->m_pHandle, d);
|
||||
|
||||
const auto rhc = plugin->registeredHyprctlCommands;
|
||||
for (auto& c : rhc)
|
||||
HyprlandAPI::unregisterHyprCtlCommand(plugin->m_pHandle, c);
|
||||
|
||||
g_pConfigManager->removePluginConfig(plugin->m_pHandle);
|
||||
|
||||
dlclose(plugin->m_pHandle);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ class CPlugin {
|
|||
std::vector<IHyprWindowDecoration*> registeredDecorations;
|
||||
std::vector<std::pair<std::string, HOOK_CALLBACK_FN*>> registeredCallbacks;
|
||||
std::vector<std::string> registeredDispatchers;
|
||||
std::vector<std::shared_ptr<SHyprCtlCommand>> registeredHyprctlCommands;
|
||||
};
|
||||
|
||||
class CPluginSystem {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue