@@ -368,19 +368,19 @@ void QgsLayerItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *men
368368
369369 if ( item->capabilities2 () & QgsDataItem::Delete )
370370 {
371- QList<QgsLayerItem *> selectedDeletableItems ;
371+ QStringList selectedDeletableItemPaths ;
372372 for ( QgsDataItem *selectedItem : selectedItems )
373373 {
374374 if ( qobject_cast<QgsLayerItem *>( selectedItem ) && ( selectedItem->capabilities2 () & QgsDataItem::Delete ) )
375- selectedDeletableItems .append ( qobject_cast<QgsLayerItem *>( selectedItem ) );
375+ selectedDeletableItemPaths .append ( qobject_cast<QgsLayerItem *>( selectedItem )-> uri ( ) );
376376 }
377377
378- const QString deleteText = selectedDeletableItems .count () == 1 ? tr ( " Delete Layer" )
378+ const QString deleteText = selectedDeletableItemPaths .count () == 1 ? tr ( " Delete Layer" )
379379 : tr ( " Delete Selected Layers" );
380380 QAction *deleteAction = new QAction ( deleteText, menu );
381381 connect ( deleteAction, &QAction::triggered, this , [ = ]
382382 {
383- deleteLayers ( selectedDeletableItems );
383+ deleteLayers ( selectedDeletableItemPaths );
384384 } );
385385 menu->addAction ( deleteAction );
386386 }
@@ -452,10 +452,17 @@ void QgsLayerItemGuiProvider::addLayersFromItems( const QList<QgsDataItem *> &it
452452 QgisApp::instance ()->handleDropUriList ( layerUriList );
453453}
454454
455- void QgsLayerItemGuiProvider::deleteLayers ( const QList<QgsLayerItem *> &items )
455+ void QgsLayerItemGuiProvider::deleteLayers ( const QStringList &itemPaths )
456456{
457- for ( QgsLayerItem *item : items )
457+ for ( const QString &itemPath : itemPaths )
458458 {
459+ // get the item from browserModel by its path
460+ QgsLayerItem *item = qobject_cast<QgsLayerItem *>( QgisApp::instance ()->browserModel ()->dataItem ( QgisApp::instance ()->browserModel ()->findUri ( itemPath ) ) );
461+ if ( !item )
462+ {
463+ QMessageBox::information ( QgisApp::instance (), tr ( " Delete Layer" ), tr ( " Item with path %1 not found anymore." ).arg ( itemPath ) );
464+ return ;
465+ }
459466 if ( !item->deleteLayer () )
460467 QMessageBox::information ( QgisApp::instance (), tr ( " Delete Layer" ), tr ( " Item Layer %1 cannot be deleted." ).arg ( item->name () ) );
461468 }
0 commit comments