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);