switches: do not fire on no change in toggle

This commit is contained in:
vaxerski 2023-03-16 16:30:22 +00:00
parent e8adae65fe
commit 162f235972
2 changed files with 9 additions and 2 deletions

View file

@ -358,6 +358,8 @@ struct STouchDevice {
struct SSwitchDevice { struct SSwitchDevice {
wlr_input_device* pWlrDevice = nullptr; wlr_input_device* pWlrDevice = nullptr;
int status = -1; // uninitialized
DYNLISTENER(destroy); DYNLISTENER(destroy);
DYNLISTENER(toggle); DYNLISTENER(toggle);

View file

@ -1307,13 +1307,16 @@ void CInputManager::newSwitch(wlr_input_device* pDevice) {
[&](void* owner, void* data) { [&](void* owner, void* data) {
const auto PDEVICE = (SSwitchDevice*)owner; const auto PDEVICE = (SSwitchDevice*)owner;
const auto NAME = std::string(PDEVICE->pWlrDevice->name); 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()); Debug::log(LOG, "Switch %s fired, triggering binds.", NAME.c_str());
g_pKeybindManager->onSwitchEvent(NAME); g_pKeybindManager->onSwitchEvent(NAME);
const auto event_data = (wlr_switch_toggle_event*)data; switch (E->switch_state) {
switch (event_data->switch_state) {
case WLR_SWITCH_STATE_ON: case WLR_SWITCH_STATE_ON:
Debug::log(LOG, "Switch %s turn on, triggering binds.", NAME.c_str()); Debug::log(LOG, "Switch %s turn on, triggering binds.", NAME.c_str());
g_pKeybindManager->onSwitchOnEvent(NAME); g_pKeybindManager->onSwitchOnEvent(NAME);
@ -1323,6 +1326,8 @@ void CInputManager::newSwitch(wlr_input_device* pDevice) {
g_pKeybindManager->onSwitchOffEvent(NAME); g_pKeybindManager->onSwitchOffEvent(NAME);
break; break;
} }
PDEVICE->status = E->switch_state;
}, },
PNEWDEV, "SwitchDevice"); PNEWDEV, "SwitchDevice");
} }