diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index a6db27f4a..8168668bb 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -9571,6 +9571,7 @@ void OBSBasic::ResizeOutputSizeOfSource() QAction *OBSBasic::AddDockWidget(QDockWidget *dock) { QAction *action = ui->menuDocks->addAction(dock->windowTitle()); + action->setProperty("uuid", dock->property("uuid").toString()); action->setCheckable(true); assignDockToggle(dock, action); extraDocks.push_back(dock); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index c0d1ffc1a..5e26a1bb0 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -538,7 +538,7 @@ private: void SaveExtraBrowserDocks(); void ManageExtraBrowserDocks(); void AddExtraBrowserDock(const QString &title, const QString &url, - bool firstCreate); + const QString &uuid, bool firstCreate); #endif QIcon imageIcon; diff --git a/UI/window-extra-browsers.cpp b/UI/window-extra-browsers.cpp index 2cbdd48bb..8f57b1375 100644 --- a/UI/window-extra-browsers.cpp +++ b/UI/window-extra-browsers.cpp @@ -5,6 +5,7 @@ #include #include +#include #include @@ -178,6 +179,7 @@ void ExtraBrowsersModel::UpdateItem(Item &item) main->extraBrowserDocks[idx].data()); dock->setWindowTitle(item.title); dock->setObjectName(item.title + OBJ_NAME_SUFFIX); + dock->setProperty("uuid", item.uuid); main->extraBrowserDockActions[idx]->setText(item.title); if (main->extraBrowserDockTargets[idx] != item.url) { @@ -224,7 +226,8 @@ void ExtraBrowsersModel::Apply() if (item.prevIdx != -1) { UpdateItem(item); } else { - main->AddExtraBrowserDock(item.title, item.url, true); + main->AddExtraBrowserDock(item.title, item.url, + item.uuid, true); } } @@ -479,8 +482,10 @@ void OBSBasic::LoadExtraBrowserDocks() for (Json &item : array) { std::string title = item["title"].string_value(); std::string url = item["url"].string_value(); + std::string uuid = item["uuid"].string_value(); - AddExtraBrowserDock(title.c_str(), url.c_str(), false); + AddExtraBrowserDock(title.c_str(), url.c_str(), uuid.c_str(), + false); } } @@ -490,9 +495,11 @@ void OBSBasic::SaveExtraBrowserDocks() for (int i = 0; i < extraBrowserDocks.size(); i++) { QAction *action = extraBrowserDockActions[i].data(); QString url = extraBrowserDockTargets[i]; + QString uuid = action->property("uuid").toString(); Json::object obj{ {"title", QT_TO_UTF8(action->text())}, {"url", QT_TO_UTF8(url)}, + {"uuid", QT_TO_UTF8(uuid)}, }; array.push_back(obj); } @@ -515,7 +522,7 @@ void OBSBasic::ManageExtraBrowserDocks() } void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, - bool firstCreate) + const QString &uuid, bool firstCreate) { static int panel_version = -1; if (panel_version == -1) { @@ -523,6 +530,9 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, } BrowserDock *dock = new BrowserDock(); + QString bId(uuid.isEmpty() ? QUuid::createUuid().toString() : uuid); + bId.replace(QRegularExpression("[{}-]"), ""); + dock->setProperty("uuid", bId); dock->setObjectName(title + OBJ_NAME_SUFFIX); dock->resize(460, 600); dock->setMinimumSize(80, 80); diff --git a/UI/window-extra-browsers.hpp b/UI/window-extra-browsers.hpp index cdfb14b05..b867e4014 100644 --- a/UI/window-extra-browsers.hpp +++ b/UI/window-extra-browsers.hpp @@ -49,6 +49,7 @@ public: int prevIdx; QString title; QString url; + QString uuid; }; void TabSelection(bool forward);