From 2a3c62b4d28ec7a69473e9c18c42f1ed26c74bbf Mon Sep 17 00:00:00 2001 From: Ryan Walklin Date: Wed, 14 Nov 2018 23:24:55 +0000 Subject: [WIP][DONTMERGE]Add support for libinput_switch input devices These are used primarily by laptops to signal the state of the lid (open/closed) and tablet mode if supported, based on ACPI events. --- include/backend/libinput.h | 5 ++++ include/rootston/config.h | 10 ++++++++ include/rootston/seat.h | 10 ++++++++ include/wlr/interfaces/meson.build | 1 + include/wlr/interfaces/wlr_switch.h | 22 +++++++++++++++++ include/wlr/types/meson.build | 1 + include/wlr/types/wlr_input_device.h | 3 +++ include/wlr/types/wlr_switch.h | 46 ++++++++++++++++++++++++++++++++++++ 8 files changed, 98 insertions(+) create mode 100644 include/wlr/interfaces/wlr_switch.h create mode 100644 include/wlr/types/wlr_switch.h (limited to 'include') diff --git a/include/backend/libinput.h b/include/backend/libinput.h index 9531091f..f4886956 100644 --- a/include/backend/libinput.h +++ b/include/backend/libinput.h @@ -55,6 +55,11 @@ void handle_pointer_button(struct libinput_event *event, void handle_pointer_axis(struct libinput_event *event, struct libinput_device *device); +struct wlr_switch *create_libinput_switch( + struct libinput_device *device); +void handle_switch_toggle(struct libinput_event *event, + struct libinput_device *device); + struct wlr_touch *create_libinput_touch( struct libinput_device *device); void handle_touch_down(struct libinput_event *event, diff --git a/include/rootston/config.h b/include/rootston/config.h index 86699c6a..a95b8377 100644 --- a/include/rootston/config.h +++ b/include/rootston/config.h @@ -3,6 +3,7 @@ #include #include +#include #include #define ROOTS_CONFIG_DEFAULT_SEAT_NAME "seat0" @@ -65,6 +66,14 @@ struct roots_cursor_config { struct wl_list link; }; +struct roots_switch_config { + enum wlr_switch_type switch_type; + enum wlr_switch_state switch_state; + bool run_on_toggle; + char *command; + struct wl_list link; +}; + struct roots_config { bool xwayland; bool xwayland_lazy; @@ -74,6 +83,7 @@ struct roots_config { struct wl_list bindings; struct wl_list keyboards; struct wl_list cursors; + struct wl_list switches; char *config_path; char *startup_cmd; diff --git a/include/rootston/seat.h b/include/rootston/seat.h index 0187c6cc..7e6b63bf 100644 --- a/include/rootston/seat.h +++ b/include/rootston/seat.h @@ -32,6 +32,7 @@ struct roots_seat { struct wl_list keyboards; struct wl_list pointers; + struct wl_list switches; struct wl_list touch; struct wl_list tablets; struct wl_list tablet_pads; @@ -74,6 +75,15 @@ struct roots_pointer { struct wl_list link; }; +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; +}; + struct roots_touch { struct roots_seat *seat; struct wlr_input_device *device; diff --git a/include/wlr/interfaces/meson.build b/include/wlr/interfaces/meson.build index 207896b5..7d4d811d 100644 --- a/include/wlr/interfaces/meson.build +++ b/include/wlr/interfaces/meson.build @@ -3,6 +3,7 @@ install_headers( 'wlr_keyboard.h', 'wlr_output.h', 'wlr_pointer.h', + 'wlr_switch.h', 'wlr_tablet_pad.h', 'wlr_tablet_tool.h', 'wlr_touch.h', diff --git a/include/wlr/interfaces/wlr_switch.h b/include/wlr/interfaces/wlr_switch.h new file mode 100644 index 00000000..0b0454f5 --- /dev/null +++ b/include/wlr/interfaces/wlr_switch.h @@ -0,0 +1,22 @@ +/* + * This an unstable interface of wlroots. No guarantees are made regarding the + * future consistency of this API. + */ +#ifndef WLR_USE_UNSTABLE +#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features" +#endif + +#ifndef WLR_INTERFACES_WLR_SWITCH_H +#define WLR_INTERFACES_WLR_SWITCH_H + +#include + +struct wlr_switch_impl { + void (*destroy)(struct wlr_switch *lid_switch); +}; + +void wlr_switch_init(struct wlr_switch *lid_switch, + struct wlr_switch_impl *impl); +void wlr_switch_destroy(struct wlr_switch *lid_switch); + +#endif diff --git a/include/wlr/types/meson.build b/include/wlr/types/meson.build index e2ce86e3..752c0dea 100644 --- a/include/wlr/types/meson.build +++ b/include/wlr/types/meson.build @@ -32,6 +32,7 @@ install_headers( 'wlr_seat.h', 'wlr_server_decoration.h', 'wlr_surface.h', + 'wlr_switch.h', 'wlr_tablet_pad.h', 'wlr_tablet_tool.h', 'wlr_tablet_v2.h', diff --git a/include/wlr/types/wlr_input_device.h b/include/wlr/types/wlr_input_device.h index ab0aecb6..f948d55b 100644 --- a/include/wlr/types/wlr_input_device.h +++ b/include/wlr/types/wlr_input_device.h @@ -20,6 +20,7 @@ enum wlr_input_device_type { WLR_INPUT_DEVICE_TOUCH, WLR_INPUT_DEVICE_TABLET_TOOL, WLR_INPUT_DEVICE_TABLET_PAD, + WLR_INPUT_DEVICE_SWITCH, }; /* Note: these are circular dependencies */ @@ -28,6 +29,7 @@ enum wlr_input_device_type { #include #include #include +#include struct wlr_input_device_impl; @@ -46,6 +48,7 @@ struct wlr_input_device { void *_device; struct wlr_keyboard *keyboard; struct wlr_pointer *pointer; + struct wlr_switch *lid_switch; struct wlr_touch *touch; struct wlr_tablet *tablet; struct wlr_tablet_pad *tablet_pad; diff --git a/include/wlr/types/wlr_switch.h b/include/wlr/types/wlr_switch.h new file mode 100644 index 00000000..52b631b5 --- /dev/null +++ b/include/wlr/types/wlr_switch.h @@ -0,0 +1,46 @@ +/* + * This an unstable interface of wlroots. No guarantees are made regarding the + * future consistency of this API. + */ +#ifndef WLR_USE_UNSTABLE +#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features" +#endif + +#ifndef WLR_TYPES_WLR_SWITCH_H +#define WLR_TYPES_WLR_SWITCH_H + +#include +#include +#include +#include + +struct wlr_switch_impl; + +struct wlr_switch { + struct wlr_switch_impl *impl; + + struct { + struct wl_signal toggle; + } events; + + void *data; +}; + +enum wlr_switch_type { + WLR_SWITCH_TYPE_LID = 1, + WLR_SWITCH_TYPE_TABLET_MODE, +}; + +enum wlr_switch_state { + WLR_SWITCH_STATE_OFF = 0, + WLR_SWITCH_STATE_ON = 1, +}; + +struct wlr_event_switch_toggle { + struct wlr_input_device *device; + uint32_t time_msec; + enum wlr_switch_type switch_type; + enum wlr_switch_state switch_state; +}; + +#endif -- cgit v1.2.3