- for (const auto &peerData : _coreInfo["sessionConnectedClientData"].toList()) {
- auto coreSessionWidget = new CoreSessionWidget(ui.coreSessionScrollContainer);
- coreSessionWidget->setData(peerData.toMap());
- ui.coreSessionContainer->addWidget(coreSessionWidget);
- connect(coreSessionWidget, SIGNAL(disconnectClicked(int)), this, SLOT(disconnectClicked(int)));
+ bool isNew = false;
+ CoreSessionWidget *coreSessionWidget = _widgets[peerId];
+ if (coreSessionWidget == nullptr) {
+ coreSessionWidget = new CoreSessionWidget(ui.coreSessionScrollContainer);
+ isNew = true;
+ }
+ coreSessionWidget->setData(peerMap);
+ if (isNew) {
+ _widgets[peerId] = coreSessionWidget;
+ // Add this to the end of the session list, but before the default layout stretch item.
+ // The layout stretch item should never be removed, so count should always be >= 1.
+ ui.coreSessionContainer->insertWidget(ui.coreSessionContainer->count() - 1,
+ coreSessionWidget, 0, Qt::AlignTop);
+ connect(coreSessionWidget, SIGNAL(disconnectClicked(int)), this, SLOT(disconnectClicked(int)));
+ }