[app][bugfix] Update layer editable state when filter is changed

Fixes #17507
This commit is contained in:
Alessandro Pasotti 2017-11-22 09:17:28 +01:00
parent 2169c8809c
commit d775a0d97a
3 changed files with 16 additions and 9 deletions

View File

@ -8940,6 +8940,7 @@ void QgisApp::layerSubsetString()
if ( qb->exec() && ( subsetBefore != qb->sql() ) && mLayerTreeView )
{
mLayerTreeView->refreshLayerSymbology( vlayer->id() );
activateDeactivateLayerRelatedActions( vlayer );
}
}
@ -11089,14 +11090,13 @@ void QgisApp::layersWereAdded( const QList<QgsMapLayer *> &layers )
connect( vlayer, &QgsVectorLayer::labelingFontNotFound, this, &QgisApp::labelingFontNotFound );
QgsVectorDataProvider *vProvider = vlayer->dataProvider();
if ( vProvider && vProvider->capabilities() & QgsVectorDataProvider::EditingCapabilities )
{
connect( vlayer, &QgsVectorLayer::layerModified, this, &QgisApp::updateLayerModifiedActions );
connect( vlayer, &QgsVectorLayer::editingStarted, this, &QgisApp::layerEditStateChanged );
connect( vlayer, &QgsVectorLayer::editingStopped, this, &QgisApp::layerEditStateChanged );
connect( vlayer, &QgsVectorLayer::readOnlyChanged, this, &QgisApp::layerEditStateChanged );
}
// Do not check for layer editing capabilities because they may change
// (for example when subsetString is added/removed) and signals need to
// be in place in order to update the GUI
connect( vlayer, &QgsVectorLayer::layerModified, this, &QgisApp::updateLayerModifiedActions );
connect( vlayer, &QgsVectorLayer::editingStarted, this, &QgisApp::layerEditStateChanged );
connect( vlayer, &QgsVectorLayer::editingStopped, this, &QgisApp::layerEditStateChanged );
connect( vlayer, &QgsVectorLayer::readOnlyChanged, this, &QgisApp::layerEditStateChanged );
connect( vlayer, &QgsVectorLayer::raiseError, this, &QgisApp::onLayerError );
provider = vProvider;

View File

@ -689,7 +689,13 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
//! mark project dirty
void markDirty();
void layersWereAdded( const QList<QgsMapLayer *> & );
/**
* \brief layersWereAdded is triggered when layers were added
* This method loops through the list of \a layers and connect all
* application signals that need to listen to layer events.
* \param layers list of map layers that have been added
*/
void layersWereAdded( const QList<QgsMapLayer *> &layers );
/* layer will be removed - changed from removingLayer to removingLayers
in 1.8.

View File

@ -226,6 +226,7 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
{
menu->addAction( toggleEditingAction );
toggleEditingAction->setChecked( vlayer->isEditable() );
toggleEditingAction->setEnabled( true );
}
if ( saveLayerEditsAction && vlayer->isModified() )
{