diff --git a/utils/fgqcanvas/applicationcontroller.cpp b/utils/fgqcanvas/applicationcontroller.cpp index b2cb74dd2..798e4559f 100644 --- a/utils/fgqcanvas/applicationcontroller.cpp +++ b/utils/fgqcanvas/applicationcontroller.cpp @@ -49,6 +49,7 @@ ApplicationController::ApplicationController(QObject *parent) setStatus(Idle); rebuildConfigData(); + rebuildSnapshotData(); } ApplicationController::~ApplicationController() diff --git a/utils/fgqcanvas/canvasconnection.cpp b/utils/fgqcanvas/canvasconnection.cpp index c0985afb8..c2aef0626 100644 --- a/utils/fgqcanvas/canvasconnection.cpp +++ b/utils/fgqcanvas/canvasconnection.cpp @@ -44,7 +44,6 @@ CanvasConnection::CanvasConnection(QObject *parent) : QObject(parent) CanvasConnection::~CanvasConnection() { - qDebug() << Q_FUNC_INFO; disconnect(&m_webSocket, &QWebSocket::disconnected, this, &CanvasConnection::onWebSocketClosed); m_webSocket.close(); @@ -98,9 +97,14 @@ void CanvasConnection::saveSnapshot(QDataStream &ds) const void CanvasConnection::restoreSnapshot(QDataStream &ds) { ds >> m_webSocketUrl >> m_rootPropertyPath >> m_destRect; - m_localPropertyRoot.reset(new LocalProp{nullptr, NameIndexTuple("")}); - m_localPropertyRoot->restoreFromStream(ds, nullptr); + m_localPropertyRoot.reset(LocalProp::restoreFromStream(ds, nullptr)); setStatus(Snapshot); + + emit geometryChanged(); + emit rootPathChanged(); + emit webSocketUrlChanged(); + + emit updated(); } void CanvasConnection::reconnect() @@ -186,6 +190,7 @@ FGQCanvasFontCache *CanvasConnection::fontCache() const void CanvasConnection::onWebSocketConnected() { + qDebug() << Q_FUNC_INFO; m_localPropertyRoot.reset(new LocalProp{nullptr, NameIndexTuple("")}); setStatus(Connected); } diff --git a/utils/fgqcanvas/canvasdisplay.cpp b/utils/fgqcanvas/canvasdisplay.cpp index 2effe7abe..54dd73928 100644 --- a/utils/fgqcanvas/canvasdisplay.cpp +++ b/utils/fgqcanvas/canvasdisplay.cpp @@ -73,8 +73,6 @@ void CanvasDisplay::setCanvas(CanvasConnection *canvas) emit canvasChanged(m_connection); if (m_connection) { - // delete existing children - connect(m_connection, &QObject::destroyed, this, &CanvasDisplay::onConnectionDestroyed); connect(m_connection, &CanvasConnection::statusChanged, @@ -97,7 +95,9 @@ void CanvasDisplay::onConnectionDestroyed() void CanvasDisplay::onConnectionStatusChanged() { - if (m_connection->status() == CanvasConnection::Connected) { + if ((m_connection->status() == CanvasConnection::Connected) || + (m_connection->status() == CanvasConnection::Snapshot)) + { m_rootElement.reset(new FGCanvasGroup(nullptr, m_connection->propertyRoot())); // this is important to elements can discover their connection // by walking their parent chain @@ -108,6 +108,9 @@ void CanvasDisplay::onConnectionStatusChanged() m_rootItem = m_rootElement->createQuickItem(this); onCanvasSizeChanged(); + + m_connection->propertyRoot()->recursiveNotifyRestored(); + qDebug() << Q_FUNC_INFO << "did build item tree"; } } diff --git a/utils/fgqcanvas/localprop.cpp b/utils/fgqcanvas/localprop.cpp index 9e83df14d..66bd3ddde 100644 --- a/utils/fgqcanvas/localprop.cpp +++ b/utils/fgqcanvas/localprop.cpp @@ -162,8 +162,8 @@ void LocalProp::recursiveNotifyRestored() emit childAdded(child); } - for (auto child : _children) { - child->recursiveNotifyRestored(); + for (auto cc : _children) { + cc->recursiveNotifyRestored(); } } diff --git a/utils/fgqcanvas/qml/CanvasFrame.qml b/utils/fgqcanvas/qml/CanvasFrame.qml index e4fda0236..c5b35e23d 100644 --- a/utils/fgqcanvas/qml/CanvasFrame.qml +++ b/utils/fgqcanvas/qml/CanvasFrame.qml @@ -104,6 +104,7 @@ Item { case FG.CanvasConnection.Closed: return "Closed"; case FG.CanvasConnection.Reconnecting: return "Re-connecting"; case FG.CanvasConnection.Error: return "Error"; + case FG.CanvasConnection.Snapshot: return "Snapshot"; } }