aboutsummaryrefslogtreecommitdiff
path: root/backend/x11
diff options
context:
space:
mode:
authorD.B <thejan.2009@gmail.com>2017-10-13 22:50:59 +0200
committerD.B <thejan.2009@gmail.com>2017-10-14 07:29:23 +0200
commit7cdc19d57f39127e8460e34b89f8d765cf4d5374 (patch)
treebc0f81b0798c7670b79bf20879843ad1a588eeef /backend/x11
parent1df9b0bc1374a517e81fa679f277da417dd14fda (diff)
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.
Diffstat (limited to 'backend/x11')
-rw-r--r--backend/x11/backend.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/backend/x11/backend.c b/backend/x11/backend.c
index bcc2e970..11dd8568 100644
--- a/backend/x11/backend.c
+++ b/backend/x11/backend.c
@@ -63,8 +63,7 @@ static bool handle_x11_event(struct wlr_x11_backend *x11, xcb_generic_event_t *e
x11->time = ev->time;
break;
}
- case XCB_BUTTON_PRESS:
- case XCB_BUTTON_RELEASE: {
+ case XCB_BUTTON_PRESS: {
xcb_button_press_event_t *ev = (xcb_button_press_event_t *)event;
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,
};
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 = {
.device = &x11->pointer_dev,
.time_sec = ev->time / 1000,