aboutsummaryrefslogtreecommitdiff
path: root/rootston/switch.c
diff options
context:
space:
mode:
authorRyan Walklin <ryan@testtoast.com>2018-11-28 20:03:42 +0000
committerRyan Walklin <ryan@crackotage.local>2018-12-15 14:42:35 +1100
commit810c7b700cfb381457ad1e5a07f184f4efdcc5d1 (patch)
treee7f909e9bac6ab8acaa6d5540a534088084fdebd /rootston/switch.c
parent62a9cf87fafdbc5f271ea1489f3d3f6bd7288b6e (diff)
Working switches in rootston:
Factor out switch handling to separate file Add formal enum for toggle action Implement binding actions
Diffstat (limited to 'rootston/switch.c')
-rw-r--r--rootston/switch.c33
1 files changed, 33 insertions, 0 deletions
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 <stdlib.h>
+
+#include <wlr/util/log.h>
+
+#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);
+ }
+ }
+}