From cf383d709dd294d3876fa07c81a7a7816c1a5594 Mon Sep 17 00:00:00 2001 From: Paddle Date: Sat, 12 Nov 2022 14:27:55 +0100 Subject: [PATCH] Sketcher: Fix element widget repaint delay bug Related to https://github.com/FreeCAD/FreeCAD/pull/7567#issuecomment-1304724547 --- src/Mod/Sketcher/Gui/TaskSketcherElements.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp index 8ebec163d5..43bc9e7605 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp @@ -843,7 +843,19 @@ void TaskSketcherElements::on_listWidgetElements_itemPressed(QListWidgetItem* it } // first update the listwidget. Item is selected if at least one element of the geo is selected. - item->setSelected(item->isLineSelected || item->isStartingPointSelected || item->isEndPointSelected || item->isMidPointSelected); + bool selected = item->isLineSelected || item->isStartingPointSelected || item->isEndPointSelected || item->isMidPointSelected; + + { + QSignalBlocker sigblk(ui->listWidgetElements); + + if (item->isSelected() && selected) { + item->setSelected(false);// if already selected and changing or adding subelement, ensure selection change is triggered, which ensures timely repaint + item->setSelected(selected); + } + else { + item->setSelected(selected); + } + } // now the scene std::stringstream ss;