Prevent double-click of checkbox leading to selecting/highlighting it

This commit is contained in:
Miguel Jacq 2025-11-28 14:30:21 +11:00
parent 4029d7604e
commit e160827708
Signed by: mig5
GPG key ID: 59B3F0C24135C6A9
2 changed files with 22 additions and 0 deletions

View file

@ -4,6 +4,7 @@
* Use DejaVu Sans font for regular text instead of heavier Noto - might help with the freeze issues. * Use DejaVu Sans font for regular text instead of heavier Noto - might help with the freeze issues.
* Change History icon (again) * Change History icon (again)
* Make it easier to check on or off the checkbox by adding some buffer (instead of having to precisely click inside it) * Make it easier to check on or off the checkbox by adding some buffer (instead of having to precisely click inside it)
* Prevent double-click of checkbox leading to selecting/highlighting it
# 0.5.2 # 0.5.2

View file

@ -9,6 +9,7 @@ from PySide6.QtGui import (
QFontDatabase, QFontDatabase,
QFontMetrics, QFontMetrics,
QImage, QImage,
QMouseEvent,
QTextCharFormat, QTextCharFormat,
QTextCursor, QTextCursor,
QTextDocument, QTextDocument,
@ -88,6 +89,9 @@ class MarkdownEditor(QTextEdit):
# Track if we're currently updating text programmatically # Track if we're currently updating text programmatically
self._updating = False self._updating = False
# Help avoid double-click selecting of checkbox
self._suppress_next_checkbox_double_click = False
# Guard to avoid recursive selection tweaks # Guard to avoid recursive selection tweaks
self._adjusting_selection = False self._adjusting_selection = False
@ -919,6 +923,9 @@ class MarkdownEditor(QTextEdit):
def mousePressEvent(self, event): def mousePressEvent(self, event):
"""Toggle a checkbox only when the click lands on its icon.""" """Toggle a checkbox only when the click lands on its icon."""
# default: don't suppress any upcoming double-click
self._suppress_next_checkbox_double_click = False
if event.button() == Qt.LeftButton: if event.button() == Qt.LeftButton:
pt = event.pos() pt = event.pos()
@ -984,6 +991,9 @@ class MarkdownEditor(QTextEdit):
) )
edit.insertText(f"{new_icon} ") edit.insertText(f"{new_icon} ")
edit.endEditBlock() edit.endEditBlock()
# if a double-click comes next, ignore it
self._suppress_next_checkbox_double_click = True
return # handled return # handled
# advance past this token # advance past this token
@ -994,6 +1004,17 @@ class MarkdownEditor(QTextEdit):
# Default handling for anything else # Default handling for anything else
super().mousePressEvent(event) super().mousePressEvent(event)
def mouseDoubleClickEvent(self, event: QMouseEvent) -> None:
# If the previous press toggled a checkbox, swallow this double-click
# so the base class does NOT turn it into a selection.
if getattr(self, "_suppress_next_checkbox_double_click", False):
self._suppress_next_checkbox_double_click = False
event.accept()
return
# Otherwise, let normal double-click behaviour happen
super().mouseDoubleClickEvent(event)
# ------------------------ Toolbar action handlers ------------------------ # ------------------------ Toolbar action handlers ------------------------
def apply_weight(self): def apply_weight(self):