diff --git a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp index 0ec657f121..c0701c9178 100644 --- a/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMirroredParameters.cpp @@ -129,25 +129,32 @@ void TaskMirroredParameters::updateUI() void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg) { - if (selectionMode != SelectionMode::None && msg.Type == Gui::SelectionChanges::AddSelection) { - - auto pcMirrored = getObject(); - - std::vector mirrorPlanes; - App::DocumentObject* selObj = nullptr; - getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); - if (!selObj) { - return; - } - - if (selectionMode == SelectionMode::Reference || selObj->isDerivedFrom()) { - setupTransaction(); - pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); - recomputeFeature(); - updateUI(); - } - exitSelectionMode(); + // Handle selection ONLY when in reference selection mode + if (selectionMode == SelectionMode::None || msg.Type != Gui::SelectionChanges::AddSelection) { + return; } + + if (originalSelected(msg)) { + exitSelectionMode(); + return; + } + + auto pcMirrored = getObject(); + + std::vector mirrorPlanes; + App::DocumentObject* selObj = nullptr; + getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes); + if (!selObj) { + return; + } + + if (selectionMode == SelectionMode::Reference || selObj->isDerivedFrom()) { + setupTransaction(); + pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); + recomputeFeature(); + updateUI(); + } + exitSelectionMode(); } void TaskMirroredParameters::onPlaneChanged(int /*num*/)