From 9b2cee5cbe5d32a9a02ad2a41445f3e6150ac89d Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Thu, 14 Mar 2024 17:07:28 +0100 Subject: [PATCH] Assembly: attach selection observer only if in edit mode. --- src/Mod/Assembly/Gui/ViewProviderAssembly.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp b/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp index 200839306b..b7540b8e23 100644 --- a/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp +++ b/src/Mod/Assembly/Gui/ViewProviderAssembly.cpp @@ -85,7 +85,7 @@ void printPlacement(Base::Placement plc, const char* name) PROPERTY_SOURCE(AssemblyGui::ViewProviderAssembly, Gui::ViewProviderPart) ViewProviderAssembly::ViewProviderAssembly() - : SelectionObserver(true) + : SelectionObserver(false) , dragMode(DragMode::None) , canStartDragging(false) , partMoving(false) @@ -204,6 +204,8 @@ bool ViewProviderAssembly::setEdit(int ModNum) setDragger(); + attachSelection(); + return true; } @@ -216,6 +218,8 @@ void ViewProviderAssembly::unsetEdit(int ModNum) unsetDragger(); + detachSelection(); + // Check if the view is still active before trying to deactivate the assembly. auto doc = getDocument(); if (!doc) { @@ -860,6 +864,10 @@ void ViewProviderAssembly::draggerMotionCallback(void* data, SoDragger* d) void ViewProviderAssembly::onSelectionChanged(const Gui::SelectionChanges& msg) { + if (!isInEditMode()) { + return; + } + if (msg.Type == Gui::SelectionChanges::AddSelection || msg.Type == Gui::SelectionChanges::ClrSelection || msg.Type == Gui::SelectionChanges::RmvSelection) {