@@ -107,9 +107,11 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
107
107
bool canDeleteAttributes = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::DeleteAttributes;
108
108
bool canAddFeatures = mLayer ->dataProvider ()->capabilities () & QgsVectorDataProvider::AddFeatures;
109
109
110
+ mToggleEditingButton ->blockSignals ( true );
110
111
mToggleEditingButton ->setCheckable ( true );
111
112
mToggleEditingButton ->setChecked ( mLayer ->isEditable () );
112
113
mToggleEditingButton ->setEnabled ( canChangeAttributes && !mLayer ->isReadOnly () );
114
+ mToggleEditingButton ->blockSignals ( false );
113
115
114
116
mSaveEditsButton ->setEnabled ( canChangeAttributes && mLayer ->isEditable () );
115
117
mOpenFieldCalculator ->setEnabled (( canChangeAttributes || canAddAttributes ) && mLayer ->isEditable () );
@@ -120,7 +122,6 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
120
122
mAddFeature ->setHidden ( !canAddFeatures || mLayer ->geometryType () != QGis::NoGeometry );
121
123
122
124
// info from table to application
123
- connect ( this , SIGNAL ( editingToggled ( QgsMapLayer * ) ), QgisApp::instance (), SLOT ( toggleEditing ( QgsMapLayer * ) ) );
124
125
connect ( this , SIGNAL ( saveEdits ( QgsMapLayer * ) ), QgisApp::instance (), SLOT ( saveEdits ( QgsMapLayer * ) ) );
125
126
126
127
// info from layer to table
@@ -665,7 +666,13 @@ void QgsAttributeTableDialog::on_mAdvancedSearchButton_clicked()
665
666
666
667
void QgsAttributeTableDialog::on_mToggleEditingButton_toggled ()
667
668
{
668
- emit editingToggled ( mLayer );
669
+ if ( !mLayer )
670
+ return ;
671
+ if ( !QgisApp::instance ()->toggleEditing ( mLayer ) )
672
+ {
673
+ // restore gui state if toggling was canceled or layer commit/rollback failed
674
+ editingToggled ();
675
+ }
669
676
}
670
677
671
678
void QgsAttributeTableDialog::on_mSaveEditsButton_clicked ()
0 commit comments