mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-20 06:50:05 +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;
|
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 !=
|
if (tp->sendevents.current_mode !=
|
||||||
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
||||||
return;
|
return;
|
||||||
|
|
@ -657,6 +661,9 @@ tp_device_removed(struct evdev_device *device,
|
||||||
struct tp_dispatch *tp = (struct tp_dispatch*)device->dispatch;
|
struct tp_dispatch *tp = (struct tp_dispatch*)device->dispatch;
|
||||||
struct libinput_device *dev;
|
struct libinput_device *dev;
|
||||||
|
|
||||||
|
if (removed_device == tp->buttons.trackpoint)
|
||||||
|
tp->buttons.trackpoint = NULL;
|
||||||
|
|
||||||
if (tp->sendevents.current_mode !=
|
if (tp->sendevents.current_mode !=
|
||||||
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -198,6 +198,8 @@ struct tp_dispatch {
|
||||||
int32_t rightbutton_left_edge;
|
int32_t rightbutton_left_edge;
|
||||||
int32_t leftbutton_right_edge;
|
int32_t leftbutton_right_edge;
|
||||||
} top_area;
|
} top_area;
|
||||||
|
|
||||||
|
struct evdev_device *trackpoint;
|
||||||
} buttons; /* physical buttons */
|
} buttons; /* physical buttons */
|
||||||
|
|
||||||
enum touchpad_event queued;
|
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
|
static void
|
||||||
fallback_process(struct evdev_dispatch *dispatch,
|
fallback_process(struct evdev_dispatch *dispatch,
|
||||||
struct evdev_device *device,
|
struct evdev_device *device,
|
||||||
|
|
@ -644,6 +652,7 @@ fallback_tag_device(struct evdev_device *device,
|
||||||
struct udev_device *udev_device)
|
struct udev_device *udev_device)
|
||||||
{
|
{
|
||||||
evdev_tag_external_mouse(device, udev_device);
|
evdev_tag_external_mouse(device, udev_device);
|
||||||
|
evdev_tag_trackpoint(device, udev_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ enum evdev_device_seat_capability {
|
||||||
enum evdev_device_tags {
|
enum evdev_device_tags {
|
||||||
EVDEV_TAG_EXTERNAL_MOUSE = (1 << 0),
|
EVDEV_TAG_EXTERNAL_MOUSE = (1 << 0),
|
||||||
EVDEV_TAG_INTERNAL_TOUCHPAD = (1 << 1),
|
EVDEV_TAG_INTERNAL_TOUCHPAD = (1 << 1),
|
||||||
|
EVDEV_TAG_TRACKPOINT = (1 << 2),
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mt_slot {
|
struct mt_slot {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue