From 62019ffba459ec76f846518c78b2178622efe491 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 22 Mar 2013 22:04:49 +0100 Subject: Accumulate scroll wheel events in X11. --- plugingui/eventhandler.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugingui/eventhandler.cc b/plugingui/eventhandler.cc index 1953da2..1cf67fc 100644 --- a/plugingui/eventhandler.cc +++ b/plugingui/eventhandler.cc @@ -327,11 +327,20 @@ GUI::Event *GUI::EventHandler::getNextEvent() if(xe.type == ButtonPress || xe.type == ButtonRelease) { if(xe.xbutton.button == 4 || xe.xbutton.button == 5) { + int scroll = 1; + while(true) { // Hack to make sure only the last event is played. + if(!hasEvent()) break; + XEvent nxe; + XPeekEvent(gctx->display, &nxe); + if(nxe.type != ButtonPress && nxe.type != ButtonRelease) break; + scroll += 1; + XNextEvent(gctx->display, &xe); + } ScrollEvent *e = new ScrollEvent(); e->window_id = xe.xbutton.window; e->x = xe.xbutton.x; e->y = xe.xbutton.y; - e->delta = xe.xbutton.button==4?-1:1; + e->delta = scroll * (xe.xbutton.button==4?-1:1); event = e; } else { ButtonEvent *e = new ButtonEvent(); -- cgit v1.2.3