diff --git a/aegisub/src/auto4_base.cpp b/aegisub/src/auto4_base.cpp index 7cb6b0eb0..3c0e202f7 100644 --- a/aegisub/src/auto4_base.cpp +++ b/aegisub/src/auto4_base.cpp @@ -346,6 +346,15 @@ namespace Automation4 { ScriptsChanged(); } + void ScriptManager::Reload(Script *script) + { + if (find(scripts.begin(), scripts.end(), script) != scripts.end()) + { + script->Reload(); + ScriptsChanged(); + } + } + const std::vector& ScriptManager::GetMacros() { macros.clear(); diff --git a/aegisub/src/auto4_base.h b/aegisub/src/auto4_base.h index a6cb23b85..11e218e36 100644 --- a/aegisub/src/auto4_base.h +++ b/aegisub/src/auto4_base.h @@ -223,6 +223,8 @@ namespace Automation4 { void RemoveAll(); /// Reload all scripts mananaged virtual void Reload() = 0; + /// Reload a single managed script + virtual void Reload(Script *script); /// Get all managed scripts (both loaded and invalid) const std::vector& GetScripts() const { return scripts; } diff --git a/aegisub/src/dialog_automation.cpp b/aegisub/src/dialog_automation.cpp index f04a54f2b..e6256ac0d 100644 --- a/aegisub/src/dialog_automation.cpp +++ b/aegisub/src/dialog_automation.cpp @@ -231,10 +231,13 @@ void DialogAutomation::OnReload(wxCommandEvent &) int i = list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (i < 0) return; - Automation4::Script *script = script_info[list->GetItemData(i)].script; - script->Reload(); + ExtraScriptInfo const& ei = script_info[list->GetItemData(i)]; + if (ei.is_global) + global_manager->Reload(ei.script); + else + local_manager->Reload(ei.script); - SetScriptInfo(i, script); + SetScriptInfo(i, ei.script); } static wxString fac_to_str(const Automation4::ScriptFactory* f) {