aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2025-01-04 08:14:25 +1100
committerNeil <nyamatongwe@gmail.com>2025-01-04 08:14:25 +1100
commit3dcf7ed54ebb5eb08f1671bbe7e21a650dc686d8 (patch)
treea9c37076cc3ed0e5048eab053db3ef74204f466a
parentb740f61783444879d22848bd1b58423014791d42 (diff)
downloadscintilla-mirror-3dcf7ed54ebb5eb08f1671bbe7e21a650dc686d8.tar.gz
Fix bug where double-click stopped working after running for weeks.
-rw-r--r--doc/ScintillaHistory.html11
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.cpp20
2 files changed, 27 insertions, 4 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 4067efa14..ba416abe2 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -588,6 +588,17 @@
</table>
<h2>Releases</h2>
<h3>
+ <a href="https://www.scintilla.org/scintilla555.zip">Release 5.5.5</a>
+ </h3>
+ <ul>
+ <li>
+ Released 18 December 2024.
+ </li>
+ <li>
+ Fix bug on Qt where double-click stopped working when Scintilla instance had been running for weeks.
+ </li>
+ </ul>
+ <h3>
<a href="https://www.scintilla.org/scintilla554.zip">Release 5.5.4</a>
</h3>
<ul>
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp
index 5e2196d85..d220305b4 100644
--- a/qt/ScintillaEditBase/ScintillaEditBase.cpp
+++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp
@@ -299,6 +299,18 @@ static int modifierTranslated(int sciModifier)
}
}
+namespace {
+
+// Convert QElapsedTimer timestamp qint64 into unsigned int milliseconds wanted by Editor methods.
+unsigned int TimeOfEvent(const QElapsedTimer &timer)
+{
+ // Wrap every 2 billion milliseconds -> 24 days
+ constexpr qint64 maxTime = 2'000'000'000;
+ return static_cast<unsigned int>(timer.elapsed() % maxTime);
+}
+
+}
+
void ScintillaEditBase::mousePressEvent(QMouseEvent *event)
{
Point pos = PointFromQPoint(event->pos());
@@ -320,11 +332,11 @@ void ScintillaEditBase::mousePressEvent(QMouseEvent *event)
bool ctrl = QApplication::keyboardModifiers() & Qt::ControlModifier;
bool alt = QApplication::keyboardModifiers() & modifierTranslated(sqt->rectangularSelectionModifier);
- sqt->ButtonDownWithModifiers(pos, time.elapsed(), ModifierFlags(shift, ctrl, alt));
+ sqt->ButtonDownWithModifiers(pos, TimeOfEvent(time), ModifierFlags(shift, ctrl, alt));
}
if (event->button() == Qt::RightButton) {
- sqt->RightButtonDownWithModifiers(pos, time.elapsed(), ModifiersOfKeyboard());
+ sqt->RightButtonDownWithModifiers(pos, TimeOfEvent(time), ModifiersOfKeyboard());
}
}
@@ -332,7 +344,7 @@ void ScintillaEditBase::mouseReleaseEvent(QMouseEvent *event)
{
const QPoint point = event->pos();
if (event->button() == Qt::LeftButton)
- sqt->ButtonUpWithModifiers(PointFromQPoint(point), time.elapsed(), ModifiersOfKeyboard());
+ sqt->ButtonUpWithModifiers(PointFromQPoint(point), TimeOfEvent(time), ModifiersOfKeyboard());
const sptr_t pos = send(SCI_POSITIONFROMPOINT, point.x(), point.y());
const sptr_t line = send(SCI_LINEFROMPOSITION, pos);
@@ -358,7 +370,7 @@ void ScintillaEditBase::mouseMoveEvent(QMouseEvent *event)
const KeyMod modifiers = ModifierFlags(shift, ctrl, alt);
- sqt->ButtonMoveWithModifiers(pos, time.elapsed(), modifiers);
+ sqt->ButtonMoveWithModifiers(pos, TimeOfEvent(time), modifiers);
}
void ScintillaEditBase::contextMenuEvent(QContextMenuEvent *event)