mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-01 22:58:38 -04:00
[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:
parent
8a56b96c55
commit
2a3c62b4d2
18 changed files with 261 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
22
include/wlr/interfaces/wlr_switch.h
Normal file
22
include/wlr/interfaces/wlr_switch.h
Normal 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
|
||||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
46
include/wlr/types/wlr_switch.h
Normal file
46
include/wlr/types/wlr_switch.h
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue