From 592bcec5d64338db603f76a5b11e61cd86151a04 Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Sat, 8 Jul 2023 06:39:03 +0800 Subject: [PATCH] cabana: fix segfault when editing signal while filtering (#28836) Fix the issue that editing signal will segfault when there is a filter string. old-commit-hash: 1301e2d640c9e14117f832bf37cbf469dbc43900 --- tools/cabana/signalview.cc | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/cabana/signalview.cc b/tools/cabana/signalview.cc index b862abe56..defa4e7b0 100644 --- a/tools/cabana/signalview.cc +++ b/tools/cabana/signalview.cc @@ -226,10 +226,14 @@ void SignalModel::handleMsgChanged(MessageId id) { void SignalModel::handleSignalAdded(MessageId id, const cabana::Signal *sig) { if (id == msg_id) { - int i = dbc()->msg(msg_id)->indexOf(sig); - beginInsertRows({}, i, i); - insertItem(root.get(), i, sig); - endInsertRows(); + if (filter_str.isEmpty()) { + int i = dbc()->msg(msg_id)->indexOf(sig); + beginInsertRows({}, i, i); + insertItem(root.get(), i, sig); + endInsertRows(); + } else if (sig->name.contains(filter_str, Qt::CaseInsensitive)) { + refresh(); + } } } @@ -237,12 +241,14 @@ void SignalModel::handleSignalUpdated(const cabana::Signal *sig) { if (int row = signalRow(sig); row != -1) { emit dataChanged(index(row, 0), index(row, 1), {Qt::DisplayRole, Qt::EditRole, Qt::CheckStateRole}); - // move row when the order changes. - int to = dbc()->msg(msg_id)->indexOf(sig); - if (to != row) { - beginMoveRows({}, row, row, {}, to > row ? to + 1 : to); - root->children.move(row, to); - endMoveRows(); + if (filter_str.isEmpty()) { + // move row when the order changes. + int to = dbc()->msg(msg_id)->indexOf(sig); + if (to != row) { + beginMoveRows({}, row, row, {}, to > row ? to + 1 : to); + root->children.move(row, to); + endMoveRows(); + } } } }