From d1475dfb9ce44b675a3bf002101c07ff5076145f Mon Sep 17 00:00:00 2001 From: Michael Maltese Date: Tue, 20 Sep 2016 18:19:33 -0700 Subject: [PATCH] Move LogWindow/LogConfigWindow destructor logic -> OnClose Fixes the issue on macOS where quitting Dolphin from the Dock causes a crash report (https://bugs.dolphin-emu.org/issues/9794). I'm not exactly sure why this works, but it feels right and it turns out to fix the problem. --- Source/Core/DolphinWX/LogConfigWindow.cpp | 3 ++- Source/Core/DolphinWX/LogConfigWindow.h | 2 +- Source/Core/DolphinWX/LogWindow.cpp | 18 ++++++++++-------- Source/Core/DolphinWX/LogWindow.h | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Source/Core/DolphinWX/LogConfigWindow.cpp b/Source/Core/DolphinWX/LogConfigWindow.cpp index d6c6b7686012..da517d288ff8 100644 --- a/Source/Core/DolphinWX/LogConfigWindow.cpp +++ b/Source/Core/DolphinWX/LogConfigWindow.cpp @@ -25,13 +25,14 @@ LogConfigWindow::LogConfigWindow(wxWindow* parent, wxWindowID id) _("Log Configuration")), enableAll(true) { + Bind(wxEVT_CLOSE_WINDOW, &LogConfigWindow::OnClose, this); SetMinSize(wxSize(100, 100)); m_LogManager = LogManager::GetInstance(); CreateGUIControls(); LoadSettings(); } -LogConfigWindow::~LogConfigWindow() +void LogConfigWindow::OnClose(wxCloseEvent& event) { SaveSettings(); } diff --git a/Source/Core/DolphinWX/LogConfigWindow.h b/Source/Core/DolphinWX/LogConfigWindow.h index f9a3a4806d22..3259c060ecaf 100644 --- a/Source/Core/DolphinWX/LogConfigWindow.h +++ b/Source/Core/DolphinWX/LogConfigWindow.h @@ -15,7 +15,6 @@ class LogConfigWindow : public wxPanel { public: LogConfigWindow(wxWindow* parent, wxWindowID id = wxID_ANY); - ~LogConfigWindow(); void SaveSettings(); void LoadSettings(); @@ -32,6 +31,7 @@ class LogConfigWindow : public wxPanel void CreateGUIControls(); void OnVerbosityChange(wxCommandEvent& event); + void OnClose(wxCloseEvent& event); void OnWriteFileChecked(wxCommandEvent& event); void OnWriteConsoleChecked(wxCommandEvent& event); void OnWriteWindowChecked(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/LogWindow.cpp b/Source/Core/DolphinWX/LogWindow.cpp index 940c647da10f..1b47f1688371 100644 --- a/Source/Core/DolphinWX/LogWindow.cpp +++ b/Source/Core/DolphinWX/LogWindow.cpp @@ -149,18 +149,20 @@ void CLogWindow::CreateGUIControls() m_cmdline->SetFocus(); } -CLogWindow::~CLogWindow() -{ - for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) - { - m_LogManager->RemoveListener((LogTypes::LOG_TYPE)i, LogListener::LOG_WINDOW_LISTENER); - } -} - void CLogWindow::OnClose(wxCloseEvent& event) { SaveSettings(); event.Skip(); + RemoveAllListeners(); +} + +void CLogWindow::RemoveAllListeners() +{ + for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) + { + m_LogManager->RemoveListener(static_cast(i), + LogListener::LOG_WINDOW_LISTENER); + } } void CLogWindow::SaveSettings() diff --git a/Source/Core/DolphinWX/LogWindow.h b/Source/Core/DolphinWX/LogWindow.h index c3236acd3eae..61fa12f71cb1 100644 --- a/Source/Core/DolphinWX/LogWindow.h +++ b/Source/Core/DolphinWX/LogWindow.h @@ -28,7 +28,6 @@ class CLogWindow : public wxPanel, LogListener CLogWindow(CFrame* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL, const wxString& name = _("Log")); - ~CLogWindow(); void SaveSettings(); void Log(LogTypes::LOG_LEVELS, const char* text) override; @@ -63,5 +62,6 @@ class CLogWindow : public wxPanel, LogListener void OnWrapLineCheck(wxCommandEvent& event); void OnClear(wxCommandEvent& event); void OnLogTimer(wxTimerEvent& WXUNUSED(event)); + void RemoveAllListeners(); void UpdateLog(); };