From 810c7b700cfb381457ad1e5a07f184f4efdcc5d1 Mon Sep 17 00:00:00 2001 From: Ryan Walklin Date: Wed, 28 Nov 2018 20:03:42 +0000 Subject: Working switches in rootston: Factor out switch handling to separate file Add formal enum for toggle action Implement binding actions --- rootston/switch.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 rootston/switch.c (limited to 'rootston/switch.c') diff --git a/rootston/switch.c b/rootston/switch.c new file mode 100644 index 00000000..3ccaad6a --- /dev/null +++ b/rootston/switch.c @@ -0,0 +1,33 @@ +#include + +#include + +#include "rootston/bindings.h" +#include "rootston/config.h" +#include "rootston/input.h" +#include "rootston/seat.h" +#include "rootston/switch.h" + +void roots_switch_handle_toggle(struct roots_switch *lid_switch, + struct wlr_event_switch_toggle *event) { + struct wl_list *bound_switches = &lid_switch->seat->input->server->config->switches; + struct roots_switch_config *sc; + wl_list_for_each(sc, bound_switches, link) { + bool device_match = false; + bool state_match = false; + if ((sc->name != NULL && strcmp(event->device->name, sc->name) == 0) || + (sc->name == NULL && event->switch_type == sc->switch_type)) { + device_match = true; + } + if (!device_match) { + break; + } + 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); + } + } +} -- cgit v1.2.3 From 282fcd458cc8e6ecd757174fe7f10271c323f0e7 Mon Sep 17 00:00:00 2001 From: Ryan Walklin Date: Sat, 15 Dec 2018 14:57:25 +1100 Subject: Improve event matching logic --- rootston/switch.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'rootston/switch.c') diff --git a/rootston/switch.c b/rootston/switch.c index 3ccaad6a..b480e054 100644 --- a/rootston/switch.c +++ b/rootston/switch.c @@ -15,19 +15,14 @@ void roots_switch_handle_toggle(struct roots_switch *lid_switch, wl_list_for_each(sc, bound_switches, link) { bool device_match = false; bool state_match = false; - if ((sc->name != NULL && strcmp(event->device->name, sc->name) == 0) || - (sc->name == NULL && event->switch_type == sc->switch_type)) { - device_match = true; + if ((sc->name != NULL && strcmp(event->device->name, sc->name) != 0) && + (sc->name == NULL && event->switch_type != sc->switch_type)) { + continue; } - if (!device_match) { - break; - } - 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); + if (sc->switch_state != WLR_SWITCH_STATE_TOGGLE && + event->switch_state != sc->switch_state) { + continue; } + execute_binding_command(lid_switch->seat, lid_switch->seat->input, sc->command); } } -- cgit v1.2.3 From f8129ecbc5147a62d93d6bac5e61e5ce79d89667 Mon Sep 17 00:00:00 2001 From: Ryan Walklin Date: Sat, 15 Dec 2018 14:59:51 +1100 Subject: Remove unused variables --- rootston/switch.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'rootston/switch.c') diff --git a/rootston/switch.c b/rootston/switch.c index b480e054..65c5e627 100644 --- a/rootston/switch.c +++ b/rootston/switch.c @@ -13,8 +13,6 @@ void roots_switch_handle_toggle(struct roots_switch *lid_switch, struct wl_list *bound_switches = &lid_switch->seat->input->server->config->switches; struct roots_switch_config *sc; wl_list_for_each(sc, bound_switches, link) { - bool device_match = false; - bool state_match = false; if ((sc->name != NULL && strcmp(event->device->name, sc->name) != 0) && (sc->name == NULL && event->switch_type != sc->switch_type)) { continue; -- cgit v1.2.3