aboutsummaryrefslogtreecommitdiff
path: root/rootston/switch.c
blob: 3ccaad6ac80ad82a26277d36a6b31501247cae5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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);
        }
    }
}