summaryrefslogtreecommitdiff
path: root/src/managers/input/InputManager.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2025-05-18 18:13:20 +0100
committerGitHub <noreply@github.com>2025-05-18 19:13:20 +0200
commit158c0f2911894f5f97af7361f639f97f6d100c82 (patch)
tree21889748a9038dc66b2354ab4b09af6108f0c8fd /src/managers/input/InputManager.cpp
parent44cb8f769e45cbe13edc6605e3b51ba041afd92f (diff)
permissions: add permission management for keyboards (#10367)
Diffstat (limited to 'src/managers/input/InputManager.cpp')
-rw-r--r--src/managers/input/InputManager.cpp24
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);