From fd624f03b6e3c5379a0ee24b770252734c5f74d7 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 26 Jan 2022 19:41:39 +0100 Subject: [PATCH] Forgot emiting "layoutAbouttobechanged" in NetlistModel::setCell(). * Bug: In NetlistModel::setCell() template, forgot to send the "layoutAboutToBeChanged" signal before disconnecting the netlist datas. This seemed to go unnoticed until ported under Qt5. Was generating strange random core dump when running the engines with a net kept selected. Disgraceful crash during demos... --- hurricane/src/viewer/ControllerWidget.cpp | 30 +++++++++---------- hurricane/src/viewer/NetlistWidget.cpp | 2 +- .../viewer/hurricane/viewer/NetlistModel.h | 2 ++ 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/hurricane/src/viewer/ControllerWidget.cpp b/hurricane/src/viewer/ControllerWidget.cpp index 60656aed..bdab568d 100644 --- a/hurricane/src/viewer/ControllerWidget.cpp +++ b/hurricane/src/viewer/ControllerWidget.cpp @@ -218,32 +218,32 @@ namespace Hurricane { void TabNetlist::setSyncNetlist ( bool state ) { - if ( state and getCellWidget() ) { - _netlistBrowser->setCell ( getCellWidget()->getCell() ); + if (state and getCellWidget()) { + _netlistBrowser->setCell( getCellWidget()->getCell() ); } else { - _netlistBrowser->setCell ( NULL ); + _netlistBrowser->setCell( NULL ); } } void TabNetlist::setSyncSelection ( bool state ) { - if ( state and getCellWidget() and _syncNetlist->isChecked() ) { + if (state and getCellWidget() and _syncNetlist->isChecked()) { _cwCumulativeSelection = getCellWidget()->cumulativeSelection(); - if ( not _cwCumulativeSelection ) { + if (not _cwCumulativeSelection) { getCellWidget()->openRefreshSession (); getCellWidget()->unselectAll (); getCellWidget()->closeRefreshSession (); } - getCellWidget()->setShowSelection ( true ); - connect ( _netlistBrowser, SIGNAL(netSelected (Occurrence)), getCellWidget(), SLOT(select (Occurrence)) ); - connect ( _netlistBrowser, SIGNAL(netUnselected(Occurrence)), getCellWidget(), SLOT(unselect(Occurrence)) ); - _netlistBrowser->updateSelecteds (); + getCellWidget()->setShowSelection( true ); + connect( _netlistBrowser, SIGNAL(netSelected (Occurrence)), getCellWidget(), SLOT(select (Occurrence)) ); + connect( _netlistBrowser, SIGNAL(netUnselected(Occurrence)), getCellWidget(), SLOT(unselect(Occurrence)) ); + _netlistBrowser->updateSelecteds(); } else { - getCellWidget()->setShowSelection ( false ); - getCellWidget()->setCumulativeSelection ( _cwCumulativeSelection ); - _netlistBrowser->disconnect ( getCellWidget(), SLOT(select (Occurrence)) ); - _netlistBrowser->disconnect ( getCellWidget(), SLOT(unselect(Occurrence)) ); + getCellWidget()->setShowSelection( false ); + getCellWidget()->setCumulativeSelection( _cwCumulativeSelection ); + _netlistBrowser->disconnect( getCellWidget(), SLOT(select (Occurrence)) ); + _netlistBrowser->disconnect( getCellWidget(), SLOT(unselect(Occurrence)) ); } } @@ -269,13 +269,13 @@ namespace Hurricane { void TabNetlist::cellPreModificate () { - _netlistBrowser->setCell ( NULL ); + _netlistBrowser->setCell( NULL ); } void TabNetlist::cellPostModificate () { - setSyncNetlist ( _syncNetlist->isChecked() ); + setSyncNetlist( _syncNetlist->isChecked() ); } diff --git a/hurricane/src/viewer/NetlistWidget.cpp b/hurricane/src/viewer/NetlistWidget.cpp index 88ababd5..b0bc2994 100644 --- a/hurricane/src/viewer/NetlistWidget.cpp +++ b/hurricane/src/viewer/NetlistWidget.cpp @@ -178,7 +178,7 @@ namespace Hurricane { void NetlistWidget::textFilterChanged () { - _sortModel->setFilterRegExp ( _filterPatternLineEdit->text() ); + _sortModel->setFilterRegExp( _filterPatternLineEdit->text() ); //updateSelecteds (); } diff --git a/hurricane/src/viewer/hurricane/viewer/NetlistModel.h b/hurricane/src/viewer/hurricane/viewer/NetlistModel.h index e9c534c1..ddba6b0b 100644 --- a/hurricane/src/viewer/hurricane/viewer/NetlistModel.h +++ b/hurricane/src/viewer/hurricane/viewer/NetlistModel.h @@ -67,6 +67,8 @@ namespace Hurricane { void NetlistModel::setCell ( Cell* cell ) { if (_cell != cell) { + emit layoutAboutToBeChanged (); + if (_cell) delete _netlist; _cell = cell;