diff --git a/module/advanced-scene-switcher-module.c b/module/advanced-scene-switcher-module.c index 05361590..038766bd 100644 --- a/module/advanced-scene-switcher-module.c +++ b/module/advanced-scene-switcher-module.c @@ -1,5 +1,16 @@ #include #include +#include + +#ifdef _WIN32 +#define ADVSS_SETENV(k, v) _putenv_s(k, v) +#define ADVSS_UNSETENV(k) _putenv_s(k, "") +#else +#define ADVSS_SETENV(k, v) setenv(k, v, 1) +#define ADVSS_UNSETENV(k) unsetenv(k) +#endif + +#define ADVSS_INSTANCE_ENV "ADVSS_INSTANCE_LOADED" OBS_DECLARE_MODULE() OBS_MODULE_USE_DEFAULT_LOCALE("advanced-scene-switcher", "en-US") @@ -17,6 +28,12 @@ void obs_module_post_load(void) bool obs_module_load(void) { + if (getenv(ADVSS_INSTANCE_ENV)) { + blog(LOG_WARNING, + "[adv-ss] Another instance is already loaded - skipping."); + return false; + } + ADVSS_SETENV(ADVSS_INSTANCE_ENV, "1"); obs_frontend_push_ui_translation(obs_module_get_string); InitSceneSwitcher(obs_current_module(), obs_module_text); return true; @@ -25,4 +42,5 @@ bool obs_module_load(void) void obs_module_unload(void) { FreeSceneSwitcher(); + ADVSS_UNSETENV(ADVSS_INSTANCE_ENV); }