mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-02 15:30:34 +01:00
Pair touchpad and lid_switch for disable
Add listener for lid switch events, disable touchpad on switch event. Signed-off-by: James Ye <jye836@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
4aeb3cc018
commit
f1cf83425e
2 changed files with 54 additions and 0 deletions
|
|
@ -1176,6 +1176,10 @@ tp_remove_sendevents(struct tp_dispatch *tp)
|
|||
if (tp->dwt.keyboard)
|
||||
libinput_device_remove_event_listener(
|
||||
&tp->dwt.keyboard_listener);
|
||||
|
||||
if (tp->lid_switch.lid_switch)
|
||||
libinput_device_remove_event_listener(
|
||||
&tp->lid_switch.lid_switch_listener);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1552,6 +1556,50 @@ tp_pair_trackpoint(struct evdev_device *touchpad,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
tp_lid_switch_event(uint64_t time, struct libinput_event *event, void *data)
|
||||
{
|
||||
struct tp_dispatch *tp = data;
|
||||
struct libinput_event_switch *swev;
|
||||
|
||||
swev = libinput_event_get_switch_event(event);
|
||||
|
||||
if (swev) {
|
||||
switch (libinput_event_switch_get_switch_state(swev)) {
|
||||
case LIBINPUT_SWITCH_STATE_OFF:
|
||||
tp_resume(tp, tp->device);
|
||||
log_debug(tp_libinput_context(tp), "lid: resume touchpad\n");
|
||||
break;
|
||||
case LIBINPUT_SWITCH_STATE_ON:
|
||||
tp_suspend(tp, tp->device);
|
||||
log_debug(tp_libinput_context(tp), "lid: suspend touchpad\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
tp_pair_lid_switch(struct evdev_device *touchpad,
|
||||
struct evdev_device *lid_switch)
|
||||
{
|
||||
struct tp_dispatch *tp = (struct tp_dispatch*)touchpad->dispatch;
|
||||
|
||||
if ((lid_switch->tags & EVDEV_TAG_LID_SWITCH) == 0)
|
||||
return;
|
||||
|
||||
if (tp->lid_switch.lid_switch == NULL) {
|
||||
log_debug(tp_libinput_context(tp),
|
||||
"lid_switch: activated for %s<->%s\n",
|
||||
touchpad->devname,
|
||||
lid_switch->devname);
|
||||
|
||||
libinput_device_add_event_listener(&lid_switch->base,
|
||||
&tp->lid_switch.lid_switch_listener,
|
||||
tp_lid_switch_event, tp);
|
||||
tp->lid_switch.lid_switch = lid_switch;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
tp_interface_device_added(struct evdev_device *device,
|
||||
struct evdev_device *added_device)
|
||||
|
|
@ -1560,6 +1608,7 @@ tp_interface_device_added(struct evdev_device *device,
|
|||
|
||||
tp_pair_trackpoint(device, added_device);
|
||||
tp_dwt_pair_keyboard(device, added_device);
|
||||
tp_pair_lid_switch(device, added_device);
|
||||
|
||||
if (tp->sendevents.current_mode !=
|
||||
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE)
|
||||
|
|
|
|||
|
|
@ -376,6 +376,11 @@ struct tp_dispatch {
|
|||
*/
|
||||
unsigned int nonmotion_event_count;
|
||||
} quirks;
|
||||
|
||||
struct {
|
||||
struct libinput_event_listener lid_switch_listener;
|
||||
struct evdev_device *lid_switch;
|
||||
} lid_switch;
|
||||
};
|
||||
|
||||
#define tp_for_each_touch(_tp, _t) \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue