mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-07-25 17:21:54 -07:00
InputManager: add config option to disable keybinds per device (#10064)
This commit is contained in:
@@ -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});
|
||||
|
@@ -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.
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user