From b420d5a37dc5bba436f7605718c54cfed54af1c8 Mon Sep 17 00:00:00 2001 From: ck Date: Mon, 8 Jan 2024 18:23:35 +0800 Subject: [PATCH] fix: double click edit incorrect format Issue: https://github.com/linuxdeepin/developer-center/issues/6780 --- src/widgets/dcrumbedit.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/widgets/dcrumbedit.cpp b/src/widgets/dcrumbedit.cpp index 2cad870f3..41bb51f81 100644 --- a/src/widgets/dcrumbedit.cpp +++ b/src/widgets/dcrumbedit.cpp @@ -306,8 +306,6 @@ class DCrumbEditPrivate : public DCORE_NAMESPACE::DObjectPrivate void registerHandler(QAbstractTextDocumentLayout *layout) { - D_Q(DCrumbEdit); - for (int i = QTextFormat::UserObject + 1; ; ++i) { if (!layout->handlerForObject(i)) { objectType = i; @@ -379,7 +377,9 @@ class DCrumbEditPrivate : public DCORE_NAMESPACE::DObjectPrivate if (cursor.charFormat().objectType() != objectType) return false; - DCrumbTextFormat format(cursor.charFormat()); + auto fmt = q->document()->documentLayout()->formatAt(mousePos); + DCrumbTextFormat format = formats.value(fmt.stringProperty(QTextFormat::UserProperty + 1)); + currentText = format.text(); currentBrush = format.background(); @@ -391,7 +391,8 @@ class DCrumbEditPrivate : public DCORE_NAMESPACE::DObjectPrivate makeCrumb(); - if (mousePos.x() < q->cursorRect().left()) + if (mousePos.x() < q->cursorRect().left() || + mousePos.y() < q->cursorRect().top()) cursor.setPosition(cursor.position() - 1, QTextCursor::KeepAnchor); else cursor.setPosition(cursor.position() + 1, QTextCursor::KeepAnchor);