Text editors: Prevent autoscroll timer triggering from synth mouse events

The autoscrolling interferes with scrolling pan gestures
and causes the scroll direction to be reversed when moving
outside the window.

Task-number: QTBUG-40461
Change-Id: I30ef848a346418929540c23730ab92f44e4565e2
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
bb10
Friedemann Kleint 2014-11-19 09:40:43 +01:00
parent 07f234d2a8
commit 1d9d8123de
2 changed files with 16 additions and 12 deletions

View File

@ -2042,11 +2042,13 @@ void QPlainTextEdit::mouseMoveEvent(QMouseEvent *e)
d->sendControlEvent(e);
if (!(e->buttons() & Qt::LeftButton))
return;
QRect visible = d->viewport->rect();
if (visible.contains(pos))
d->autoScrollTimer.stop();
else if (!d->autoScrollTimer.isActive())
d->autoScrollTimer.start(100, this);
if (e->source() == Qt::MouseEventNotSynthesized) {
const QRect visible = d->viewport->rect();
if (visible.contains(pos))
d->autoScrollTimer.stop();
else if (!d->autoScrollTimer.isActive())
d->autoScrollTimer.start(100, this);
}
}
/*! \reimp
@ -2055,7 +2057,7 @@ void QPlainTextEdit::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QPlainTextEdit);
d->sendControlEvent(e);
if (d->autoScrollTimer.isActive()) {
if (e->source() == Qt::MouseEventNotSynthesized && d->autoScrollTimer.isActive()) {
d->autoScrollTimer.stop();
d->ensureCursorVisible();
}

View File

@ -1574,11 +1574,13 @@ void QTextEdit::mouseMoveEvent(QMouseEvent *e)
d->sendControlEvent(e);
if (!(e->buttons() & Qt::LeftButton))
return;
QRect visible = d->viewport->rect();
if (visible.contains(pos))
d->autoScrollTimer.stop();
else if (!d->autoScrollTimer.isActive())
d->autoScrollTimer.start(100, this);
if (e->source() == Qt::MouseEventNotSynthesized) {
const QRect visible = d->viewport->rect();
if (visible.contains(pos))
d->autoScrollTimer.stop();
else if (!d->autoScrollTimer.isActive())
d->autoScrollTimer.start(100, this);
}
}
/*! \reimp
@ -1587,7 +1589,7 @@ void QTextEdit::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QTextEdit);
d->sendControlEvent(e);
if (d->autoScrollTimer.isActive()) {
if (e->source() == Qt::MouseEventNotSynthesized && d->autoScrollTimer.isActive()) {
d->autoScrollTimer.stop();
ensureCursorVisible();
}