@@ -27,6 +27,11 @@ using namespace json11;
2727
2828#define TWITCH_SCOPE_VERSION 1
2929
30+ #define TWITCH_CHAT_DOCK_NAME " twitchChat"
31+ #define TWITCH_INFO_DOCK_NAME " twitchInfo"
32+ #define TWITCH_STATS_DOCK_NAME " twitchStats"
33+ #define TWITCH_FEED_DOCK_NAME " twitchFeed"
34+
3035static Auth::Def twitchDef = {" Twitch" , Auth::Type::OAuth_StreamKey};
3136
3237/* ------------------------------------------------------------------------- */
@@ -49,6 +54,19 @@ TwitchAuth::TwitchAuth(const Def &d) : OAuthStreamKey(d)
4954 &TwitchAuth::TryLoadSecondaryUIPanes);
5055}
5156
57+ TwitchAuth::~TwitchAuth ()
58+ {
59+ if (!uiLoaded)
60+ return ;
61+
62+ OBSBasic *main = OBSBasic::Get ();
63+
64+ main->RemoveDockWidget (TWITCH_CHAT_DOCK_NAME);
65+ main->RemoveDockWidget (TWITCH_INFO_DOCK_NAME);
66+ main->RemoveDockWidget (TWITCH_STATS_DOCK_NAME);
67+ main->RemoveDockWidget (TWITCH_FEED_DOCK_NAME);
68+ }
69+
5270bool TwitchAuth::MakeApiRequest (const char *path, Json &json_out)
5371{
5472 std::string client_id = TWITCH_CLIENTID;
@@ -233,16 +251,16 @@ void TwitchAuth::LoadUI()
233251 QSize size = main->frameSize ();
234252 QPoint pos = main->pos ();
235253
236- chat. reset ( new BrowserDock () );
237- chat->setObjectName (" twitchChat " );
254+ BrowserDock * chat = new BrowserDock ();
255+ chat->setObjectName (TWITCH_CHAT_DOCK_NAME );
238256 chat->resize (300 , 600 );
239257 chat->setMinimumSize (200 , 300 );
240258 chat->setWindowTitle (QTStr (" Auth.Chat" ));
241259 chat->setAllowedAreas (Qt::AllDockWidgetAreas);
242260
243- browser = cef->create_widget (chat. data () , url, panel_cookies);
261+ browser = cef->create_widget (chat, url, panel_cookies);
244262 chat->SetWidget (browser);
245- cef->add_force_popup_url (moderation_tools_url, chat. data () );
263+ cef->add_force_popup_url (moderation_tools_url, chat);
246264
247265 if (App ()->IsThemeDark ()) {
248266 script = " localStorage.setItem('twilight.theme', 1);" ;
@@ -261,8 +279,7 @@ void TwitchAuth::LoadUI()
261279
262280 browser->setStartupScript (script);
263281
264- main->addDockWidget (Qt::RightDockWidgetArea, chat.data ());
265- chatMenu.reset (main->AddDockWidget (chat.data ()));
282+ main->AddDockWidget (chat, Qt::RightDockWidgetArea);
266283
267284 /* ----------------------------------- */
268285
@@ -321,39 +338,37 @@ void TwitchAuth::LoadSecondaryUIPanes()
321338 url += name;
322339 url += " /stream-manager/edit-stream-info" ;
323340
324- info. reset ( new BrowserDock () );
325- info->setObjectName (" twitchInfo " );
341+ BrowserDock * info = new BrowserDock ();
342+ info->setObjectName (TWITCH_INFO_DOCK_NAME );
326343 info->resize (300 , 650 );
327344 info->setMinimumSize (200 , 300 );
328345 info->setWindowTitle (QTStr (" Auth.StreamInfo" ));
329346 info->setAllowedAreas (Qt::AllDockWidgetAreas);
330347
331- browser = cef->create_widget (info. data () , url, panel_cookies);
348+ browser = cef->create_widget (info, url, panel_cookies);
332349 info->SetWidget (browser);
333350 browser->setStartupScript (script);
334351
335- main->addDockWidget (Qt::RightDockWidgetArea, info.data ());
336- infoMenu.reset (main->AddDockWidget (info.data ()));
352+ main->AddDockWidget (info, Qt::RightDockWidgetArea);
337353
338354 /* ----------------------------------- */
339355
340356 url = " https://www.twitch.tv/popout/" ;
341357 url += name;
342358 url += " /dashboard/live/stats" ;
343359
344- stat. reset ( new BrowserDock () );
345- stat ->setObjectName (" twitchStats " );
346- stat ->resize (200 , 250 );
347- stat ->setMinimumSize (200 , 150 );
348- stat ->setWindowTitle (QTStr (" TwitchAuth.Stats" ));
349- stat ->setAllowedAreas (Qt::AllDockWidgetAreas);
360+ BrowserDock *stats = new BrowserDock ();
361+ stats ->setObjectName (TWITCH_STATS_DOCK_NAME );
362+ stats ->resize (200 , 250 );
363+ stats ->setMinimumSize (200 , 150 );
364+ stats ->setWindowTitle (QTStr (" TwitchAuth.Stats" ));
365+ stats ->setAllowedAreas (Qt::AllDockWidgetAreas);
350366
351- browser = cef->create_widget (stat. data () , url, panel_cookies);
352- stat ->SetWidget (browser);
367+ browser = cef->create_widget (stats , url, panel_cookies);
368+ stats ->SetWidget (browser);
353369 browser->setStartupScript (script);
354370
355- main->addDockWidget (Qt::RightDockWidgetArea, stat.data ());
356- statMenu.reset (main->AddDockWidget (stat.data ()));
371+ main->AddDockWidget (stats, Qt::RightDockWidgetArea);
357372
358373 /* ----------------------------------- */
359374
@@ -362,36 +377,35 @@ void TwitchAuth::LoadSecondaryUIPanes()
362377 url += " /stream-manager/activity-feed" ;
363378 url += " ?uuid=" + uuid;
364379
365- feed. reset ( new BrowserDock () );
366- feed->setObjectName (" twitchFeed " );
380+ BrowserDock * feed = new BrowserDock ();
381+ feed->setObjectName (TWITCH_FEED_DOCK_NAME );
367382 feed->resize (300 , 650 );
368383 feed->setMinimumSize (200 , 300 );
369384 feed->setWindowTitle (QTStr (" TwitchAuth.Feed" ));
370385 feed->setAllowedAreas (Qt::AllDockWidgetAreas);
371386
372- browser = cef->create_widget (feed. data () , url, panel_cookies);
387+ browser = cef->create_widget (feed, url, panel_cookies);
373388 feed->SetWidget (browser);
374389 browser->setStartupScript (script);
375390
376- main->addDockWidget (Qt::RightDockWidgetArea, feed.data ());
377- feedMenu.reset (main->AddDockWidget (feed.data ()));
391+ main->AddDockWidget (feed, Qt::RightDockWidgetArea);
378392
379393 /* ----------------------------------- */
380394
381395 info->setFloating (true );
382- stat ->setFloating (true );
396+ stats ->setFloating (true );
383397 feed->setFloating (true );
384398
385- QSize statSize = stat ->frameSize ();
399+ QSize statSize = stats ->frameSize ();
386400
387401 info->move (pos.x () + 50 , pos.y () + 50 );
388- stat ->move (pos.x () + size.width () / 2 - statSize.width () / 2 ,
389- pos.y () + size.height () / 2 - statSize.height () / 2 );
402+ stats ->move (pos.x () + size.width () / 2 - statSize.width () / 2 ,
403+ pos.y () + size.height () / 2 - statSize.height () / 2 );
390404 feed->move (pos.x () + 100 , pos.y () + 100 );
391405
392406 if (firstLoad) {
393407 info->setVisible (true );
394- stat ->setVisible (false );
408+ stats ->setVisible (false );
395409 feed->setVisible (false );
396410 } else {
397411 uint32_t lastVersion = config_get_int (App ()->GlobalConfig (),
0 commit comments