Edit book: Fix double clicking to select a word also selecting smart quotes surrounding the word

This commit is contained in:
Kovid Goyal 2022-03-02 12:38:48 +05:30
parent b7db7cf446
commit 7431c7fe85
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -14,7 +14,7 @@ from qt.core import (
QDialogButtonBox, QEvent, QFormLayout, QFrame, QGridLayout, QGroupBox,
QHBoxLayout, QIcon, QItemSelectionModel, QLabel, QLineEdit, QListView, QMimeData,
QModelIndex, QPainter, QPalette, QPixmap, QPlainTextEdit, QPoint, QRect, QSize,
QSizePolicy, QSplitter, QStaticText, QStyle, QStyledItemDelegate, Qt,
QSizePolicy, QSplitter, QStaticText, QStyle, QStyledItemDelegate, Qt, QTextCursor,
QTextDocument, QTextOption, QToolButton, QVBoxLayout, QWidget, pyqtSignal
)
@ -1287,6 +1287,31 @@ class PlainTextEdit(QPlainTextEdit): # {{{
return True
return QPlainTextEdit.event(self, ev)
def mouseDoubleClickEvent(self, ev):
super().mouseDoubleClickEvent(ev)
c = self.textCursor()
# Workaround for QTextCursor considering smart quotes as word
# characters https://bugreports.qt.io/browse/QTBUG-101372
changed = False
while True:
q = c.selectedText()
if not q:
break
left = min(c.anchor(), c.position())
right = max(c.anchor(), c.position())
if q[0] in '“‘':
changed = True
c.setPosition(left + 1)
c.setPosition(right, QTextCursor.MoveMode.KeepAnchor)
elif q[-1] in '’”':
changed = True
c.setPosition(left)
c.setPosition(right - 1, QTextCursor.MoveMode.KeepAnchor)
else:
break
if changed:
self.setTextCursor(c)
# }}}