From 1f396db45f1c43bc32a0a0f1fdfaba2cb17996be Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Fri, 24 Apr 2026 19:44:55 +0530 Subject: [PATCH 01/11] input: add enable/disable support for tablet devices --- src/config/legacy/ConfigManager.cpp | 29 ++++++++++------------ src/managers/input/Tablets.cpp | 37 +++++++++++++++++++++++++---- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/config/legacy/ConfigManager.cpp b/src/config/legacy/ConfigManager.cpp index 088b559a2..aeea97588 100644 --- a/src/config/legacy/ConfigManager.cpp +++ b/src/config/legacy/ConfigManager.cpp @@ -485,29 +485,24 @@ CConfigManager::CConfigManager() { for (const auto& v : Values::CONFIG_VALUES) { const char* NAME = v->name(); - if (auto p = dc(v.get())) + if (auto p = dynamic_cast(v.get())) registerConfigVar(NAME, Hyprlang::INT{p->defaultVal()}); - else if (auto p = dc(v.get())) + else if (auto p = dynamic_cast(v.get())) registerConfigVar(NAME, Hyprlang::FLOAT{p->defaultVal()}); - else if (auto p = dc(v.get())) + else if (auto p = dynamic_cast(v.get())) registerConfigVar(NAME, Hyprlang::INT{p->defaultVal() ? 1 : 0}); - else if (auto p = dc(v.get())) + else if (auto p = dynamic_cast(v.get())) registerConfigVar(NAME, Hyprlang::STRING{p->defaultVal().c_str()}); - else if (auto p = dc(v.get())) + else if (auto p = dynamic_cast(v.get())) registerConfigVar(NAME, Hyprlang::INT{p->defaultVal()}); - else if (auto p = dc(v.get())) + else if (auto p = dynamic_cast(v.get())) registerConfigVar(NAME, Hyprlang::VEC2{p->defaultVal().x, p->defaultVal().y}); - else if (auto p = dc(v.get())) - registerConfigVar(NAME, Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, std::to_string(p->defaultVal().m_top).c_str()}); - else if (auto p = dc(v.get())) - registerConfigVar(NAME, - Hyprlang::CConfigCustomValueType{&configHandleFontWeightSet, configHandleFontWeightDestroy, std::format("{}", p->defaultVal().m_value).c_str()}); - else if (auto p = dc(v.get())) - registerConfigVar(NAME, - Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, - std::format("0x{:x}", (int64_t)p->defaultVal().m_colors.begin()->getAsHex()).c_str()}); - else - RASSERT(false, "legacy cfg: bad value {}", NAME); + else if (auto p = dynamic_cast(v.get())) + registerConfigVar(NAME, Hyprlang::CUSTOMTYPE{configHandleGapSet, configHandleGapDestroy, std::to_string(p->defaultVal().m_top).c_str()}); + else if (auto p = dynamic_cast(v.get())) + registerConfigVar(NAME, Hyprlang::CUSTOMTYPE{configHandleFontWeightSet, configHandleFontWeightDestroy, std::to_string(p->defaultVal().m_value).c_str()}); + else if (auto p = dynamic_cast(v.get())) + registerConfigVar(NAME, Hyprlang::CUSTOMTYPE{configHandleGradientSet, configHandleGradientDestroy, "0x000000"}); } registerConfigVar("autogenerated", Hyprlang::INT{0}); diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index a2fec15c2..ced141dba 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -7,6 +7,7 @@ #include "../../protocols/PointerConstraints.hpp" #include "../../protocols/core/DataDevice.hpp" #include "../../event/EventBus.hpp" +#include "../../config/ConfigManager.hpp" static void unfocusTool(SP tool) { if (!tool->getSurface()) @@ -105,14 +106,20 @@ static Vector2D transformToActiveRegion(const Vector2D pos, const CBox activeAre return newPos; } - void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { + + const auto PTAB = e.tablet; + + const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); + + if (!ENABLED) + return; + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.axis.emit(e, info); if (info.cancelled) return; - const auto PTAB = e.tablet; const auto PTOOL = ensureTabletToolPresent(e.tool); if (PTOOL->m_active && (e.updatedAxes & (CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_X | CTablet::eTabletToolAxes::HID_TABLET_TOOL_AXIS_Y))) { @@ -176,12 +183,19 @@ void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { } void CInputManager::onTabletTip(CTablet::STipEvent e) { + + const auto PTAB = e.tablet; + + const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); + + if (!ENABLED) + return; + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.tip.emit(e, info); if (info.cancelled) return; - const auto PTAB = e.tablet; const auto PTOOL = ensureTabletToolPresent(e.tool); const auto POS = e.tip; @@ -204,6 +218,14 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { } void CInputManager::onTabletButton(CTablet::SButtonEvent e) { + + const auto PTAB = e.tablet; + + const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); + + if (!ENABLED) + return; + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.button.emit(e, info); if (info.cancelled) @@ -223,12 +245,19 @@ void CInputManager::onTabletButton(CTablet::SButtonEvent e) { } void CInputManager::onTabletProximity(CTablet::SProximityEvent e) { + + const auto PTAB = e.tablet; + + const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); + + if (!ENABLED) + return; + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.proximity.emit(e, info); if (info.cancelled) return; - const auto PTAB = e.tablet; const auto PTOOL = ensureTabletToolPresent(e.tool); PTOOL->m_active = e.in; From a5a2e7d570a73bfd7ff2268ac3eb0f83103f7d4b Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Fri, 24 Apr 2026 22:56:02 +0530 Subject: [PATCH 02/11] ci: rerun From a8f7bfce195a54e58925db33ffc027519079dc35 Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Fri, 24 Apr 2026 23:43:42 +0530 Subject: [PATCH 03/11] ci: rerun --- src/config/legacy/ConfigManager.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/config/legacy/ConfigManager.cpp b/src/config/legacy/ConfigManager.cpp index aeea97588..088b559a2 100644 --- a/src/config/legacy/ConfigManager.cpp +++ b/src/config/legacy/ConfigManager.cpp @@ -485,24 +485,29 @@ CConfigManager::CConfigManager() { for (const auto& v : Values::CONFIG_VALUES) { const char* NAME = v->name(); - if (auto p = dynamic_cast(v.get())) + if (auto p = dc(v.get())) registerConfigVar(NAME, Hyprlang::INT{p->defaultVal()}); - else if (auto p = dynamic_cast(v.get())) + else if (auto p = dc(v.get())) registerConfigVar(NAME, Hyprlang::FLOAT{p->defaultVal()}); - else if (auto p = dynamic_cast(v.get())) + else if (auto p = dc(v.get())) registerConfigVar(NAME, Hyprlang::INT{p->defaultVal() ? 1 : 0}); - else if (auto p = dynamic_cast(v.get())) + else if (auto p = dc(v.get())) registerConfigVar(NAME, Hyprlang::STRING{p->defaultVal().c_str()}); - else if (auto p = dynamic_cast(v.get())) + else if (auto p = dc(v.get())) registerConfigVar(NAME, Hyprlang::INT{p->defaultVal()}); - else if (auto p = dynamic_cast(v.get())) + else if (auto p = dc(v.get())) registerConfigVar(NAME, Hyprlang::VEC2{p->defaultVal().x, p->defaultVal().y}); - else if (auto p = dynamic_cast(v.get())) - registerConfigVar(NAME, Hyprlang::CUSTOMTYPE{configHandleGapSet, configHandleGapDestroy, std::to_string(p->defaultVal().m_top).c_str()}); - else if (auto p = dynamic_cast(v.get())) - registerConfigVar(NAME, Hyprlang::CUSTOMTYPE{configHandleFontWeightSet, configHandleFontWeightDestroy, std::to_string(p->defaultVal().m_value).c_str()}); - else if (auto p = dynamic_cast(v.get())) - registerConfigVar(NAME, Hyprlang::CUSTOMTYPE{configHandleGradientSet, configHandleGradientDestroy, "0x000000"}); + else if (auto p = dc(v.get())) + registerConfigVar(NAME, Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, std::to_string(p->defaultVal().m_top).c_str()}); + else if (auto p = dc(v.get())) + registerConfigVar(NAME, + Hyprlang::CConfigCustomValueType{&configHandleFontWeightSet, configHandleFontWeightDestroy, std::format("{}", p->defaultVal().m_value).c_str()}); + else if (auto p = dc(v.get())) + registerConfigVar(NAME, + Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, + std::format("0x{:x}", (int64_t)p->defaultVal().m_colors.begin()->getAsHex()).c_str()}); + else + RASSERT(false, "legacy cfg: bad value {}", NAME); } registerConfigVar("autogenerated", Hyprlang::INT{0}); From 72f6fae2b6739052f906f1944ea03daef9b2ac68 Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Sun, 26 Apr 2026 20:53:56 +0530 Subject: [PATCH 04/11] config: add input:tablet:enabled --- src/config/values/ConfigValues.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/values/ConfigValues.cpp b/src/config/values/ConfigValues.cpp index 943c9c832..015c486e6 100644 --- a/src/config/values/ConfigValues.cpp +++ b/src/config/values/ConfigValues.cpp @@ -331,7 +331,7 @@ std::vector> Values::getConfigValues() { MS("input:touchdevice:transform", "Transform the input from touchdevices.", 0, {.min = 0, .max = 6, .refresh = Supplementary::REFRESH_INPUT_DEVICES}), MS("input:touchdevice:output", "The monitor to bind touch devices.", "[[Auto]]", {.refresh = Supplementary::REFRESH_INPUT_DEVICES}), MS("input:touchdevice:enabled", "Whether input is enabled for touch devices.", true, {.refresh = Supplementary::REFRESH_INPUT_DEVICES}), - + MS("input:tablet:enabled", "enable/disable tablet input", true), /* * input:virtualkeyboard: */ From 37b5d536a668036dd670a33ade4b32f79226d19c Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:04:37 +0530 Subject: [PATCH 05/11] input: add tablet enable toggle (input:tablet:enabled) --- meta/hl.meta.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta/hl.meta.lua b/meta/hl.meta.lua index c00972fef..0bddecf24 100644 --- a/meta/hl.meta.lua +++ b/meta/hl.meta.lua @@ -262,6 +262,7 @@ ---| "input.tablet.absolute_region_position" ---| "input.tablet.active_area_position" ---| "input.tablet.active_area_size" +---| "input.tablet.enabled" ---| "input.tablet.left_handed" ---| "input.tablet.output" ---| "input.tablet.region_position" @@ -1070,6 +1071,7 @@ hl = {} ---@field ['input.tablet.absolute_region_position'] boolean ---@field ['input.tablet.active_area_position'] HL.Vec2Like ---@field ['input.tablet.active_area_size'] HL.Vec2Like +---@field ['input.tablet.enabled'] boolean ---@field ['input.tablet.left_handed'] boolean ---@field ['input.tablet.output'] string ---@field ['input.tablet.region_position'] HL.Vec2Like From c7d7f7d8db178f4f7f9b9e6314a672cee91563a8 Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:15:37 +0530 Subject: [PATCH 06/11] config: add refresh for tablet enabled --- src/config/values/ConfigValues.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/values/ConfigValues.cpp b/src/config/values/ConfigValues.cpp index 015c486e6..5a5e17b09 100644 --- a/src/config/values/ConfigValues.cpp +++ b/src/config/values/ConfigValues.cpp @@ -331,7 +331,7 @@ std::vector> Values::getConfigValues() { MS("input:touchdevice:transform", "Transform the input from touchdevices.", 0, {.min = 0, .max = 6, .refresh = Supplementary::REFRESH_INPUT_DEVICES}), MS("input:touchdevice:output", "The monitor to bind touch devices.", "[[Auto]]", {.refresh = Supplementary::REFRESH_INPUT_DEVICES}), MS("input:touchdevice:enabled", "Whether input is enabled for touch devices.", true, {.refresh = Supplementary::REFRESH_INPUT_DEVICES}), - MS("input:tablet:enabled", "enable/disable tablet input", true), + MS("input:tablet:enabled", "enable/disable tablet input", true, {.refresh = Supplementary::REFRESH_INPUT_DEVICES}), /* * input:virtualkeyboard: */ From 270d0c7d1e25f6c55ae6fad1d1a4336f549b663d Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:28:30 +0530 Subject: [PATCH 07/11] input: deduplicate tablet enabled check --- src/managers/input/Tablets.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index ced141dba..955259581 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -8,6 +8,9 @@ #include "../../protocols/core/DataDevice.hpp" #include "../../event/EventBus.hpp" #include "../../config/ConfigManager.hpp" +static bool isTabletEnabled(const SP& tab) { + return Config::mgr()->getDeviceInt(tab->m_hlName, "enabled", "input:tablet:enabled"); +} static void unfocusTool(SP tool) { if (!tool->getSurface()) @@ -109,10 +112,7 @@ static Vector2D transformToActiveRegion(const Vector2D pos, const CBox activeAre void CInputManager::onTabletAxis(CTablet::SAxisEvent e) { const auto PTAB = e.tablet; - - const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); - - if (!ENABLED) + if (!isTabletEnabled(PTAB)) return; Event::SCallbackInfo info; @@ -186,9 +186,7 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { const auto PTAB = e.tablet; - const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); - - if (!ENABLED) + if (!isTabletEnabled(PTAB)) return; Event::SCallbackInfo info; @@ -220,12 +218,9 @@ void CInputManager::onTabletTip(CTablet::STipEvent e) { void CInputManager::onTabletButton(CTablet::SButtonEvent e) { const auto PTAB = e.tablet; - - const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); - - if (!ENABLED) + if (!isTabletEnabled(PTAB)) return; - + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.button.emit(e, info); if (info.cancelled) @@ -247,12 +242,9 @@ void CInputManager::onTabletButton(CTablet::SButtonEvent e) { void CInputManager::onTabletProximity(CTablet::SProximityEvent e) { const auto PTAB = e.tablet; - - const auto ENABLED = Config::mgr()->getDeviceInt(PTAB->m_hlName, "enabled", "input:tablet:enabled"); - - if (!ENABLED) + if (!isTabletEnabled(PTAB)) return; - + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.proximity.emit(e, info); if (info.cancelled) From 38b5817ef238b65adcccd53543d1f2c8e28bed5a Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:33:25 +0530 Subject: [PATCH 08/11] format --- src/managers/input/Tablets.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 955259581..1ad06fe27 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -220,7 +220,7 @@ void CInputManager::onTabletButton(CTablet::SButtonEvent e) { const auto PTAB = e.tablet; if (!isTabletEnabled(PTAB)) return; - + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.button.emit(e, info); if (info.cancelled) @@ -244,7 +244,7 @@ void CInputManager::onTabletProximity(CTablet::SProximityEvent e) { const auto PTAB = e.tablet; if (!isTabletEnabled(PTAB)) return; - + Event::SCallbackInfo info; Event::bus()->m_events.input.tablet.proximity.emit(e, info); if (info.cancelled) From 0b7f707478831177d86c3db8d95fa0f930ab9774 Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:44:30 +0530 Subject: [PATCH 09/11] input: make tablet enabled check explicit --- src/managers/input/Tablets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/managers/input/Tablets.cpp b/src/managers/input/Tablets.cpp index 1ad06fe27..a72d8c53a 100644 --- a/src/managers/input/Tablets.cpp +++ b/src/managers/input/Tablets.cpp @@ -9,7 +9,7 @@ #include "../../event/EventBus.hpp" #include "../../config/ConfigManager.hpp" static bool isTabletEnabled(const SP& tab) { - return Config::mgr()->getDeviceInt(tab->m_hlName, "enabled", "input:tablet:enabled"); + return Config::mgr()->getDeviceInt(tab->m_hlName, "enabled", "input:tablet:enabled") != 0; } static void unfocusTool(SP tool) { From 96ca4df9ff6292ce88aabdcc70281e9285c9bf8f Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Mon, 27 Apr 2026 19:43:57 +0530 Subject: [PATCH 10/11] ci: rerun From f1d768f75a55474cf17b453d0825c6b5c46c982a Mon Sep 17 00:00:00 2001 From: B2krobbery <150381094+B2krobbery@users.noreply.github.com> Date: Mon, 27 Apr 2026 20:11:44 +0530 Subject: [PATCH 11/11] ci