From 03b8fd01864db0b71490400c08d7a9c9a7763223 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Mon, 25 Dec 2017 13:26:28 -0800 Subject: [PATCH] UI: Call frontend callbacks in reverse order Allows safely removing callbacks from within the callbacks themselves. --- UI/api-interface.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index dd17db0b8..b7d0a8c3b 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -428,7 +428,8 @@ struct OBSStudioAPI : obs_frontend_callbacks { void on_load(obs_data_t *settings) override { - for (auto cb : saveCallbacks) + for (size_t i = saveCallbacks.size(); i > 0; i--) { + auto cb = saveCallbacks[i - 1]; cb.callback(settings, false, cb.private_data); } } @@ -443,8 +444,10 @@ struct OBSStudioAPI : obs_frontend_callbacks { void on_save(obs_data_t *settings) override { - for (auto cb : saveCallbacks) + for (size_t i = saveCallbacks.size(); i > 0; i--) { + auto cb = saveCallbacks[i - 1]; cb.callback(settings, true, cb.private_data); + } } void on_event(enum obs_frontend_event event) override @@ -452,8 +455,10 @@ struct OBSStudioAPI : obs_frontend_callbacks { if (main->disableSaving) return; - for (auto cb : callbacks) + for (size_t i = callbacks.size(); i > 0; i--) { + auto cb = callbacks[i - 1]; cb.callback(event, cb.private_data); + } } };