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

UI: Fix YouTubeAppDock crash

Apparently the YouTube app dock thing didn't take into consideration the
fact that the user may have the browser source available, but may not
have browser docks available (via the `cef` global). This is because
certain system configurations do not support browser widgets, such as
Wayland on Linux.

(Lain note: There's multiple things I'm unhappy about here. I'm mostly
going to blame myself for multiple reasons.)
Lain 2 жил өмнө
parent
commit
0c6fa0a2ba

+ 6 - 0
UI/window-basic-main.cpp

@@ -8493,6 +8493,9 @@ YouTubeAppDock *OBSBasic::GetYouTubeAppDock()
 
 void OBSBasic::NewYouTubeAppDock()
 {
+	if (!cef)
+		return;
+
 	if (youtubeAppDock)
 		delete youtubeAppDock;
 	youtubeAppDock = new YouTubeAppDock();
@@ -8500,6 +8503,9 @@ void OBSBasic::NewYouTubeAppDock()
 
 void OBSBasic::DeleteYouTubeAppDock()
 {
+	if (!cef)
+		return;
+
 	if (youtubeAppDock)
 		delete youtubeAppDock;
 	youtubeAppDock = nullptr;

+ 2 - 2
UI/window-basic-settings-stream.cpp

@@ -771,7 +771,7 @@ void OBSBasicSettings::on_connectAccount_clicked()
 	if (!!auth) {
 		OnAuthConnected();
 #ifdef YOUTUBE_ENABLED
-		if (IsYouTubeService(service)) {
+		if (cef && IsYouTubeService(service)) {
 			if (!main->GetYouTubeAppDock()) {
 				main->NewYouTubeAppDock();
 			}
@@ -822,7 +822,7 @@ void OBSBasicSettings::on_disconnectAccount_clicked()
 	ui->connectedAccountText->setVisible(false);
 
 #ifdef YOUTUBE_ENABLED
-	if (IsYouTubeService(service)) {
+	if (cef && IsYouTubeService(service)) {
 		if (!main->GetYouTubeAppDock()) {
 			main->NewYouTubeAppDock();
 		}

+ 18 - 11
UI/window-basic-settings.cpp

@@ -4245,18 +4245,9 @@ void OBSBasicSettings::on_listWidget_itemSelectionChanged()
 	pageIndex = row;
 }
 
-void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
+void OBSBasicSettings::UpdateYouTubeAppDockSettings()
 {
-	QDialogButtonBox::ButtonRole val = ui->buttonBox->buttonRole(button);
-
-	if (val == QDialogButtonBox::ApplyRole ||
-	    val == QDialogButtonBox::AcceptRole) {
-		if (!QueryAllowedToClose())
-			return;
-
-		SaveSettings();
-
-#ifdef YOUTUBE_ENABLED
+	if (cef) {
 		std::string service = ui->service->currentText().toStdString();
 		if (IsYouTubeService(service)) {
 			if (!main->GetYouTubeAppDock()) {
@@ -4270,6 +4261,22 @@ void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
 			}
 			main->DeleteYouTubeAppDock();
 		}
+	}
+}
+
+void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
+{
+	QDialogButtonBox::ButtonRole val = ui->buttonBox->buttonRole(button);
+
+	if (val == QDialogButtonBox::ApplyRole ||
+	    val == QDialogButtonBox::AcceptRole) {
+		if (!QueryAllowedToClose())
+			return;
+
+		SaveSettings();
+
+#ifdef YOUTUBE_ENABLED
+		UpdateYouTubeAppDockSettings();
 #endif
 		ClearChanged();
 	}

+ 2 - 0
UI/window-basic-settings.hpp

@@ -350,6 +350,8 @@ private:
 
 	bool AskIfCanCloseSettings();
 
+	void UpdateYouTubeAppDockSettings();
+
 	QIcon generalIcon;
 	QIcon streamIcon;
 	QIcon outputIcon;

+ 6 - 0
UI/window-dock-youtube-app.cpp

@@ -50,6 +50,9 @@ YouTubeAppDock::~YouTubeAppDock()
 
 bool YouTubeAppDock::IsYTServiceSelected()
 {
+	if (!cef)
+		return false;
+
 	obs_service_t *service_obj = OBSBasic::Get()->GetService();
 	OBSDataAutoRelease settings = obs_service_get_settings(service_obj);
 	const char *service = obs_data_get_string(settings, "service");
@@ -430,6 +433,9 @@ YoutubeApiWrappers *YouTubeAppDock::GetYTApi()
 
 void YouTubeAppDock::CleanupYouTubeUrls()
 {
+	if (!cef)
+		return;
+
 	static constexpr const char *YOUTUBE_VIDEO_URL =
 		"://studio.youtube.com/video/";
 	// remove legacy YouTube Browser Docks (once)