Skip to content

Commit

Permalink
Fix repeated editing of transactiongroups
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Jan 18, 2016
1 parent b66e50b commit c288311
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
20 changes: 16 additions & 4 deletions src/core/qgstransactiongroup.cpp
Expand Up @@ -26,14 +26,12 @@ QgsTransactionGroup::QgsTransactionGroup( QObject *parent )
: QObject( parent )
, mEditingStarting( false )
, mEditingStopping( false )
, mTransaction( nullptr )
{

}

QgsTransactionGroup::~QgsTransactionGroup()
{
delete mTransaction;
}

bool QgsTransactionGroup::addLayer( QgsVectorLayer* layer )
Expand Down Expand Up @@ -63,10 +61,10 @@ bool QgsTransactionGroup::addLayer( QgsVectorLayer* layer )

void QgsTransactionGroup::onEditingStarted()
{
if ( mTransaction )
if ( !mTransaction.isNull() )
return;

mTransaction = QgsTransaction::create( mConnString, mProviderKey );
mTransaction.reset( QgsTransaction::create( mConnString, mProviderKey ) );

QString errorMsg;
mTransaction->begin( errorMsg );
Expand Down Expand Up @@ -102,6 +100,8 @@ void QgsTransactionGroup::onCommitChanges()
if ( layer != sender() )
layer->commitChanges();
}

disableTransaction();
}
else
{
Expand Down Expand Up @@ -129,6 +129,7 @@ void QgsTransactionGroup::onRollback()
if ( layer != triggeringLayer )
layer->rollBack();
}
disableTransaction();
}
else
{
Expand All @@ -138,6 +139,17 @@ void QgsTransactionGroup::onRollback()
mEditingStopping = false;
}

void QgsTransactionGroup::disableTransaction()
{
mTransaction.reset();

Q_FOREACH ( QgsVectorLayer* layer, mLayers )
{
disconnect( layer, SIGNAL( beforeCommitChanges() ), this, SLOT( onCommitChanges() ) );
disconnect( layer, SIGNAL( beforeRollBack() ), this, SLOT( onRollback() ) );
}
}

QString QgsTransactionGroup::providerKey() const
{
return mProviderKey;
Expand Down
4 changes: 3 additions & 1 deletion src/core/qgstransactiongroup.h
Expand Up @@ -70,9 +70,11 @@ class CORE_EXPORT QgsTransactionGroup : public QObject
bool mEditingStarting;
bool mEditingStopping;

void disableTransaction();

QSet<QgsVectorLayer*> mLayers;
//! Only set while a transaction is active
QgsTransaction* mTransaction;
QScopedPointer<QgsTransaction> mTransaction;
//! Layers have to be compatible with the connection string
QString mConnString;
QString mProviderKey;
Expand Down

0 comments on commit c288311

Please sign in to comment.