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.
This commit is contained in:
parent
58d0e22354
commit
d1475dfb9c
|
@ -25,13 +25,14 @@ LogConfigWindow::LogConfigWindow(wxWindow* parent, wxWindowID id)
|
||||||
_("Log Configuration")),
|
_("Log Configuration")),
|
||||||
enableAll(true)
|
enableAll(true)
|
||||||
{
|
{
|
||||||
|
Bind(wxEVT_CLOSE_WINDOW, &LogConfigWindow::OnClose, this);
|
||||||
SetMinSize(wxSize(100, 100));
|
SetMinSize(wxSize(100, 100));
|
||||||
m_LogManager = LogManager::GetInstance();
|
m_LogManager = LogManager::GetInstance();
|
||||||
CreateGUIControls();
|
CreateGUIControls();
|
||||||
LoadSettings();
|
LoadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
LogConfigWindow::~LogConfigWindow()
|
void LogConfigWindow::OnClose(wxCloseEvent& event)
|
||||||
{
|
{
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ class LogConfigWindow : public wxPanel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LogConfigWindow(wxWindow* parent, wxWindowID id = wxID_ANY);
|
LogConfigWindow(wxWindow* parent, wxWindowID id = wxID_ANY);
|
||||||
~LogConfigWindow();
|
|
||||||
|
|
||||||
void SaveSettings();
|
void SaveSettings();
|
||||||
void LoadSettings();
|
void LoadSettings();
|
||||||
|
@ -32,6 +31,7 @@ private:
|
||||||
|
|
||||||
void CreateGUIControls();
|
void CreateGUIControls();
|
||||||
void OnVerbosityChange(wxCommandEvent& event);
|
void OnVerbosityChange(wxCommandEvent& event);
|
||||||
|
void OnClose(wxCloseEvent& event);
|
||||||
void OnWriteFileChecked(wxCommandEvent& event);
|
void OnWriteFileChecked(wxCommandEvent& event);
|
||||||
void OnWriteConsoleChecked(wxCommandEvent& event);
|
void OnWriteConsoleChecked(wxCommandEvent& event);
|
||||||
void OnWriteWindowChecked(wxCommandEvent& event);
|
void OnWriteWindowChecked(wxCommandEvent& event);
|
||||||
|
|
|
@ -149,18 +149,20 @@ void CLogWindow::CreateGUIControls()
|
||||||
m_cmdline->SetFocus();
|
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)
|
void CLogWindow::OnClose(wxCloseEvent& event)
|
||||||
{
|
{
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
event.Skip();
|
event.Skip();
|
||||||
|
RemoveAllListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLogWindow::RemoveAllListeners()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
|
||||||
|
{
|
||||||
|
m_LogManager->RemoveListener(static_cast<LogTypes::LOG_TYPE>(i),
|
||||||
|
LogListener::LOG_WINDOW_LISTENER);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLogWindow::SaveSettings()
|
void CLogWindow::SaveSettings()
|
||||||
|
|
|
@ -28,7 +28,6 @@ public:
|
||||||
CLogWindow(CFrame* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
|
CLogWindow(CFrame* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
|
||||||
const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL,
|
const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL,
|
||||||
const wxString& name = _("Log"));
|
const wxString& name = _("Log"));
|
||||||
~CLogWindow();
|
|
||||||
|
|
||||||
void SaveSettings();
|
void SaveSettings();
|
||||||
void Log(LogTypes::LOG_LEVELS, const char* text) override;
|
void Log(LogTypes::LOG_LEVELS, const char* text) override;
|
||||||
|
@ -63,5 +62,6 @@ private:
|
||||||
void OnWrapLineCheck(wxCommandEvent& event);
|
void OnWrapLineCheck(wxCommandEvent& event);
|
||||||
void OnClear(wxCommandEvent& event);
|
void OnClear(wxCommandEvent& event);
|
||||||
void OnLogTimer(wxTimerEvent& WXUNUSED(event));
|
void OnLogTimer(wxTimerEvent& WXUNUSED(event));
|
||||||
|
void RemoveAllListeners();
|
||||||
void UpdateLog();
|
void UpdateLog();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue