diff --git a/UI/CMakeLists.txt b/UI/CMakeLists.txt
index a33f9e16d..c9f596f02 100644
--- a/UI/CMakeLists.txt
+++ b/UI/CMakeLists.txt
@@ -243,6 +243,7 @@ set(obs_SOURCES
combobox-ignorewheel.cpp
spinbox-ignorewheel.cpp
record-button.cpp
+ url-push-button.cpp
volume-control.cpp
adv-audio-control.cpp
item-widget-helpers.cpp
@@ -298,6 +299,7 @@ set(obs_HEADERS
menu-button.hpp
mute-checkbox.hpp
record-button.hpp
+ url-push-button.hpp
volume-control.hpp
adv-audio-control.hpp
item-widget-helpers.hpp
diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index 3ab69de19..bc7852684 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -162,6 +162,7 @@ Basic.AutoConfig.StreamPage.ConnectAccount="Connect Account (recommended)"
Basic.AutoConfig.StreamPage.DisconnectAccount="Disconnect Account"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Disconnect Account?"
Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are you sure you want to disconnect your account?"
+Basic.AutoConfig.StreamPage.GetStreamKey="Get Stream Key"
Basic.AutoConfig.StreamPage.UseStreamKey="Use Stream Key"
Basic.AutoConfig.StreamPage.Service="Service"
Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..."
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index 37d929761..4ca2c4a56 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -151,8 +151,8 @@
0
0
- 803
- 977
+ 630
+ 1035
@@ -775,7 +775,7 @@
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- -
+
-
Basic.AutoConfig.StreamPage.Service
@@ -785,7 +785,7 @@
- -
+
-
20
@@ -921,7 +921,7 @@
-
- 0
+ 1
@@ -1011,10 +1011,23 @@
+ -
+
+
+
+
+
+ -4
+
+
+ Basic.AutoConfig.StreamPage.GetStreamKey
+
+
+
- -
+
-
Qt::Horizontal
@@ -1027,7 +1040,7 @@
- -
+
-
-
@@ -1051,7 +1064,7 @@
- -
+
-
-
@@ -1076,16 +1089,20 @@
-
+
+
+ Basic.Settings.Stream.BandwidthTestMode
+
+
+
+ -
Basic.Settings.Stream.Custom.UseAuthentication
- -
-
-
- -
+
-
Basic.Settings.Stream.Custom.Username
@@ -1095,7 +1112,10 @@
- -
+
-
+
+
+ -
Basic.Settings.Stream.Custom.Password
@@ -1105,7 +1125,7 @@
- -
+
-
@@ -1137,13 +1157,6 @@
- -
-
-
- Basic.Settings.Stream.BandwidthTestMode
-
-
-
@@ -1180,8 +1193,8 @@
0
0
- 601
- 631
+ 739
+ 793
@@ -3628,8 +3641,8 @@
0
0
- 555
- 469
+ 696
+ 601
@@ -4199,7 +4212,7 @@
-
- 0
+ 1
@@ -4444,8 +4457,8 @@
0
0
- 803
- 781
+ 759
+ 930
@@ -5249,6 +5262,13 @@
+
+
+ UrlPushButton
+ QPushButton
+
+
+
listWidget
scrollArea_2
diff --git a/UI/url-push-button.cpp b/UI/url-push-button.cpp
new file mode 100644
index 000000000..6a2b59847
--- /dev/null
+++ b/UI/url-push-button.cpp
@@ -0,0 +1,26 @@
+#include "url-push-button.hpp"
+
+#include
+#include
+#include
+
+void UrlPushButton::setTargetUrl(QUrl url)
+{
+ setToolTip(url.toString());
+ m_targetUrl = url;
+}
+
+QUrl UrlPushButton::targetUrl()
+{
+ return m_targetUrl;
+}
+
+void UrlPushButton::mousePressEvent(QMouseEvent *event)
+{
+ Q_UNUSED(event)
+ QUrl openUrl = m_targetUrl;
+ if (openUrl.isEmpty())
+ return;
+
+ QDesktopServices::openUrl(openUrl);
+}
diff --git a/UI/url-push-button.hpp b/UI/url-push-button.hpp
new file mode 100644
index 000000000..2668ade27
--- /dev/null
+++ b/UI/url-push-button.hpp
@@ -0,0 +1,20 @@
+#pragma once
+
+#include
+#include
+
+class UrlPushButton : public QPushButton {
+ Q_OBJECT
+ Q_PROPERTY(QUrl targetUrl READ targetUrl WRITE setTargetUrl)
+
+public:
+ inline UrlPushButton(QWidget *parent = nullptr) : QPushButton(parent) {}
+ void setTargetUrl(QUrl url);
+ QUrl targetUrl();
+
+protected:
+ void mousePressEvent(QMouseEvent *event) override;
+
+private:
+ QUrl m_targetUrl;
+};
diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp
index f09508462..4f5b1fee4 100644
--- a/UI/window-basic-settings-stream.cpp
+++ b/UI/window-basic-settings-stream.cpp
@@ -1,10 +1,12 @@
#include
+#include
#include "window-basic-settings.hpp"
#include "obs-frontend-api.h"
#include "obs-app.hpp"
#include "window-basic-main.hpp"
#include "qt-wrappers.hpp"
+#include "url-push-button.hpp"
#ifdef BROWSER_AVAILABLE
#include
@@ -177,44 +179,34 @@ void OBSBasicSettings::SaveStream1Settings()
void OBSBasicSettings::UpdateKeyLink()
{
- bool custom = IsCustomService();
- QString serviceName = ui->service->currentText();
-
- if (custom)
- serviceName = "";
-
- QString text = QTStr("Basic.AutoConfig.StreamPage.StreamKey");
- if (serviceName == "Twitch") {
- text += " ";
- text += QTStr(
- "Basic.AutoConfig.StreamPage.StreamKey.LinkToSite");
- text += "";
- } else if (serviceName == "YouTube / YouTube Gaming") {
- text += " ";
- text += QTStr(
- "Basic.AutoConfig.StreamPage.StreamKey.LinkToSite");
- text += "";
- } else if (serviceName.startsWith("Restream.io")) {
- text += " ";
- text += QTStr(
- "Basic.AutoConfig.StreamPage.StreamKey.LinkToSite");
- text += "";
- } else if (serviceName == "Facebook Live") {
- text += " ";
- text += QTStr(
- "Basic.AutoConfig.StreamPage.StreamKey.LinkToSite");
- text += "";
+ if (IsCustomService()) {
+ ui->getStreamKeyButton->hide();
+ return;
}
- ui->streamKeyLabel->setText(text);
+ QString serviceName = ui->service->currentText();
+ QString streamKeyLink;
+ if (serviceName == "Twitch") {
+ streamKeyLink = QTStr(
+ "https://www.twitch.tv/broadcast/dashboard/streamkey");
+ } else if (serviceName == "YouTube / YouTube Gaming") {
+ streamKeyLink = QTStr("https://www.youtube.com/live_dashboard");
+ } else if (serviceName.startsWith("Restream.io")) {
+ streamKeyLink = QTStr(
+ "https://restream.io/settings/streaming-setup?from=OBS");
+ } else if (serviceName == "Facebook Live") {
+ streamKeyLink +=
+ QTStr("https://www.facebook.com/live/create?ref=OBS");
+ } else if (serviceName.startsWith("Twitter")) {
+ streamKeyLink = QTStr("https://www.pscp.tv/account/producer");
+ }
+
+ if (QString(streamKeyLink).isNull()) {
+ ui->getStreamKeyButton->hide();
+ } else {
+ ui->getStreamKeyButton->setTargetUrl(QUrl(streamKeyLink));
+ ui->getStreamKeyButton->show();
+ }
}
void OBSBasicSettings::LoadServices(bool showAll)