mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-20 04:30:06 +01:00
touchpad: Keep track of associated trackpoint device
The top soft buttons are intended for use with a trackpoint, and to e.g. make middle button scrolling work correctly, we must post the events for these "buttons" through the trackpoint device. This commit is a preparation patch for this, it adds a link to the trackpoint to the touchpad, but does not yet do anything with it. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
3bf9b02d81
commit
a8ffc096be
4 changed files with 19 additions and 0 deletions
|
|
@ -642,6 +642,10 @@ tp_device_added(struct evdev_device *device,
|
|||
{
|
||||
struct tp_dispatch *tp = (struct tp_dispatch*)device->dispatch;
|
||||
|
||||
if (tp->buttons.trackpoint == NULL &&
|
||||
(added_device->tags & EVDEV_TAG_TRACKPOINT))
|
||||
tp->buttons.trackpoint = added_device;
|
||||
|
||||
if (tp->sendevents.current_mode !=
|
||||
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
||||
return;
|
||||
|
|
@ -657,6 +661,9 @@ tp_device_removed(struct evdev_device *device,
|
|||
struct tp_dispatch *tp = (struct tp_dispatch*)device->dispatch;
|
||||
struct libinput_device *dev;
|
||||
|
||||
if (removed_device == tp->buttons.trackpoint)
|
||||
tp->buttons.trackpoint = NULL;
|
||||
|
||||
if (tp->sendevents.current_mode !=
|
||||
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -198,6 +198,8 @@ struct tp_dispatch {
|
|||
int32_t rightbutton_left_edge;
|
||||
int32_t leftbutton_right_edge;
|
||||
} top_area;
|
||||
|
||||
struct evdev_device *trackpoint;
|
||||
} buttons; /* physical buttons */
|
||||
|
||||
enum touchpad_event queued;
|
||||
|
|
|
|||
|
|
@ -606,6 +606,14 @@ evdev_tag_external_mouse(struct evdev_device *device,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
evdev_tag_trackpoint(struct evdev_device *device,
|
||||
struct udev_device *udev_device)
|
||||
{
|
||||
if (libevdev_has_property(device->evdev, INPUT_PROP_POINTING_STICK))
|
||||
device->tags |= EVDEV_TAG_TRACKPOINT;
|
||||
}
|
||||
|
||||
static void
|
||||
fallback_process(struct evdev_dispatch *dispatch,
|
||||
struct evdev_device *device,
|
||||
|
|
@ -644,6 +652,7 @@ fallback_tag_device(struct evdev_device *device,
|
|||
struct udev_device *udev_device)
|
||||
{
|
||||
evdev_tag_external_mouse(device, udev_device);
|
||||
evdev_tag_trackpoint(device, udev_device);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ enum evdev_device_seat_capability {
|
|||
enum evdev_device_tags {
|
||||
EVDEV_TAG_EXTERNAL_MOUSE = (1 << 0),
|
||||
EVDEV_TAG_INTERNAL_TOUCHPAD = (1 << 1),
|
||||
EVDEV_TAG_TRACKPOINT = (1 << 2),
|
||||
};
|
||||
|
||||
struct mt_slot {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue