Gui: deduce object path when setting active object
This commit is contained in:
@@ -111,10 +111,34 @@ Gui::ActiveObjectList::ObjectInfo Gui::ActiveObjectList::getObjectInfo(App::Docu
|
||||
if (info.obj)
|
||||
break;
|
||||
}
|
||||
if(!info.obj) {
|
||||
// No selection is found, try to obtain the object hierarchy using
|
||||
// DocumentObject::getParents()
|
||||
unsigned long count = 0xffffffff;
|
||||
for(auto &v : obj->getParents()) {
|
||||
if(v.first->getDocument() != _Doc->getDocument())
|
||||
continue;
|
||||
|
||||
if (!info.obj && obj->getDocument()==_Doc->getDocument())
|
||||
info.obj = obj;
|
||||
// We prioritize on non-linked group object having the least
|
||||
// hierarchies.
|
||||
unsigned long cnt = v.first->getSubObjectList(v.second.c_str()).size();
|
||||
if(v.first->getLinkedObject(false) != v.first)
|
||||
cnt &= 0x8000000;
|
||||
if(cnt < count) {
|
||||
count = cnt;
|
||||
info.obj = v.first;
|
||||
info.subname = v.second;
|
||||
}
|
||||
}
|
||||
|
||||
if(!info.obj) {
|
||||
if (obj->getDocument()!=_Doc->getDocument())
|
||||
return info;
|
||||
info.obj = obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user