fix: panel/window bugs surfaced by new gtest coverage
- MainWindowLayoutInfo: toXml() iterated open_sequences_ for the <viewers> section and fromXml() never parsed it, so open footage viewers were lost on layout save/load - PanelWidget never set QObject::objectName, so PanelManager::GetPanelWithName() always returned nullptr and every caller (layout restore, NodeView param panel lookup) was dead code - PanelManager::DestroyInstance() left instance_ dangling (UAF on any later RegisterPanel), unlike the other singletons
This commit is contained in:
@@ -48,10 +48,10 @@ void MainWindowLayoutInfo::toXml(QXmlStreamWriter *writer) const
|
||||
|
||||
writer->writeStartElement(QStringLiteral("viewers"));
|
||||
|
||||
foreach (Sequence *sequence, open_sequences_) {
|
||||
foreach (ViewerOutput *viewer, open_viewers_) {
|
||||
writer->writeTextElement(
|
||||
QStringLiteral("viewer"),
|
||||
QString::number(reinterpret_cast<quintptr>(sequence)));
|
||||
QString::number(reinterpret_cast<quintptr>(viewer)));
|
||||
}
|
||||
|
||||
writer->writeEndElement(); // viewers
|
||||
@@ -129,6 +129,19 @@ MainWindowLayoutInfo::fromXml(QXmlStreamReader *reader,
|
||||
}
|
||||
}
|
||||
|
||||
} else if (reader->name() == QStringLiteral("viewers")) {
|
||||
while (XMLReadNextStartElement(reader)) {
|
||||
if (reader->name() == QStringLiteral("viewer")) {
|
||||
quintptr item_id = reader->readElementText().toULongLong();
|
||||
|
||||
ViewerOutput *open_viewer =
|
||||
static_cast<ViewerOutput *>(node_ptrs.value(item_id));
|
||||
info.open_viewers_.push_back(open_viewer);
|
||||
} else {
|
||||
reader->skipCurrentElement();
|
||||
}
|
||||
}
|
||||
|
||||
} else if (reader->name() == QStringLiteral("state")) {
|
||||
info.state_ =
|
||||
QByteArray::fromBase64(reader->readElementText().toLatin1());
|
||||
|
||||
Reference in New Issue
Block a user