Index: /home/drofan/unstable/qgis/python/core/qgsvectorlayer.sip =================================================================== --- /home/drofan/unstable/qgis/python/core/qgsvectorlayer.sip (revision 10693) +++ /home/drofan/unstable/qgis/python/core/qgsvectorlayer.sip (working copy) @@ -364,6 +364,11 @@ /**access range */ RangeData &range(int idx); + + /** Change feature with 3rd party geometry and attribue updates + @note this method was added in version 1.1 + */ + changeFeature( QgsFeature &f ); public slots: Index: /home/drofan/unstable/qgis/src/core/qgsvectorlayer.cpp =================================================================== --- /home/drofan/unstable/qgis/src/core/qgsvectorlayer.cpp (revision 10693) +++ /home/drofan/unstable/qgis/src/core/qgsvectorlayer.cpp (working copy) @@ -3671,3 +3670,16 @@ } return 0; //not found } + +void QgsVectorLayer::changeFeature( QgsFeature &f ) +{ + // do not update when we aren't in editing mode + if ( ! mEditable ) + return; + + mChangedGeometries[f.id()]= *f.geometry(); + + mChangedAttributeValues[ f.id()]=f.attributeMap(); + + setModified(true,false); +} Index: /home/drofan/unstable/qgis/src/core/qgsvectorlayer.h =================================================================== --- /home/drofan/unstable/qgis/src/core/qgsvectorlayer.h (revision 10693) +++ /home/drofan/unstable/qgis/src/core/qgsvectorlayer.h (working copy) @@ -447,6 +447,11 @@ */ QgsVectorOverlay* findOverlayByType( const QString& typeName ); + /** Change feature with 3rd party geometry and attribue updates + @note this method was added in version 1.1 + */ + void changeFeature( QgsFeature &f ); + public slots: /** Select feature by its ID, optionally emit signal selectionChanged() */ void select( int featureId, bool emitSignal = TRUE );