Skip to content

Commit e8cb8c1

Browse files
committed
[GRASS] disable multiple vector editing on Linux/Mac
1 parent ca70491 commit e8cb8c1

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/providers/grass/qgsgrassprovider.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ Vect_delete_line_function_type *Vect_delete_line_function_pointer = ( Vect_delet
103103
static QString GRASS_KEY = "grass";
104104

105105
int QgsGrassProvider::LAST_TYPE = -9999;
106+
int QgsGrassProvider::mEditedCount = 0;
106107

107108
QgsGrassProvider::QgsGrassProvider( QString uri )
108109
: QgsVectorDataProvider( uri )
@@ -291,6 +292,14 @@ QgsGrassProvider::~QgsGrassProvider()
291292

292293
int 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

src/providers/grass/qgsgrassprovider.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,9 @@ class GRASS_LIB_EXPORT QgsGrassProvider : public QgsVectorDataProvider
481481
// last geometry GV_* type, used e.g. for splitting features
482482
int mLastType;
483483

484+
// number of currently being edited providers
485+
static int mEditedCount;
486+
484487
friend class QgsGrassFeatureSource;
485488
friend class QgsGrassFeatureIterator;
486489
};

0 commit comments

Comments
 (0)