diff options
-rw-r--r-- | plugingui/eventhandler.cc | 11 |
1 files changed, 10 insertions, 1 deletions
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(); |