Destroy the window manager before TwitchIrcServer

TwitchIrcServer contains the channels, and they now live longer than the
windows themselves.

I made it so the dtor of WindowManager *actually* deletes the windows
now - i.e. them and everything in them are destroyed.
This commit is contained in:
Rasmus Karlsson 2023-12-03 12:51:49 +01:00
parent 51e5b6690d
commit fbf13c7a9e
3 changed files with 12 additions and 3 deletions

View file

@ -109,6 +109,7 @@ Application::Application(Settings &_settings, Paths &_paths)
, emotes(&this->emplace<Emotes>())
, accounts(&this->emplace<AccountController>())
, hotkeys(&this->emplace<HotkeyController>())
, twitch(&this->emplace<TwitchIrcServer>())
, windows(&this->emplace<WindowManager>())
, toasts(&this->emplace<Toasts>())
, imageUploader(&this->emplace<ImageUploader>())
@ -117,7 +118,6 @@ Application::Application(Settings &_settings, Paths &_paths)
, commands(&this->emplace<CommandController>())
, notifications(&this->emplace<NotificationController>())
, highlights(&this->emplace<HighlightController>())
, twitch(&this->emplace<TwitchIrcServer>())
, chatterinoBadges(&this->emplace<ChatterinoBadges>())
, ffzBadges(&this->emplace<FfzBadges>())
, seventvBadges(&this->emplace<SeventvBadges>())

View file

@ -98,6 +98,7 @@ public:
Emotes *const emotes{};
AccountController *const accounts{};
HotkeyController *const hotkeys{};
TwitchIrcServer *const twitch{};
WindowManager *const windows{};
Toasts *const toasts{};
ImageUploader *const imageUploader{};
@ -106,7 +107,6 @@ public:
CommandController *const commands{};
NotificationController *const notifications{};
HighlightController *const highlights{};
TwitchIrcServer *const twitch{};
ChatterinoBadges *const chatterinoBadges{};
FfzBadges *const ffzBadges{};
SeventvBadges *const seventvBadges{};

View file

@ -127,7 +127,16 @@ WindowManager::WindowManager()
});
}
WindowManager::~WindowManager() = default;
WindowManager::~WindowManager()
{
for (const auto &window : this->windows_)
{
// We would prefer to use window->deleteLater() here, but the timings are too tight
// Channel's completion model gets destroyed before the deleteLater call actually deletes the
// UI objects that rely on the completion model
delete window;
}
}
MessageElementFlags WindowManager::getWordFlags()
{