فهرست منبع

UI: Call frontend callbacks in reverse order

Allows safely removing callbacks from within the callbacks themselves.
jp9000 7 سال پیش
والد
کامیت
03b8fd0186
1فایلهای تغییر یافته به همراه8 افزوده شده و 3 حذف شده
  1. 8 3
      UI/api-interface.cpp

+ 8 - 3
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);
+		}
 	}
 };