diff --git a/libs/flake/KoToolProxy.cpp b/libs/flake/KoToolProxy.cpp --- a/libs/flake/KoToolProxy.cpp +++ b/libs/flake/KoToolProxy.cpp @@ -95,8 +95,10 @@ if (!activeTool) return; if (!activeTool->wantsAutoScroll()) return; if (!event.isAccepted()) return; + if (!isToolPressed) return; if (event.buttons() != Qt::LeftButton) return; + widgetScrollPoint = event.pos(); if (! scrollTimer.isActive()) @@ -205,8 +207,22 @@ KoToolManager::instance()->priv()->switchInputDevice(id); d->mouseDownPoint = ev->pos(); - if (d->tabletPressed) // refuse to send a press unless there was a release first. + + // this tries to make sure another mouse press event doesn't happen + // before a release event happens + if (d->isToolPressed) { + mouseReleaseEvent(ev); + d->tabletPressed = false; + d->scrollTimer.stop(); + + if (d->activeTool) { + d->activeTool->mouseReleaseEvent(ev); + } + + d->isToolPressed = false; + return; + } QPointF globalPoint = ev->globalPos(); if (d->multiClickGlobalPoint != globalPoint) { @@ -243,6 +259,8 @@ d->multiClickCount = 0; ev->ignore(); } + + d->isToolPressed = true; } void KoToolProxy::mousePressEvent(QMouseEvent *event, const QPointF &point) @@ -305,6 +323,8 @@ } else { event->ignore(); } + + d->isToolPressed = false; } void KoToolProxy::keyPressEvent(QKeyEvent *event) @@ -321,6 +341,8 @@ d->activeTool->keyReleaseEvent(event); else event->ignore(); + + d->isToolPressed = false; } void KoToolProxy::explicitUserStrokeEndRequest() diff --git a/libs/flake/KoToolProxy_p.h b/libs/flake/KoToolProxy_p.h --- a/libs/flake/KoToolProxy_p.h +++ b/libs/flake/KoToolProxy_p.h @@ -59,6 +59,8 @@ // up until at least 4.3.0 we get a mouse move event when the tablet leaves the canvas. bool mouseLeaveWorkaround; + bool isToolPressed; + // for multi clicking (double click or triple click) we need the following int multiClickCount; QPointF multiClickGlobalPoint;