Skip to content

Commit a873289

Browse files
committed
[processing] Fix crash when right clicking toolbox outside of an item
Fixes #20264
1 parent 2f1dec9 commit a873289

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

src/gui/processing/qgsprocessingtoolboxtreeview.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ QgsProcessingToolboxTreeView::QgsProcessingToolboxTreeView( QWidget *parent,
3131
void QgsProcessingToolboxTreeView::setRegistry( QgsProcessingRegistry *registry, QgsProcessingRecentAlgorithmLog *recentLog )
3232
{
3333
QgsProcessingToolboxProxyModel *newModel = new QgsProcessingToolboxProxyModel( this, registry, recentLog );
34-
mToolboxModel = mModel->toolboxModel();
34+
mToolboxModel = newModel->toolboxModel();
3535
setModel( newModel );
3636
mModel->deleteLater();
3737
mModel = newModel;

src/gui/processing/qgsprocessingtoolboxtreeview.h

+2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ class GUI_EXPORT QgsProcessingToolboxTreeView : public QTreeView
109109
*/
110110
QModelIndex findFirstVisibleAlgorithm( const QModelIndex &parent );
111111

112+
friend class TestQgsProcessingModel;
113+
112114
};
113115

114116
///@endcond

tests/src/gui/testqgsprocessingmodel.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,10 @@ void TestQgsProcessingModel::testModel()
154154
QVERIFY( !model.providerForIndex( model.index( 0, 0, QModelIndex() ) ) );
155155
QVERIFY( !model.providerForIndex( model.index( 1, 0, QModelIndex() ) ) );
156156
QVERIFY( !model.indexForProvider( nullptr ).isValid() );
157+
QVERIFY( model.index2node( QModelIndex() ) ); // root node
158+
QCOMPARE( model.index2node( QModelIndex() )->nodeType(), QgsProcessingToolboxModelNode::NodeGroup );
159+
QVERIFY( model.index2node( model.index( -1, 0, QModelIndex() ) ) ); // root node
160+
QCOMPARE( model.index2node( QModelIndex() ), model.index2node( model.index( -1, 0, QModelIndex() ) ) );
157161

158162
// add a provider
159163
DummyProvider *p1 = new DummyProvider( "p1", "provider1" );
@@ -559,6 +563,11 @@ void TestQgsProcessingModel::testView()
559563
QgsProcessingRecentAlgorithmLog recentLog;
560564
QgsProcessingToolboxTreeView view( nullptr, &registry, &recentLog );
561565

566+
// Check view model consistency
567+
QVERIFY( view.mModel );
568+
QVERIFY( view.mToolboxModel );
569+
QCOMPARE( view.mModel->toolboxModel(), view.mToolboxModel );
570+
562571
QVERIFY( !view.algorithmForIndex( QModelIndex() ) );
563572

564573
// add a provider
@@ -636,6 +645,13 @@ void TestQgsProcessingModel::testView()
636645
// but if it doesn't remove the selected one, that algorithm should not be deselected
637646
view.setFilterString( QStringLiteral( "a" ) );
638647
QCOMPARE( view.selectedAlgorithm()->id(), QStringLiteral( "p2:a1" ) );
648+
649+
// Check view model consistency after resetting registry
650+
view.setRegistry( &registry );
651+
QVERIFY( view.mModel );
652+
QVERIFY( view.mToolboxModel );
653+
QCOMPARE( view.mModel->toolboxModel(), view.mToolboxModel );
654+
639655
}
640656

641657
QGSTEST_MAIN( TestQgsProcessingModel )

0 commit comments

Comments
 (0)