InputManager: add config option to disable keybinds per device (#10064)

This commit is contained in:
nyx
2025-04-16 20:19:10 -04:00
committed by GitHub
parent 3fa6320a39
commit 225e13c3cc
4 changed files with 14 additions and 4 deletions

View File

@@ -759,6 +759,7 @@ CConfigManager::CConfigManager() {
m_pConfig->addSpecialConfigValue("device", "active_area_size", Hyprlang::VEC2{0, 0}); // only for tablets
m_pConfig->addSpecialConfigValue("device", "flip_x", Hyprlang::INT{0}); // only for touchpads
m_pConfig->addSpecialConfigValue("device", "flip_y", Hyprlang::INT{0}); // only for touchpads
m_pConfig->addSpecialConfigValue("device", "keybinds", Hyprlang::INT{1}); // enable/disable keybinds
// keywords
m_pConfig->registerHandler(&::handleExec, "exec", {false});

View File

@@ -74,8 +74,9 @@ class IKeyboard : public IHID {
void updateXkbStateWithKey(uint32_t xkbKey, bool pressed);
void updateKeymapFD();
bool active = false;
bool enabled = true;
bool active = false;
bool enabled = true;
bool allowBinds = true;
// if the keymap is overridden by the implementation,
// don't try to set keyboard rules anymore, to avoid overwriting the requested one.

View File

@@ -432,7 +432,10 @@ bool CKeybindManager::onKeyEvent(std::any event, SP<IKeyboard> pKeyboard) {
return true;
}
auto e = std::any_cast<IKeyboard::SKeyEvent>(event);
auto e = std::any_cast<IKeyboard::SKeyEvent>(event);
if (!pKeyboard->allowBinds)
return true;
const auto KEYCODE = e.keycode + 8; // Because to xkbcommon it's +8 from libinput

View File

@@ -1022,10 +1022,12 @@ void CInputManager::applyConfigToKeyboard(SP<IKeyboard> pKeyboard) {
const auto VARIANT = g_pConfigManager->getDeviceString(devname, "kb_variant", "input:kb_variant");
const auto OPTIONS = g_pConfigManager->getDeviceString(devname, "kb_options", "input:kb_options");
const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true;
const auto ENABLED = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "enabled") : true;
const auto ALLOWBINDS = HASCONFIG ? g_pConfigManager->getDeviceInt(devname, "keybinds") : true;
pKeyboard->enabled = ENABLED;
pKeyboard->resolveBindsBySym = RESOLVEBINDSBYSYM;
pKeyboard->allowBinds = ALLOWBINDS;
try {
if (NUMLOCKON == pKeyboard->numlockOn && REPEATDELAY == pKeyboard->repeatDelay && REPEATRATE == pKeyboard->repeatRate && RULES != "" &&
@@ -1538,6 +1540,9 @@ uint32_t CInputManager::accumulateModsFromAllKBs() {
if (!kb->enabled)
continue;
if (!kb->allowBinds)
continue;
finalMask |= kb->getModifiers();
}