[LyX/master] Workaround Qtbug where QAbstractScrollArea::mouseMoveEvent(...) is called falsely when quickly double tapping on a touchpad of a notebook running Windows

Eugene Chornyi yu_jin at lyx.org
Thu Jul 9 07:12:10 UTC 2020


commit 06969f9dd4b9409225e0c8b504395fa197b506d1
Author: Eugene Chornyi <yu_jin at lyx.org>
Date:   Thu Jul 9 09:36:12 2020 +0200

    Workaround Qtbug where QAbstractScrollArea::mouseMoveEvent(...) is called falsely when quickly double tapping on a touchpad of a notebook running Windows
---
 src/frontends/qt/GuiWorkArea.cpp |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp
index fa40a5a..23d6efa 100644
--- a/src/frontends/qt/GuiWorkArea.cpp
+++ b/src/frontends/qt/GuiWorkArea.cpp
@@ -852,6 +852,9 @@ void GuiWorkArea::mouseReleaseEvent(QMouseEvent * e)
 
 	FuncRequest const cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
 			q_button_state(e->button()), q_key_state(e->modifiers()));
+#if (QT_VERSION > QT_VERSION_CHECK(5,10,1))
+	d->synthetic_mouse_event_.cmd = cmd; // QtBug QAbstractScrollArea::mouseMoveEvent
+#endif
 	d->dispatch(cmd);
 	e->accept();
 }
@@ -859,6 +862,19 @@ void GuiWorkArea::mouseReleaseEvent(QMouseEvent * e)
 
 void GuiWorkArea::mouseMoveEvent(QMouseEvent * e)
 {
+#if (QT_VERSION > QT_VERSION_CHECK(5,10,1))
+	// cancel the event if the coordinates didn't change, this is due to QtBug
+	// QAbstractScrollArea::mouseMoveEvent, the event is triggered falsely when quickly
+	// double tapping a touchpad. To test: try to select a word by quickly double tapping
+	// on a touchpad while hovering the cursor over that word in the work area.
+	// This bug does not occur on Qt versions 5.10.1 and below. Only Windows seems to be affected.
+	// ML thread: https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg211699.html
+	// Qt bugtracker: https://bugreports.qt.io/browse/QTBUG-85431
+	if (e->x() == d->synthetic_mouse_event_.cmd.x() && // QtBug QAbstractScrollArea::mouseMoveEvent
+			e->y() == d->synthetic_mouse_event_.cmd.y()) // QtBug QAbstractScrollArea::mouseMoveEvent
+		return; // QtBug QAbstractScrollArea::mouseMoveEvent
+#endif
+
 	// we kill the triple click if we move
 	doubleClickTimeout();
 	FuncRequest cmd(LFUN_MOUSE_MOTION, e->x(), e->y(),


More information about the lyx-cvs mailing list