浏览代码

UI: Only allow stream/record hotkeys if the UI buttons are enabled

Currently the only thing preventing a user from trying to start multiple
streams or recordings is the UI buttons being disabled. The hotkey code
allowed the user to bypass that, which for streaming resulted in lots of
rtmp output connect threads spawning, which stomped all over each
other's data structures and resulted in crashes.
Richard Stanway 7 年之前
父节点
当前提交
2d60c89a02
共有 1 个文件被更改,包括 9 次插入5 次删除
  1. 9 5
      UI/window-basic-main.cpp

+ 9 - 5
UI/window-basic-main.cpp

@@ -1786,7 +1786,7 @@ void OBSBasic::CreateHotkeys()
 	[](void *data, obs_hotkey_pair_id, obs_hotkey_t*, bool pressed) \
 	[](void *data, obs_hotkey_pair_id, obs_hotkey_t*, bool pressed) \
 	{ \
 	{ \
 		OBSBasic &basic = *static_cast<OBSBasic*>(data); \
 		OBSBasic &basic = *static_cast<OBSBasic*>(data); \
-		if (pred && pressed) { \
+		if ((pred) && pressed) { \
 			blog(LOG_INFO, log_action " due to hotkey"); \
 			blog(LOG_INFO, log_action " due to hotkey"); \
 			method(); \
 			method(); \
 			return true; \
 			return true; \
@@ -1799,9 +1799,11 @@ void OBSBasic::CreateHotkeys()
 			Str("Basic.Main.StartStreaming"),
 			Str("Basic.Main.StartStreaming"),
 			"OBSBasic.StopStreaming",
 			"OBSBasic.StopStreaming",
 			Str("Basic.Main.StopStreaming"),
 			Str("Basic.Main.StopStreaming"),
-			MAKE_CALLBACK(!basic.outputHandler->StreamingActive(),
+			MAKE_CALLBACK(!basic.outputHandler->StreamingActive() &&
+				basic.ui->streamButton->isEnabled(),
 				basic.StartStreaming, "Starting stream"),
 				basic.StartStreaming, "Starting stream"),
-			MAKE_CALLBACK(basic.outputHandler->StreamingActive(),
+			MAKE_CALLBACK(basic.outputHandler->StreamingActive() &&
+				basic.ui->streamButton->isEnabled(),
 				basic.StopStreaming, "Stopping stream"),
 				basic.StopStreaming, "Stopping stream"),
 			this, this);
 			this, this);
 	LoadHotkeyPair(streamingHotkeys,
 	LoadHotkeyPair(streamingHotkeys,
@@ -1827,9 +1829,11 @@ void OBSBasic::CreateHotkeys()
 			Str("Basic.Main.StartRecording"),
 			Str("Basic.Main.StartRecording"),
 			"OBSBasic.StopRecording",
 			"OBSBasic.StopRecording",
 			Str("Basic.Main.StopRecording"),
 			Str("Basic.Main.StopRecording"),
-			MAKE_CALLBACK(!basic.outputHandler->RecordingActive(),
+			MAKE_CALLBACK(!basic.outputHandler->RecordingActive() &&
+				!basic.ui->recordButton->isChecked(),
 				basic.StartRecording, "Starting recording"),
 				basic.StartRecording, "Starting recording"),
-			MAKE_CALLBACK(basic.outputHandler->RecordingActive(),
+			MAKE_CALLBACK(basic.outputHandler->RecordingActive() &&
+				basic.ui->recordButton->isChecked(),
 				basic.StopRecording, "Stopping recording"),
 				basic.StopRecording, "Stopping recording"),
 			this, this);
 			this, this);
 	LoadHotkeyPair(recordingHotkeys,
 	LoadHotkeyPair(recordingHotkeys,