diff --git a/app/panel/panel.cpp b/app/panel/panel.cpp index fa1399f58..a991a4fbb 100644 --- a/app/panel/panel.cpp +++ b/app/panel/panel.cpp @@ -42,6 +42,11 @@ PanelWidget::PanelWidget(const QString &object_name) , border_visible_(false) , signal_instead_of_close_(false) { + // KDDockWidgets stores object_name as its uniqueName but does not set it + // as the QObject::objectName; PanelManager::GetPanelWithName() (and layout + // restore in MainWindow) look panels up by objectName, so mirror it here + setObjectName(object_name); + View::setFocusPolicy(Qt::ClickFocus); connect(this, &PanelWidget::shown, this, diff --git a/app/panel/panelmanager.cpp b/app/panel/panelmanager.cpp index 23b88f0bb..c88110b53 100644 --- a/app/panel/panelmanager.cpp +++ b/app/panel/panelmanager.cpp @@ -98,6 +98,7 @@ void PanelManager::CreateInstance() void PanelManager::DestroyInstance() { delete instance_; + instance_ = nullptr; } PanelManager *PanelManager::instance() diff --git a/app/window/mainwindow/mainwindowlayoutinfo.cpp b/app/window/mainwindow/mainwindowlayoutinfo.cpp index 7a824adb3..7486cca30 100644 --- a/app/window/mainwindow/mainwindowlayoutinfo.cpp +++ b/app/window/mainwindow/mainwindowlayoutinfo.cpp @@ -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(sequence))); + QString::number(reinterpret_cast(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(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());