diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-05-18 18:13:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-18 19:13:20 +0200 |
| commit | 158c0f2911894f5f97af7361f639f97f6d100c82 (patch) | |
| tree | 21889748a9038dc66b2354ab4b09af6108f0c8fd /src/managers/input/InputManager.cpp | |
| parent | 44cb8f769e45cbe13edc6605e3b51ba041afd92f (diff) | |
permissions: add permission management for keyboards (#10367)
Diffstat (limited to 'src/managers/input/InputManager.cpp')
| -rw-r--r-- | src/managers/input/InputManager.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index cd603ca5..f9f36cf2 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -36,6 +36,7 @@ #include "../../managers/HookSystemManager.hpp" #include "../../managers/EventManager.hpp" #include "../../managers/LayoutManager.hpp" +#include "../../managers/permissions/DynamicPermissionManager.hpp" #include "../../helpers/time/Time.hpp" @@ -1054,6 +1055,27 @@ void CInputManager::applyConfigToKeyboard(SP<IKeyboard> pKeyboard) { pKeyboard->m_resolveBindsBySym = RESOLVEBINDSBYSYM; pKeyboard->m_allowBinds = ALLOWBINDS; + const auto PERM = g_pDynamicPermissionManager->clientPermissionModeWithString(-1, pKeyboard->m_hlName, PERMISSION_TYPE_KEYBOARD); + if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) { + const auto PROMISE = g_pDynamicPermissionManager->promiseFor(-1, pKeyboard->m_hlName, PERMISSION_TYPE_KEYBOARD); + if (!PROMISE) + Debug::log(ERR, "BUG THIS: No promise for client permission for keyboard"); + else { + PROMISE->then([k = WP<IKeyboard>{pKeyboard}](SP<CPromiseResult<eDynamicPermissionAllowMode>> r) { + if (r->hasError()) { + Debug::log(ERR, "BUG THIS: No permission returned for keyboard"); + return; + } + + if (!k) + return; + + k->m_allowed = r->result() == PERMISSION_RULE_ALLOW_MODE_ALLOW; + }); + } + } else + pKeyboard->m_allowed = PERM == PERMISSION_RULE_ALLOW_MODE_ALLOW; + try { if (NUMLOCKON == pKeyboard->m_numlockOn && REPEATDELAY == pKeyboard->m_repeatDelay && REPEATRATE == pKeyboard->m_repeatRate && RULES != "" && RULES == pKeyboard->m_currentRules.rules && MODEL == pKeyboard->m_currentRules.model && LAYOUT == pKeyboard->m_currentRules.layout && @@ -1382,7 +1404,7 @@ void CInputManager::updateKeyboardsLeds(SP<IKeyboard> pKeyboard) { } void CInputManager::onKeyboardKey(std::any event, SP<IKeyboard> pKeyboard) { - if (!pKeyboard->m_enabled) + if (!pKeyboard->m_enabled || !pKeyboard->m_allowed) return; const bool DISALLOWACTION = pKeyboard->isVirtual() && shouldIgnoreVirtualKeyboard(pKeyboard); |
