@@ -80,6 +80,11 @@ void BrowserManager::ExecuteVisiblityJSCallback(int browserIdentifier, bool visi
8080 pimpl->ExecuteVisiblityJSCallback (browserIdentifier, visible);
8181}
8282
83+ void BrowserManager::ExecuteSceneChangeJSCallback (const char *name)
84+ {
85+ pimpl->ExecuteSceneChangeJSCallback (name);
86+ }
87+
8388BrowserManager::Impl::Impl ()
8489{
8590 os_event_init (&dispatchEvent, OS_EVENT_TYPE_AUTO);
@@ -184,6 +189,29 @@ void BrowserManager::Impl::ExecuteOnBrowser(int browserIdentifier,
184189 }
185190}
186191
192+ void BrowserManager::Impl::ExecuteOnAllBrowsers (
193+ std::function<void (CefRefPtr<CefBrowser>)> f,
194+ bool async)
195+ {
196+ for (auto & x: browserMap) {
197+ CefRefPtr<CefBrowser> browser = x.second ;
198+ if (async) {
199+ CefPostTask (TID_UI, BrowserTask::newTask ([&] {
200+ f (browser);
201+ }));
202+ } else {
203+ os_event_t *finishedEvent;
204+ os_event_init (&finishedEvent, OS_EVENT_TYPE_AUTO);
205+ CefPostTask (TID_UI, BrowserTask::newTask ([&] {
206+ f (browser);
207+ os_event_signal (finishedEvent);
208+ }));
209+ os_event_wait (finishedEvent);
210+ os_event_destroy (finishedEvent);
211+ }
212+ }
213+ }
214+
187215void BrowserManager::Impl::SendMouseClick (int browserIdentifier,
188216 const struct obs_mouse_event *event, int32_t type,
189217 bool mouse_up, uint32_t click_count)
@@ -283,6 +311,17 @@ void BrowserManager::Impl::ExecuteVisiblityJSCallback(int browserIdentifier, boo
283311 });
284312}
285313
314+ void BrowserManager::Impl::ExecuteSceneChangeJSCallback (const char *name)
315+ {
316+ ExecuteOnAllBrowsers ([&](CefRefPtr<CefBrowser> b)
317+ {
318+ CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create (" SceneChange" );
319+ CefRefPtr<CefListValue> args = msg->GetArgumentList ();
320+ args->SetString (0 , name);
321+ b->SendProcessMessage (PID_RENDERER, msg);
322+ });
323+ }
324+
286325void
287326BrowserManager::Impl::Startup ()
288327{
0 commit comments