Improve event matching logic

This commit is contained in:
Ryan Walklin 2018-12-15 14:57:25 +11:00
parent 8f5ec5e2bb
commit 282fcd458c

View file

@ -15,19 +15,14 @@ void roots_switch_handle_toggle(struct roots_switch *lid_switch,
wl_list_for_each(sc, bound_switches, link) { wl_list_for_each(sc, bound_switches, link) {
bool device_match = false; bool device_match = false;
bool state_match = false; bool state_match = false;
if ((sc->name != NULL && strcmp(event->device->name, sc->name) == 0) || if ((sc->name != NULL && strcmp(event->device->name, sc->name) != 0) &&
(sc->name == NULL && event->switch_type == sc->switch_type)) { (sc->name == NULL && event->switch_type != sc->switch_type)) {
device_match = true; continue;
} }
if (!device_match) { if (sc->switch_state != WLR_SWITCH_STATE_TOGGLE &&
break; event->switch_state != sc->switch_state) {
continue;
} }
if (sc->switch_state == WLR_SWITCH_STATE_TOGGLE ||
event->switch_state == sc->switch_state) {
state_match = true;
}
if (device_match && state_match) {
execute_binding_command(lid_switch->seat, lid_switch->seat->input, sc->command); execute_binding_command(lid_switch->seat, lid_switch->seat->input, sc->command);
} }
} }
}