diff options
author | vaxerski <[email protected]> | 2023-03-16 16:30:22 +0000 |
---|---|---|
committer | vaxerski <[email protected]> | 2023-03-16 16:30:22 +0000 |
commit | 162f23597272a472d4a70f3069f60fd77ea9734b (patch) | |
tree | 82373b74c843a075642c2f9218b3733a91d6934c /src | |
parent | e8adae65feb26a16693490a3a1bc10d953e031d8 (diff) | |
download | Hyprland-162f23597272a472d4a70f3069f60fd77ea9734b.tar.gz Hyprland-162f23597272a472d4a70f3069f60fd77ea9734b.zip |
switches: do not fire on no change in toggle
Diffstat (limited to 'src')
-rw-r--r-- | src/helpers/WLClasses.hpp | 2 | ||||
-rw-r--r-- | src/managers/input/InputManager.cpp | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp index 8a96c6ff..55524ad1 100644 --- a/src/helpers/WLClasses.hpp +++ b/src/helpers/WLClasses.hpp @@ -358,6 +358,8 @@ struct STouchDevice { struct SSwitchDevice { wlr_input_device* pWlrDevice = nullptr; + int status = -1; // uninitialized + DYNLISTENER(destroy); DYNLISTENER(toggle); diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 99b41392..738e1011 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -1307,13 +1307,16 @@ void CInputManager::newSwitch(wlr_input_device* pDevice) { [&](void* owner, void* data) { const auto PDEVICE = (SSwitchDevice*)owner; const auto NAME = std::string(PDEVICE->pWlrDevice->name); + const auto E = (wlr_switch_toggle_event*)data; + + if (PDEVICE->status != -1 && PDEVICE->status == E->switch_state) + return; Debug::log(LOG, "Switch %s fired, triggering binds.", NAME.c_str()); g_pKeybindManager->onSwitchEvent(NAME); - const auto event_data = (wlr_switch_toggle_event*)data; - switch (event_data->switch_state) { + switch (E->switch_state) { case WLR_SWITCH_STATE_ON: Debug::log(LOG, "Switch %s turn on, triggering binds.", NAME.c_str()); g_pKeybindManager->onSwitchOnEvent(NAME); @@ -1323,6 +1326,8 @@ void CInputManager::newSwitch(wlr_input_device* pDevice) { g_pKeybindManager->onSwitchOffEvent(NAME); break; } + + PDEVICE->status = E->switch_state; }, PNEWDEV, "SwitchDevice"); } |