mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-22 06:59:44 -05:00
backend/libinput: Manage tablet tool livetimes
This adds the management code to manage tablet tools lifetimes from libinput. It follows the suggestion made in the tablet-unstable-v2.xml to destroy tablet_tools once all tablets that it got into contact with were removed from the system. This is implemented via a refcount. If a tool is *not* unique, it will be destroyed on proximity out. This is libinput specific and mentioned in libinput docs that tools will not be found again, so we shouldn't keep a reference to them. Also they can't be on other tablets as well, because they cannot be tracked. The naming in this commit is a bit off (to not break things). The wlr names stay the same, tablet_tool is the libinput_device with capaiblity LIBINPUT_DEVICE_CAP_TABLET_TOOL which is more akin to "tablet" in the tablet-unstable-v2 protocol. The struct that corresponds to the tablet_tool in tablet-unstable-v2 is called tablet_tool_tool, a rename should be done at some point in the future.
This commit is contained in:
parent
bf8751d632
commit
000b305ecc
4 changed files with 222 additions and 1 deletions
|
|
@ -67,6 +67,7 @@ void handle_touch_cancel(struct libinput_event *event,
|
|||
|
||||
struct wlr_tablet_tool *create_libinput_tablet_tool(
|
||||
struct libinput_device *device);
|
||||
void wlr_libinput_tablet_tool_destroy(struct wlr_input_device *device);
|
||||
void handle_tablet_tool_axis(struct libinput_event *event,
|
||||
struct libinput_device *device);
|
||||
void handle_tablet_tool_proximity(struct libinput_event *event,
|
||||
|
|
|
|||
|
|
@ -5,6 +5,41 @@
|
|||
#include <wayland-server.h>
|
||||
#include <wlr/types/wlr_input_device.h>
|
||||
|
||||
/*
|
||||
* Copy+Paste from libinput, but this should neither use libinput, nor
|
||||
* tablet-unstable-v2 headers, so we can't include them
|
||||
*/
|
||||
enum wlr_tablet_tool_type {
|
||||
WLR_TABLET_TOOL_TYPE_PEN = 1, /**< A generic pen */
|
||||
WLR_TABLET_TOOL_TYPE_ERASER, /**< Eraser */
|
||||
WLR_TABLET_TOOL_TYPE_BRUSH, /**< A paintbrush-like tool */
|
||||
WLR_TABLET_TOOL_TYPE_PENCIL, /**< Physical drawing tool, e.g.
|
||||
Wacom Inking Pen */
|
||||
WLR_TABLET_TOOL_TYPE_AIRBRUSH, /**< An airbrush-like tool */
|
||||
WLR_TABLET_TOOL_TYPE_MOUSE, /**< A mouse bound to the tablet */
|
||||
WLR_TABLET_TOOL_TYPE_LENS, /**< A mouse tool with a lens */
|
||||
};
|
||||
|
||||
struct wlr_tablet_tool_tool {
|
||||
enum wlr_tablet_tool_type type;
|
||||
uint64_t hardware_serial;
|
||||
uint64_t hardware_wacom;
|
||||
|
||||
// Capabilities
|
||||
bool tilt;
|
||||
bool pressure;
|
||||
bool distance;
|
||||
bool rotation;
|
||||
bool slider;
|
||||
bool wheel;
|
||||
|
||||
struct {
|
||||
struct wl_signal destroy;
|
||||
} events;
|
||||
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct wlr_tablet_tool_impl;
|
||||
|
||||
struct wlr_tablet_tool {
|
||||
|
|
@ -34,6 +69,8 @@ enum wlr_tablet_tool_axes {
|
|||
|
||||
struct wlr_event_tablet_tool_axis {
|
||||
struct wlr_input_device *device;
|
||||
struct wlr_tablet_tool_tool *tool;
|
||||
|
||||
uint32_t time_msec;
|
||||
uint32_t updated_axes;
|
||||
// From 0..1
|
||||
|
|
@ -53,6 +90,7 @@ enum wlr_tablet_tool_proximity_state {
|
|||
|
||||
struct wlr_event_tablet_tool_proximity {
|
||||
struct wlr_input_device *device;
|
||||
struct wlr_tablet_tool_tool *tool;
|
||||
uint32_t time_msec;
|
||||
// From 0..1
|
||||
double x, y;
|
||||
|
|
@ -66,6 +104,7 @@ enum wlr_tablet_tool_tip_state {
|
|||
|
||||
struct wlr_event_tablet_tool_tip {
|
||||
struct wlr_input_device *device;
|
||||
struct wlr_tablet_tool_tool *tool;
|
||||
uint32_t time_msec;
|
||||
// From 0..1
|
||||
double x, y;
|
||||
|
|
@ -74,6 +113,7 @@ struct wlr_event_tablet_tool_tip {
|
|||
|
||||
struct wlr_event_tablet_tool_button {
|
||||
struct wlr_input_device *device;
|
||||
struct wlr_tablet_tool_tool *tool;
|
||||
uint32_t time_msec;
|
||||
uint32_t button;
|
||||
enum wlr_button_state state;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue