diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index 8a8d709fe..a82e7b8b8 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -1765,7 +1765,8 @@ obs_data_array_t *OBSBasic::SaveTransitions() return transitions; } -void OBSBasic::LoadTransitions(obs_data_array_t *transitions) +void OBSBasic::LoadTransitions(obs_data_array_t *transitions, + obs_load_source_cb cb, void *private_data) { size_t count = obs_data_array_count(transitions); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 7736e03bf..e9cf9075c 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -956,6 +956,15 @@ void OBSBasic::Load(const char *file) LoadData(data, file); } +static inline void AddMissingFiles(void *data, obs_source_t *source) +{ + obs_missing_files_t *f = (obs_missing_files_t *)data; + obs_missing_files_t *sf = obs_source_get_missing_files(source); + + obs_missing_files_append(f, sf); + obs_missing_files_destroy(sf); +} + void OBSBasic::LoadData(obs_data_t *data, const char *file) { ClearSceneData(); @@ -1024,10 +1033,11 @@ void OBSBasic::LoadData(obs_data_t *data, const char *file) obs_data_array_push_back_array(sources, groups); } - obs_load_sources(sources, nullptr, nullptr); + obs_missing_files_t *files = obs_missing_files_create(); + obs_load_sources(sources, AddMissingFiles, files); if (transitions) - LoadTransitions(transitions); + LoadTransitions(transitions, AddMissingFiles, files); if (sceneOrder) LoadSceneListOrder(sceneOrder); @@ -1149,7 +1159,7 @@ retryScene: LogScenes(); if (!App()->IsMissingFilesCheckDisabled()) - on_actionShowMissingFiles_triggered(); + ShowMissingFilesDialog(files); disableSaving--; @@ -4854,34 +4864,8 @@ void OBSBasic::on_action_Settings_triggered() } } -static inline void AddMissingFiles(void *data, obs_source_t *source) +void OBSBasic::ShowMissingFilesDialog(obs_missing_files_t *files) { - obs_missing_files_t *f = (obs_missing_files_t *)data; - obs_missing_files_t *sf = obs_source_get_missing_files(source); - - obs_missing_files_append(f, sf); - obs_missing_files_destroy(sf); -} - -void OBSBasic::on_actionShowMissingFiles_triggered() -{ - obs_missing_files_t *files = obs_missing_files_create(); - - auto cb_sources = [](void *data, obs_source_t *source) { - AddMissingFiles(data, source); - return true; - }; - obs_enum_sources(cb_sources, files); - - auto cb_transitions = [](void *data, obs_source_t *source) { - if (obs_source_get_type(source) != OBS_SOURCE_TYPE_TRANSITION) - return true; - - AddMissingFiles(data, source); - return true; - }; - obs_enum_all_sources(cb_transitions, files); - if (obs_missing_files_count(files) > 0) { /* When loading the missing files dialog on launch, the * window hasn't fully initialized by this point on macOS, @@ -4904,6 +4888,19 @@ void OBSBasic::on_actionShowMissingFiles_triggered() } } +void OBSBasic::on_actionShowMissingFiles_triggered() +{ + obs_missing_files_t *files = obs_missing_files_create(); + + auto cb_sources = [](void *data, obs_source_t *source) { + AddMissingFiles(data, source); + return true; + }; + + obs_enum_all_sources(cb_sources, files); + ShowMissingFilesDialog(files); +} + void OBSBasic::on_actionAdvAudioProperties_triggered() { if (advAudioWindow != nullptr) { diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index d16dad7cd..3dee95a4a 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -446,7 +446,8 @@ private: obs_source_t *FindTransition(const char *name); OBSSource GetCurrentTransition(); obs_data_array_t *SaveTransitions(); - void LoadTransitions(obs_data_array_t *transitions); + void LoadTransitions(obs_data_array_t *transitions, + obs_load_source_cb cb, void *private_data); obs_source_t *fadeTransition; obs_source_t *cutTransition; @@ -621,6 +622,7 @@ private: bool drawSafeAreas = false; void CenterSelectedSceneItems(const CenterType ¢erType); + void ShowMissingFilesDialog(obs_missing_files_t *files); public slots: void DeferSaveBegin();