Skip to content

Commit d775a0d

Browse files
committed
[app][bugfix] Update layer editable state when filter is changed
Fixes #17507
1 parent 2169c88 commit d775a0d

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

src/app/qgisapp.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -8940,6 +8940,7 @@ void QgisApp::layerSubsetString()
89408940
if ( qb->exec() && ( subsetBefore != qb->sql() ) && mLayerTreeView )
89418941
{
89428942
mLayerTreeView->refreshLayerSymbology( vlayer->id() );
8943+
activateDeactivateLayerRelatedActions( vlayer );
89438944
}
89448945
}
89458946

@@ -11089,14 +11090,13 @@ void QgisApp::layersWereAdded( const QList<QgsMapLayer *> &layers )
1108911090
connect( vlayer, &QgsVectorLayer::labelingFontNotFound, this, &QgisApp::labelingFontNotFound );
1109011091

1109111092
QgsVectorDataProvider *vProvider = vlayer->dataProvider();
11092-
if ( vProvider && vProvider->capabilities() & QgsVectorDataProvider::EditingCapabilities )
11093-
{
11094-
connect( vlayer, &QgsVectorLayer::layerModified, this, &QgisApp::updateLayerModifiedActions );
11095-
connect( vlayer, &QgsVectorLayer::editingStarted, this, &QgisApp::layerEditStateChanged );
11096-
connect( vlayer, &QgsVectorLayer::editingStopped, this, &QgisApp::layerEditStateChanged );
11097-
connect( vlayer, &QgsVectorLayer::readOnlyChanged, this, &QgisApp::layerEditStateChanged );
11098-
}
11099-
11093+
// Do not check for layer editing capabilities because they may change
11094+
// (for example when subsetString is added/removed) and signals need to
11095+
// be in place in order to update the GUI
11096+
connect( vlayer, &QgsVectorLayer::layerModified, this, &QgisApp::updateLayerModifiedActions );
11097+
connect( vlayer, &QgsVectorLayer::editingStarted, this, &QgisApp::layerEditStateChanged );
11098+
connect( vlayer, &QgsVectorLayer::editingStopped, this, &QgisApp::layerEditStateChanged );
11099+
connect( vlayer, &QgsVectorLayer::readOnlyChanged, this, &QgisApp::layerEditStateChanged );
1110011100
connect( vlayer, &QgsVectorLayer::raiseError, this, &QgisApp::onLayerError );
1110111101

1110211102
provider = vProvider;

src/app/qgisapp.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,13 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
689689
//! mark project dirty
690690
void markDirty();
691691

692-
void layersWereAdded( const QList<QgsMapLayer *> & );
692+
/**
693+
* \brief layersWereAdded is triggered when layers were added
694+
* This method loops through the list of \a layers and connect all
695+
* application signals that need to listen to layer events.
696+
* \param layers list of map layers that have been added
697+
*/
698+
void layersWereAdded( const QList<QgsMapLayer *> &layers );
693699

694700
/* layer will be removed - changed from removingLayer to removingLayers
695701
in 1.8.

src/app/qgsapplayertreeviewmenuprovider.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ QMenu *QgsAppLayerTreeViewMenuProvider::createContextMenu()
226226
{
227227
menu->addAction( toggleEditingAction );
228228
toggleEditingAction->setChecked( vlayer->isEditable() );
229+
toggleEditingAction->setEnabled( true );
229230
}
230231
if ( saveLayerEditsAction && vlayer->isModified() )
231232
{

0 commit comments

Comments
 (0)