From b2e51f63a2b7296debf02e9728fa54fb1b14cee1 Mon Sep 17 00:00:00 2001 From: FiniteSingularity Date: Fri, 18 Sep 2026 10:33:23 -0500 Subject: [PATCH] frontend: Add obs_frontend_is_safe_mode_enabled() API call Adds a new API call to the frontend API to check if OBS was launched in Safe Mode. This will primarily be used by core modules that need to know if they should disable certain functionality when OBS is launched in Safe Mode, e.g., frontend-tools disabling third party scripts, or obs-websocket turning off its server by default in Safe Mode. --- docs/sphinx/reference-frontend-api.rst | 8 ++++++++ frontend/OBSStudioAPI.cpp | 6 ++++++ frontend/OBSStudioAPI.hpp | 2 ++ frontend/api/obs-frontend-api.cpp | 5 +++++ frontend/api/obs-frontend-api.h | 2 ++ frontend/api/obs-frontend-internal.hpp | 1 + 6 files changed, 24 insertions(+) diff --git a/docs/sphinx/reference-frontend-api.rst b/docs/sphinx/reference-frontend-api.rst index b4983669b..d1be586f7 100644 --- a/docs/sphinx/reference-frontend-api.rst +++ b/docs/sphinx/reference-frontend-api.rst @@ -989,3 +989,11 @@ Functions :param duplicate: *true* for paste duplicate, *false* for paste reference .. versionadded:: 32.2 + +--------------------------------------- + +.. function:: bool obs_frontend_is_safe_mode_enabled(void) + + :return: *true* if OBS was launched in Safe Mode, *false* otherwise + + .. versionadded:: 33.0 diff --git a/frontend/OBSStudioAPI.cpp b/frontend/OBSStudioAPI.cpp index 7d9df0cb3..56ec8c548 100644 --- a/frontend/OBSStudioAPI.cpp +++ b/frontend/OBSStudioAPI.cpp @@ -11,6 +11,7 @@ extern volatile bool recording_active; extern volatile bool recording_paused; extern volatile bool replaybuf_active; extern volatile bool virtualcam_active; +extern bool safe_mode; template inline size_t GetCallbackIdx(std::vector> &callbacks, T callback, void *private_data) @@ -720,6 +721,11 @@ void OBSStudioAPI::obs_frontend_paste_sceneitem(obs_scene_t *scene, bool duplica main->pasteSceneItem(scene, duplicate); } +bool OBSStudioAPI::obs_frontend_is_safe_mode_enabled() +{ + return safe_mode; +} + void OBSStudioAPI::on_load(obs_data_t *settings) { for (size_t i = saveCallbacks.size(); i > 0; i--) { diff --git a/frontend/OBSStudioAPI.hpp b/frontend/OBSStudioAPI.hpp index 21a9e78a3..a058920dd 100644 --- a/frontend/OBSStudioAPI.hpp +++ b/frontend/OBSStudioAPI.hpp @@ -230,6 +230,8 @@ struct OBSStudioAPI : obs_frontend_callbacks { void obs_frontend_paste_sceneitem(obs_scene_t *scene, bool duplicate) override; + bool obs_frontend_is_safe_mode_enabled(void) override; + void on_load(obs_data_t *settings) override; void on_preload(obs_data_t *settings) override; diff --git a/frontend/api/obs-frontend-api.cpp b/frontend/api/obs-frontend-api.cpp index 9c861ed5d..48e4ecf44 100644 --- a/frontend/api/obs-frontend-api.cpp +++ b/frontend/api/obs-frontend-api.cpp @@ -686,3 +686,8 @@ void obs_frontend_paste_sceneitem(obs_scene_t *scene, bool duplicate) return c->obs_frontend_paste_sceneitem(scene, duplicate); } } + +bool obs_frontend_is_safe_mode_enabled(void) +{ + return !!callbacks_valid() ? c->obs_frontend_is_safe_mode_enabled() : false; +} diff --git a/frontend/api/obs-frontend-api.h b/frontend/api/obs-frontend-api.h index c6648d28f..aedfd33e7 100644 --- a/frontend/api/obs-frontend-api.h +++ b/frontend/api/obs-frontend-api.h @@ -262,6 +262,8 @@ EXPORT void obs_frontend_copy_sceneitem(obs_sceneitem_t *item); EXPORT bool obs_frontend_can_paste_sceneitem(bool duplicate); EXPORT void obs_frontend_paste_sceneitem(obs_scene_t *scene, bool duplicate); +EXPORT bool obs_frontend_is_safe_mode_enabled(void); + /* ------------------------------------------------------------------------- */ #ifdef __cplusplus diff --git a/frontend/api/obs-frontend-internal.hpp b/frontend/api/obs-frontend-internal.hpp index eac64bcfd..9b7858c22 100644 --- a/frontend/api/obs-frontend-internal.hpp +++ b/frontend/api/obs-frontend-internal.hpp @@ -142,6 +142,7 @@ struct obs_frontend_callbacks { virtual void obs_frontend_copy_sceneitem(obs_sceneitem_t *item) = 0; virtual bool obs_frontend_can_paste_sceneitem(bool duplicate) = 0; virtual void obs_frontend_paste_sceneitem(obs_scene_t *scene, bool duplicate) = 0; + virtual bool obs_frontend_is_safe_mode_enabled(void) = 0; }; EXPORT void obs_frontend_set_callbacks_internal(obs_frontend_callbacks *callbacks);