From b7952351ec56a37452fffd6a22427b3d3bf655ca Mon Sep 17 00:00:00 2001 From: liujinchang Date: Fri, 30 Oct 2026 03:37:41 +0800 Subject: [PATCH] fix: render all selections after undo/redo in column edit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Root cause: undo()/redo() in DeleteBackAltCommand, DeleteTextUndoCommand and InsertTextUndoCommand call restoreColumnEditSelection() which only updates the member variable m_altModSelections but never pushes it to QPlainTextEdit::setExtraSelections() 2. Fix: add m_edit->renderAllSelections() after restoreColumnEditSelection() in all affected undo()/redo() methods so all column-edit highlight lines are rendered 3. Impact: only affects column-edit undo/redo highlight rendering, normal Alt-drag selection path already calls renderAllSelections() unchanged Log: fix incomplete column edit selection highlight after undo/redo Influence: 1. Test column-edit multi-line cut then undo, verify all lines highlighted 2. Test column-edit multi-line delete then undo, verify all lines highlighted 3. Test undo then redo in column edit, verify all lines highlighted 4. Verify normal column-edit selection highlight has no regression fix: 修复列编辑撤销/重做后选中高亮不完全 1. 根因:DeleteBackAltCommand、DeleteTextUndoCommand 和 InsertTextUndoCommand 的 undo()/redo() 调用 restoreColumnEditSelection() 仅更新成员变量 m_altModSelections, 未调用 renderAllSelections() 推送到 QPlainTextEdit 渲染层 2. 方案:在所有受影响的 undo()/redo() 的 restoreColumnEditSelection() 后增加 m_edit->renderAllSelections() 调用,使全部列编辑选中行正确渲染 3. 影响:仅影响列编辑撤销/重做的高亮渲染,正常 Alt+拖拽选中路径 已调用 renderAllSelections(),行为不变 Log: 修复列编辑撤销重做后选中高亮不完全的问题 Influence: 1. 测试列编辑多行剪切后撤销,验证所有行高亮恢复 2. 测试列编辑多行删除后撤销,验证所有行高亮恢复 3. 测试撤销后重做,验证所有行高亮恢复 4. 验证正常列编辑选中高亮无回归 PMS: BUG-241613 --- src/editor/deletebackcommond.cpp | 2 ++ src/editor/deletetextundocommand.cpp | 2 ++ src/editor/inserttextundocommand.cpp | 1 + 3 files changed, 5 insertions(+) diff --git a/src/editor/deletebackcommond.cpp b/src/editor/deletebackcommond.cpp index 18f17250..f9808966 100644 --- a/src/editor/deletebackcommond.cpp +++ b/src/editor/deletebackcommond.cpp @@ -150,6 +150,7 @@ void DeleteBackAltCommand::undo() qCDebug(appLog) << "m_edit is not null"; m_edit->restoreColumnEditSelection(m_columnEditSelections); m_edit->setTextCursor(m_columnEditSelections.last().cursor); + m_edit->renderAllSelections(); } qCDebug(appLog) << "DeleteBackAltCommand undo end"; } @@ -172,6 +173,7 @@ void DeleteBackAltCommand::redo() qCDebug(appLog) << "m_edit is not null"; m_edit->restoreColumnEditSelection(m_columnEditSelections); m_edit->setTextCursor(m_columnEditSelections.last().cursor); + m_edit->renderAllSelections(); } qCDebug(appLog) << "DeleteBackAltCommand redo end"; } diff --git a/src/editor/deletetextundocommand.cpp b/src/editor/deletetextundocommand.cpp index 7e42995f..d062db30 100644 --- a/src/editor/deletetextundocommand.cpp +++ b/src/editor/deletetextundocommand.cpp @@ -98,6 +98,7 @@ void DeleteTextUndoCommand::undo() qCDebug(appLog) << "m_edit is not null"; m_edit->restoreColumnEditSelection(m_ColumnEditSelections); m_edit->setTextCursor(m_ColumnEditSelections.last().cursor); + m_edit->renderAllSelections(); } } qCDebug(appLog) << "DeleteTextUndoCommand undo end"; @@ -126,6 +127,7 @@ void DeleteTextUndoCommand::redo() qCDebug(appLog) << "m_edit is not null"; m_edit->restoreColumnEditSelection(m_ColumnEditSelections); m_edit->setTextCursor(m_ColumnEditSelections.last().cursor); + m_edit->renderAllSelections(); } } qCDebug(appLog) << "DeleteTextUndoCommand redo end"; diff --git a/src/editor/inserttextundocommand.cpp b/src/editor/inserttextundocommand.cpp index 6af1cbdd..b0866b1a 100644 --- a/src/editor/inserttextundocommand.cpp +++ b/src/editor/inserttextundocommand.cpp @@ -93,6 +93,7 @@ void InsertTextUndoCommand::undo() qCDebug(appLog) << "InsertTextUndoCommand undo, pEdit not empty"; m_pEdit->restoreColumnEditSelection(m_columnEditSelections); m_pEdit->setTextCursor(m_columnEditSelections.last().cursor); + m_pEdit->renderAllSelections(); } } qCDebug(appLog) << "InsertTextUndoCommand undo exit";