瀏覽代碼

UI: Track custom browser dock names internally

This is a workaround for a change in Qt behavior between 6.5.1 and
6.5.2[1] which affected the outcome of attempting to set the window
title of a window that is not currently open. In Qt 6.4.3 and 6.5.1, the
window title would be set. In Qt 6.5.2, the window title will become
NULL/empty.

Instead of relying on Qt to have valid titles for custom browser dock
windows that we manage, let's track the names ourselves.

[1]: https://github.com/qt/qtbase/commit/c153066baaa88718ed45b68230d81285eb436d3d
Ryan Foster 2 年之前
父節點
當前提交
20e4f0cad3
共有 2 個文件被更改,包括 11 次插入5 次删除
  1. 1 0
      UI/window-basic-main.hpp
  2. 10 5
      UI/window-extra-browsers.cpp

+ 1 - 0
UI/window-basic-main.hpp

@@ -572,6 +572,7 @@ private:
 	QPointer<QAction> extraBrowserMenuDocksSeparator;
 
 	QList<QSharedPointer<QDockWidget>> extraBrowserDocks;
+	QStringList extraBrowserDockNames;
 	QStringList extraBrowserDockTargets;
 
 	void ClearExtraBrowserDocks();

+ 10 - 5
UI/window-extra-browsers.cpp

@@ -32,12 +32,9 @@ void ExtraBrowsersModel::Reset()
 	OBSBasic *main = OBSBasic::Get();
 
 	for (int i = 0; i < main->extraBrowserDocks.size(); i++) {
-		BrowserDock *dock = reinterpret_cast<BrowserDock *>(
-			main->extraBrowserDocks[i].data());
-
 		Item item;
 		item.prevIdx = i;
-		item.title = dock->windowTitle();
+		item.title = main->extraBrowserDockNames[i];
 		item.url = main->extraBrowserDockTargets[i];
 		items.push_back(item);
 	}
@@ -181,6 +178,10 @@ void ExtraBrowsersModel::UpdateItem(Item &item)
 	dock->setWindowTitle(item.title);
 	dock->setObjectName(item.title + OBJ_NAME_SUFFIX);
 
+	if (main->extraBrowserDockNames[idx] != item.title) {
+		main->extraBrowserDockNames[idx] = item.title;
+	}
+
 	if (main->extraBrowserDockTargets[idx] != item.url) {
 		dock->cefWidget->setURL(QT_TO_UTF8(item.url));
 		main->extraBrowserDockTargets[idx] = item.url;
@@ -235,6 +236,7 @@ void ExtraBrowsersModel::Apply()
 	for (int i = deleted.size() - 1; i >= 0; i--) {
 		int idx = deleted[i];
 		main->extraBrowserDockTargets.removeAt(idx);
+		main->extraBrowserDockNames.removeAt(idx);
 		main->extraBrowserDocks.removeAt(idx);
 	}
 
@@ -462,6 +464,7 @@ void OBSExtraBrowsers::on_apply_clicked()
 void OBSBasic::ClearExtraBrowserDocks()
 {
 	extraBrowserDockTargets.clear();
+	extraBrowserDockNames.clear();
 	extraBrowserDocks.clear();
 }
 
@@ -494,10 +497,11 @@ void OBSBasic::SaveExtraBrowserDocks()
 	Json::array array;
 	for (int i = 0; i < extraBrowserDocks.size(); i++) {
 		QDockWidget *dock = extraBrowserDocks[i].data();
+		QString title = extraBrowserDockNames[i];
 		QString url = extraBrowserDockTargets[i];
 		QString uuid = dock->property("uuid").toString();
 		Json::object obj{
-			{"title", QT_TO_UTF8(dock->windowTitle())},
+			{"title", QT_TO_UTF8(title)},
 			{"url", QT_TO_UTF8(url)},
 			{"uuid", QT_TO_UTF8(uuid)},
 		};
@@ -566,6 +570,7 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url,
 
 	AddDockWidget(dock, Qt::RightDockWidgetArea, true);
 	extraBrowserDocks.push_back(QSharedPointer<QDockWidget>(dock));
+	extraBrowserDockNames.push_back(title);
 	extraBrowserDockTargets.push_back(url);
 
 	if (firstCreate) {