1
0
Эх сурвалжийг харах

UI: Uniquely identify Custom Browser Docks

Matt Gajownik 3 жил өмнө
parent
commit
0b67dc0285

+ 1 - 0
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);

+ 1 - 1
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;

+ 13 - 3
UI/window-extra-browsers.cpp

@@ -5,6 +5,7 @@
 
 #include <QLineEdit>
 #include <QHBoxLayout>
+#include <QUuid>
 
 #include <json11.hpp>
 
@@ -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);

+ 1 - 0
UI/window-extra-browsers.hpp

@@ -49,6 +49,7 @@ public:
 		int prevIdx;
 		QString title;
 		QString url;
+		QString uuid;
 	};
 
 	void TabSelection(bool forward);