diff --git a/src/Gui/ActiveObjectList.cpp b/src/Gui/ActiveObjectList.cpp index 2469570b4e..0d73ac30d0 100644 --- a/src/Gui/ActiveObjectList.cpp +++ b/src/Gui/ActiveObjectList.cpp @@ -40,16 +40,29 @@ using namespace Gui; void Gui::ActiveObjectList::setObject(App::DocumentObject* obj, const char* name, const Gui::HighlightMode& mode) { - if (hasObject(name)){ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/TreeView"); + bool autoExpand = hGrp->GetBool("TreeActiveAutoExpand", true); + + if (hasObject(name)) { App::DocumentObject* act = getObject(name); Gui::Document* doc = Application::Instance->getDocument(act->getDocument()); - doc->signalHighlightObject(*dynamic_cast(doc->getViewProvider(act)), mode, false); + Gui::ViewProviderDocumentObject* viewProvider = static_cast + (doc->getViewProvider(act)); + doc->signalHighlightObject(*viewProvider, mode, false); + if (autoExpand) + doc->signalExpandObject(*viewProvider, Gui::Collapse); } - if (obj){ + + if (obj) { Gui::Document* doc = Application::Instance->getDocument(obj->getDocument()); - doc->signalHighlightObject(*dynamic_cast(doc->getViewProvider(obj)), mode, true); + Gui::ViewProviderDocumentObject* viewProvider = static_cast + (doc->getViewProvider(obj)); + doc->signalHighlightObject(*viewProvider, mode, true); + if (autoExpand) + doc->signalExpandObject(*viewProvider, Gui::Expand); _ObjectMap[name] = obj; - } else { + } + else { if (hasObject(name)) _ObjectMap.erase(name); }