The change in ViewProviderGeoFeatureGroupExtension.claimChildren() is
so that GeoFeatureGroupExtension.getSubObjects() can exclude non direct
children.
Proper support of completing an edit in the middel of an expression.
Also support 'noProperty' mode in the completer, where no completion is
offered for property names. This will be used by tree view object
search.
The actual cause of crash in previous commit 80f70ff6 is
Document::recompute() allows aborting using Base::Sequence, which
uses QApplication::processEvent() to catch 'ESC' key press. This local
event loop causes premature deletion of the editor widget.
This patch moves handling of closeEditor before calling recompute().
Crash stack trace
https://forum.freecadweb.org/viewtopic.php?f=8&t=37757&e=1&view=unread#p327901
It appears to by caused by handling QAbstractItemDelegate::closeEditor
signal twice. Once inside PropertyItemDelegate::editorClosed via slot
connection where the editor is closed/destroyed, the other in
PropertyEditor::closeEditor() which tries to access the destroyed
editor.
This patch removes handling of closeEditor signal in
PropertyItemDelegate.
- in SelectionSingleton::setVisible, if the selection changes during
loop, a crash may occur.
- in QGraphicsScene, hiding an item changes its selected status.
The method MainWindow::setActiveWindow() must not automatically add a view to the mdi area if it's not part of it because this causes a crash when trying to make a fullscreen window or undock a view.
Instead the calling instance must explicitly call MainWindow::addWindow where needed.
Each command will create an App::AutoTransaction to auto create and
commit a transaction for proper undo/redo. But if the command starts
editing, the current transaction may be required to out live the current
command.
Note that the command can only detect editing if the code calls
Gui::Document::setEdit(). There are objects that starts editing by
calling its own ViewProvider::setEdit(), e.g. various TechDraw
ViewProviders. In this case, to avoid auto committing, one can call
App::Application::setActiveTransaction() with the second argument set to
true, or call App::AutoTransaction::setEnable(false).