Fix duplicated pointer axis events
In pointer.c, some axis event was emitted even if the event pointer did not have current axis. In X11 backend pointer scroll events seem to be composed of both BUTTON_PRESS and BUTTON_RELEASE. Therefore we should skip one of them (RELEASE) to avoid event duplication.
This commit is contained in:
parent
1df9b0bc13
commit
7cdc19d57f
|
@ -128,7 +128,7 @@ void handle_pointer_axis(struct libinput_event *event,
|
||||||
}
|
}
|
||||||
wlr_event.delta = libinput_event_pointer_get_axis_value(
|
wlr_event.delta = libinput_event_pointer_get_axis_value(
|
||||||
pevent, axies[i]);
|
pevent, axies[i]);
|
||||||
}
|
|
||||||
wl_signal_emit(&wlr_dev->pointer->events.axis, &wlr_event);
|
wl_signal_emit(&wlr_dev->pointer->events.axis, &wlr_event);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,8 +63,7 @@ static bool handle_x11_event(struct wlr_x11_backend *x11, xcb_generic_event_t *e
|
||||||
x11->time = ev->time;
|
x11->time = ev->time;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case XCB_BUTTON_PRESS:
|
case XCB_BUTTON_PRESS: {
|
||||||
case XCB_BUTTON_RELEASE: {
|
|
||||||
xcb_button_press_event_t *ev = (xcb_button_press_event_t *)event;
|
xcb_button_press_event_t *ev = (xcb_button_press_event_t *)event;
|
||||||
|
|
||||||
if (ev->detail == XCB_BUTTON_INDEX_4 ||
|
if (ev->detail == XCB_BUTTON_INDEX_4 ||
|
||||||
|
@ -79,7 +78,16 @@ static bool handle_x11_event(struct wlr_x11_backend *x11, xcb_generic_event_t *e
|
||||||
.delta = delta,
|
.delta = delta,
|
||||||
};
|
};
|
||||||
wl_signal_emit(&x11->pointer.events.axis, &axis);
|
wl_signal_emit(&x11->pointer.events.axis, &axis);
|
||||||
} else {
|
x11->time = ev->time;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* fallthrough */
|
||||||
|
case XCB_BUTTON_RELEASE: {
|
||||||
|
xcb_button_press_event_t *ev = (xcb_button_press_event_t *)event;
|
||||||
|
|
||||||
|
if (ev->detail != XCB_BUTTON_INDEX_4 &&
|
||||||
|
ev->detail != XCB_BUTTON_INDEX_5) {
|
||||||
struct wlr_event_pointer_button button = {
|
struct wlr_event_pointer_button button = {
|
||||||
.device = &x11->pointer_dev,
|
.device = &x11->pointer_dev,
|
||||||
.time_sec = ev->time / 1000,
|
.time_sec = ev->time / 1000,
|
||||||
|
|
Loading…
Reference in New Issue