From 87f3ea760c7375b464ec10a295f9e3a3ae56386c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 24 Jan 2017 12:16:08 +1000 Subject: [PATCH] touchpad: check for a switch type before handling the event Don't call get_switch_event immediately, doing so for non-switch events is documented as a bug. Check the event type instead, if that one is correct then we can assume the rest works. Signed-off-by: Peter Hutterer --- src/evdev-mt-touchpad.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 6e2818cc..5b166459 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -1562,19 +1562,19 @@ 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 (libinput_event_get_type(event) != LIBINPUT_EVENT_SWITCH_TOGGLE) + return; - 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; - } + swev = libinput_event_get_switch_event(event); + 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; } }