Browse Source

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 years ago
parent
commit
0c6fa0a2ba

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

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

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

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

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

@@ -4245,18 +4245,9 @@ void OBSBasicSettings::on_listWidget_itemSelectionChanged()
 	pageIndex = row;
 	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();
 		std::string service = ui->service->currentText().toStdString();
 		if (IsYouTubeService(service)) {
 		if (IsYouTubeService(service)) {
 			if (!main->GetYouTubeAppDock()) {
 			if (!main->GetYouTubeAppDock()) {
@@ -4270,6 +4261,22 @@ void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
 			}
 			}
 			main->DeleteYouTubeAppDock();
 			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
 #endif
 		ClearChanged();
 		ClearChanged();
 	}
 	}

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

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

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

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