Hi Matthias

I remember there was a performance consideration leading to the emitSignal parameter in changeAttributeValue. But I don't know if it is still needed, seems to be only used from field calculator, offline editing and a label tool.
So +1 for your proposal.

Regards,
Marco

On 06.01.2014 14:01, Matthias Kuhn wrote:
Hi,

Currently,when the field calculator does changes to attributes (modification, not adding a new column) it blocks signals of the vector layer while doing this. This leads e.g. to bug #9268 [1], that the attribute table is not updating properly. The fix would be very easy (i.e. remove the blockSignals() call) but I wanted to ask first, if there is a reason not to do this.

The main reason why I am afraid is, that apart from the blockSignals() call, there is also the paramter emitSignal specified as false in the call to vectorlayer->changeAttributeValue(). This parameter is currently not working, so I suppose that the blockSignals() call was introduced as a workaround.

However, there was a good reason, to block the signals explained in issue #7071 [2], fixed by Jürgen, that at the time when we only supported one iterator per layer, emitting this signal would break the update process and produce only partially updated results. This is fortunately no longer the case, so this reason can be considered obsolete.

Another reason which I could imagine (but I have no proof of) is that for big layers, emitting the signal for each feature can possibly take a long time. However, if this is actually the case we should rather think about batching the signal or fix unperformant consumer slots of this signal.

Be aware, that at the current state, there is no possibility, neither for plugins nor in QGIS core, to get reliable push-notifications when an attribute changes.

So my proposal is:

* Remove the blockSignal calls and let attribute changes always be promoted * If there are problems introduced, lets fix the problems instead of working around them at the cost of unreliability * Don't fix the emitSignal parameter for QgsVectorLayer::changeAttribute and deprecate it for future removal.

If there is no objection, I would vote to make this changes before the QGIS 2.2 freeze

Best
Matthias

[1] http://hub.qgis.org/issues/9268
[2] http://hub.qgis.org/issues/7071
_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer


--
Dr. Marco Hugentobler
Sourcepole -  Linux & Open Source Solutions
Weberstrasse 5, CH-8004 Zürich, Switzerland
marco.hugentob...@sourcepole.ch http://www.sourcepole.ch
Technical Advisor QGIS Project Steering Committee

_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to