Factor out switch handling to separate file Add formal enum for toggle action Implement binding actionsmaster
							parent
							
								
									62a9cf87fa
								
							
						
					
					
						commit
						810c7b700c
					
				@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					#ifndef ROOTSTON_SWITCH_H
 | 
				
			||||||
 | 
					#define ROOTSTON_SWITCH_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "rootston/input.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct roots_switch {
 | 
				
			||||||
 | 
					    struct roots_seat *seat;
 | 
				
			||||||
 | 
					    struct wlr_input_device *device;
 | 
				
			||||||
 | 
					    struct wl_listener device_destroy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    struct wl_listener toggle;
 | 
				
			||||||
 | 
					    struct wl_list link;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void roots_switch_handle_toggle(struct roots_switch *lid_switch,
 | 
				
			||||||
 | 
					        struct wlr_event_switch_toggle *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif // ROOTSTON_SWITCH_H
 | 
				
			||||||
@ -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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue