@@ -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
@@ -323,39 +340,37 @@ void TwitchAuth::LoadSecondaryUIPanes()
323340 url += name;
324341 url += " /stream-manager/edit-stream-info" ;
325342
326- info. reset ( new BrowserDock () );
327- info->setObjectName (" twitchInfo " );
343+ BrowserDock * info = new BrowserDock ();
344+ info->setObjectName (TWITCH_INFO_DOCK_NAME );
328345 info->resize (300 , 650 );
329346 info->setMinimumSize (200 , 300 );
330347 info->setWindowTitle (QTStr (" Auth.StreamInfo" ));
331348 info->setAllowedAreas (Qt::AllDockWidgetAreas);
332349
333- browser = cef->create_widget (info. data () , url, panel_cookies);
350+ browser = cef->create_widget (info, url, panel_cookies);
334351 info->SetWidget (browser);
335352 browser->setStartupScript (script);
336353
337- main->addDockWidget (Qt::RightDockWidgetArea, info.data ());
338- infoMenu.reset (main->AddDockWidget (info.data ()));
354+ main->AddDockWidget (info, Qt::RightDockWidgetArea);
339355
340356 /* ----------------------------------- */
341357
342358 url = " https://www.twitch.tv/popout/" ;
343359 url += name;
344360 url += " /dashboard/live/stats" ;
345361
346- stat. reset ( new BrowserDock () );
347- stat ->setObjectName (" twitchStats " );
348- stat ->resize (200 , 250 );
349- stat ->setMinimumSize (200 , 150 );
350- stat ->setWindowTitle (QTStr (" TwitchAuth.Stats" ));
351- stat ->setAllowedAreas (Qt::AllDockWidgetAreas);
362+ BrowserDock *stats = new BrowserDock ();
363+ stats ->setObjectName (TWITCH_STATS_DOCK_NAME );
364+ stats ->resize (200 , 250 );
365+ stats ->setMinimumSize (200 , 150 );
366+ stats ->setWindowTitle (QTStr (" TwitchAuth.Stats" ));
367+ stats ->setAllowedAreas (Qt::AllDockWidgetAreas);
352368
353- browser = cef->create_widget (stat. data () , url, panel_cookies);
354- stat ->SetWidget (browser);
369+ browser = cef->create_widget (stats , url, panel_cookies);
370+ stats ->SetWidget (browser);
355371 browser->setStartupScript (script);
356372
357- main->addDockWidget (Qt::RightDockWidgetArea, stat.data ());
358- statMenu.reset (main->AddDockWidget (stat.data ()));
373+ main->AddDockWidget (stats, Qt::RightDockWidgetArea);
359374
360375 /* ----------------------------------- */
361376
@@ -364,36 +379,35 @@ void TwitchAuth::LoadSecondaryUIPanes()
364379 url += " /stream-manager/activity-feed" ;
365380 url += " ?uuid=" + uuid;
366381
367- feed. reset ( new BrowserDock () );
368- feed->setObjectName (" twitchFeed " );
382+ BrowserDock * feed = new BrowserDock ();
383+ feed->setObjectName (TWITCH_FEED_DOCK_NAME );
369384 feed->resize (300 , 650 );
370385 feed->setMinimumSize (200 , 300 );
371386 feed->setWindowTitle (QTStr (" TwitchAuth.Feed" ));
372387 feed->setAllowedAreas (Qt::AllDockWidgetAreas);
373388
374- browser = cef->create_widget (feed. data () , url, panel_cookies);
389+ browser = cef->create_widget (feed, url, panel_cookies);
375390 feed->SetWidget (browser);
376391 browser->setStartupScript (script);
377392
378- main->addDockWidget (Qt::RightDockWidgetArea, feed.data ());
379- feedMenu.reset (main->AddDockWidget (feed.data ()));
393+ main->AddDockWidget (feed, Qt::RightDockWidgetArea);
380394
381395 /* ----------------------------------- */
382396
383397 info->setFloating (true );
384- stat ->setFloating (true );
398+ stats ->setFloating (true );
385399 feed->setFloating (true );
386400
387- QSize statSize = stat ->frameSize ();
401+ QSize statSize = stats ->frameSize ();
388402
389403 info->move (pos.x () + 50 , pos.y () + 50 );
390- stat ->move (pos.x () + size.width () / 2 - statSize.width () / 2 ,
391- pos.y () + size.height () / 2 - statSize.height () / 2 );
404+ stats ->move (pos.x () + size.width () / 2 - statSize.width () / 2 ,
405+ pos.y () + size.height () / 2 - statSize.height () / 2 );
392406 feed->move (pos.x () + 100 , pos.y () + 100 );
393407
394408 if (firstLoad) {
395409 info->setVisible (true );
396- stat ->setVisible (false );
410+ stats ->setVisible (false );
397411 feed->setVisible (false );
398412 } else {
399413 uint32_t lastVersion = config_get_int (App ()->GlobalConfig (),
0 commit comments