diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 9cf1df29d..1ef88d8fa 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -8484,11 +8484,25 @@ YouTubeAppDock *OBSBasic::GetYouTubeAppDock() return youtubeAppDock; } +#ifndef SEC_TO_NSEC +#define SEC_TO_NSEC 1000000000 +#endif + void OBSBasic::NewYouTubeAppDock() { if (!cef_js_avail) return; + /* make sure that the youtube app dock can't be immediately recreated. + * dumb hack. blame chromium. or this particular dock. or both. if CEF + * creates/destroys/creates a widget too quickly it can lead to a + * crash. */ + uint64_t ts = os_gettime_ns(); + if ((ts - lastYouTubeAppDockCreationTime) < (5ULL * SEC_TO_NSEC)) + return; + + lastYouTubeAppDockCreationTime = ts; + if (youtubeAppDock) RemoveDockWidget(youtubeAppDock->objectName()); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index c09689d96..b1eb39592 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -267,6 +267,7 @@ private: QPointer statsDock; #ifdef YOUTUBE_ENABLED QPointer youtubeAppDock; + uint64_t lastYouTubeAppDockCreationTime = 0; #endif QPointer about; QPointer missDialog;