Skip to content

Commit

Permalink
Fix Mac crash bug introduced by commit e0ffbf1
Browse files Browse the repository at this point in the history
  • Loading branch information
Charlie Fenton committed Aug 10, 2023
1 parent c3bb612 commit be950db
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
14 changes: 9 additions & 5 deletions clientgui/BOINCGUIApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,17 +205,22 @@ bool CBOINCGUIApp::OnInit() {
#endif
m_pConfig->Read(wxT("DisableAutoStart"), &m_iBOINCMGRDisableAutoStart, 0L);
m_pConfig->Read(wxT("LanguageISO"), &m_strISOLanguageCode, wxT(""));
#ifdef __WXMAC__ // wxWidgets System language detection does not work on Mac
m_bUseDefaultLocale = false;
#else
bool bUseDefaultLocaleDefault = false;
#ifdef __WXMAC__ // wxLocale::GetLanguageInfo(wxLANGUAGE_DEFAULT) does not work on Mac
wxLocale *defaultLocale = new wxLocale;
defaultLocale->Init(wxLANGUAGE_DEFAULT);
wxString defaultLanguageCode = defaultLocale->GetCanonicalName();
bUseDefaultLocaleDefault = m_strISOLanguageCode == defaultLanguageCode;
delete defaultLocale;
#else
const wxLanguageInfo *defaultLanguageInfo = wxLocale::GetLanguageInfo(wxLANGUAGE_DEFAULT);
if (defaultLanguageInfo != NULL) {
// Migration: assume a selected language code that matches the system default means "auto select"
bUseDefaultLocaleDefault = m_strISOLanguageCode == defaultLanguageInfo->CanonicalName;;
}
m_pConfig->Read(wxT("UseDefaultLocale"), &m_bUseDefaultLocale, bUseDefaultLocaleDefault);
#endif
m_pConfig->Read(wxT("UseDefaultLocale"), &m_bUseDefaultLocale, bUseDefaultLocaleDefault);
m_pConfig->Read(wxT("GUISelection"), &m_iGUISelected, BOINC_SIMPLEGUI);
m_pConfig->Read(wxT("EventLogOpen"), &bOpenEventLog);
m_pConfig->Read(wxT("RunDaemon"), &m_bRunDaemon, 1L);
Expand Down Expand Up @@ -953,7 +958,6 @@ void CBOINCGUIApp::InitSupportedLanguages() {
wxLayoutDirection uiLayoutDirection = pLIui ? pLIui->LayoutDirection : wxLayout_Default;
GUI_SUPPORTED_LANG newItem;

#ifndef __WXMAC__ // wxWidgets System language detection does not work on Mac
// CDlgOptions depends on "Auto" being the first item in the list
// if
newItem.Language = wxLANGUAGE_DEFAULT;
Expand All @@ -973,11 +977,11 @@ void CBOINCGUIApp::InitSupportedLanguages() {
newItem.Label += LRM + strAutoEnglish + LRM;
}
m_astrLanguages.push_back(newItem);
#endif

// Add known locales to the list
for (int langID = wxLANGUAGE_UNKNOWN+1; langID < wxLANGUAGE_USER_DEFINED; ++langID) {
const wxLanguageInfo* pLI = wxLocale::GetLanguageInfo(langID);
if (pLI == NULL) continue;
wxString lang_region = pLI->CanonicalName.BeforeFirst('@');
wxString lang = lang_region.BeforeFirst('_');
wxString script = pLI->CanonicalName.AfterFirst('@');
Expand Down
13 changes: 8 additions & 5 deletions clientgui/DlgOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -623,8 +623,6 @@ bool CDlgOptions::ReadSettings() {
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
wxASSERT(wxDynamicCast(pFrame, CBOINCBaseFrame));

// wxWidgets System language detection does not work on Mac
// so we always set UseDefaultLocale() to false on Mac
// General Tab
if (wxGetApp().UseDefaultLocale()) {
// CBOINCGUIApp::InitSupportedLanguages() ensures "Auto" is the first item in the list
Expand Down Expand Up @@ -734,7 +732,7 @@ bool CDlgOptions::SaveSettings() {
CSkinAdvanced* pSkinAdvanced = wxGetApp().GetSkinManager()->GetAdvanced();
long lBuffer = 0;
wxString strBuffer = wxEmptyString;

const wxLanguageInfo *newLanguageInfo = NULL;

wxASSERT(pDoc);
wxASSERT(pFrame);
Expand All @@ -750,14 +748,19 @@ bool CDlgOptions::SaveSettings() {
int selLangIdx = m_LanguageSelectionCtrl->GetSelection();
if (selLangIdx == 0) {
// CBOINCGUIApp::InitSupportedLanguages() ensures "Auto" is the first item in the list
newLangCode = wxLocale::GetLanguageInfo(wxLANGUAGE_DEFAULT)->CanonicalName;
newLanguageInfo = wxLocale::GetLanguageInfo(wxLANGUAGE_DEFAULT);
// wxLocale::GetLanguageInfo(wxLANGUAGE_DEFAULT) may return NULL on Macintosh
newLangCode = wxEmptyString;
} else if (selLangIdx > 0) {
const std::vector<GUI_SUPPORTED_LANG>& langs = wxGetApp().GetSupportedLanguages();
if (selLangIdx < langs.size()) {
const GUI_SUPPORTED_LANG& selLang = langs[selLangIdx];
newLangCode = wxLocale::GetLanguageInfo(selLang.Language)->CanonicalName;
newLanguageInfo = wxLocale::GetLanguageInfo(selLang.Language);
}
}
if (newLanguageInfo) {
newLangCode = newLanguageInfo->CanonicalName;
}
if (newLangCode != oldLangCode) {
wxString strDialogTitle;
wxString strDialogMessage;
Expand Down

0 comments on commit be950db

Please sign in to comment.