Remove the equality check "shortcut". Profiling shows that the cost
of checking the equality of the attributes well exceeds the cost
of cost always detaching the feature. And in the vast majority of
cases the equality operator would return false anyway, resulting
in a lot of wasted effort.
fetched if we can avoid it
This is a relatively expensive operation to do (specifically
the calls to QgsCPLHTTPFetchOverrider::setAttribute) compared
with the actual costs of fetching features from GDAL
Avoid creating a new override for every feature, if we detect
that its safe to use an override created in the OGR feature
iterator constructor.
- add 0.1, 0.5, 1.0 common angles
- add an option to show current common angle in the floater
- add 'N' 'SHIFT+N' keyboard shortcuts to cycle through the
common angle options
1. Deduplicate code
2. We have seen crashes where we can observe the following pattern at
the top of the stack trace. This is always happening nested inside
another event loop somewhere, where the lower part of the stack,
which is omitted here `[...]` can be any other `processEvents()` call
or local `QEventLoop`, which is likely caused by interaction of the
local event loop for downloading here with other event loops, signals
and timers (only approximal understanding on the exact reasons from
my side).
```
_ZNK14QMessageLogger5fatalEPKcz: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
_ZN28QgsServerParameterDefinition10raiseErrorERK7QString: /usr/lib/libqgis_server.so.3.22.14
_ZN28QgsServerParameterDefinition10raiseErrorERK7QString: /usr/lib/libqgis_server.so.3.22.14
_ZN7QObject5eventEP6QEvent: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
[symbol missing]: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
[symbol missing]: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
[symbol missing]: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
_ZN9QMetaType4typeERK10QByteArray: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
[symbol missing]: /usr/lib/x86_64-linux-gnu/libQt5Network.so.5
_ZN9QMetaType8typeInfoEi: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
_ZN14QgsApplication6notifyEP7QObjectP6QEvent: /usr/lib/libqgis_core.so.3.22.14
_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
_ZN23QCoreApplicationPrivate16sendPostedEventsEP7QObjectiP11QThreadData: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
_ZN27QEventDispatcherGlibPrivate31runTimersOnceWithNormalPriorityEv: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
[...]
```
If both a container and a item within that container are selected
and then the "remove" button is pressed, QGIS will crash
Avoid the crash by removing items one-by-one, so that we don't try
to delete a child item which was already deleted by its parent.