@@ -103,6 +103,7 @@ Vect_delete_line_function_type *Vect_delete_line_function_pointer = ( Vect_delet
103103static QString GRASS_KEY = " grass" ;
104104
105105int QgsGrassProvider::LAST_TYPE = -9999 ;
106+ int QgsGrassProvider::mEditedCount = 0 ;
106107
107108QgsGrassProvider::QgsGrassProvider ( QString uri )
108109 : QgsVectorDataProvider( uri )
@@ -291,6 +292,14 @@ QgsGrassProvider::~QgsGrassProvider()
291292
292293int QgsGrassProvider::capabilities () const
293294{
295+ // Because of bug in GRASS https://trac.osgeo.org/grass/ticket/2775 it is not possible
296+ // close db drivers in random order on Unix and probably Mac -> disable editing if another layer is edited
297+ #ifndef Q_OS_WIN
298+ if ( mEditedCount > 0 && !mEditBuffer )
299+ {
300+ return 0 ;
301+ }
302+ #endif
294303 // for now, only one map may be edited at time
295304 if ( mEditBuffer || ( mLayer && mLayer ->map () && !mLayer ->map ()->isEdited () ) )
296305 {
@@ -644,6 +653,7 @@ bool QgsGrassProvider::closeEdit( bool newMap, QgsVectorLayer *vectorLayer )
644653 }
645654 connect ( mLayer ->map (), SIGNAL ( dataChanged () ), SLOT ( onDataChanged () ) );
646655 emit fullExtentCalculated ();
656+ mEditedCount --;
647657 return true ;
648658 }
649659 return false ;
@@ -1129,6 +1139,8 @@ void QgsGrassProvider::startEditing( QgsVectorLayer *vectorLayer )
11291139 vectorLayer->setFieldEditable ( mLayer ->keyColumn (), false );
11301140 vectorLayer->setFieldEditable ( mLayer ->fields ().size () - 1 , false );
11311141
1142+ mEditedCount ++;
1143+
11321144 QgsDebugMsg ( " edit started" );
11331145}
11341146
0 commit comments