[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.
This commit is contained in:
Ryan Walklin 2018-11-14 23:24:55 +00:00 committed by Ryan Walklin
parent 8a56b96c55
commit 2a3c62b4d2
18 changed files with 261 additions and 1 deletions

View file

@ -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,

View file

@ -3,6 +3,7 @@
#include <xf86drmMode.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_switch.h>
#include <wlr/types/wlr_output_layout.h>
#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;

View file

@ -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;

View file

@ -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',

View file

@ -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 <wlr/types/wlr_switch.h>
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

View file

@ -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',

View file

@ -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 <wlr/types/wlr_touch.h>
#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/types/wlr_tablet_pad.h>
#include <wlr/types/wlr_switch.h>
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;

View file

@ -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 <stdint.h>
#include <wayland-server.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_list.h>
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