From 527aa4db676c03a0aab7e3ceebd805428755c3df Mon Sep 17 00:00:00 2001 From: Dazzar56 Date: Sun, 22 Dec 2024 23:38:44 +0300 Subject: [PATCH 1/5] fix incorrect interface locale on first render --- far2l/src/main.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/far2l/src/main.cpp b/far2l/src/main.cpp index 60b7d6172..6b9bc27f8 100644 --- a/far2l/src/main.cpp +++ b/far2l/src/main.cpp @@ -250,6 +250,18 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri UpdatePathOptions(strDestName2, false); } + //нужно проверить локаль до начала отрисовки интерфейса + if (Opt.IsFirstStart) + { + const char *locale = setlocale(LC_CTYPE, NULL); + // Only Russian translation can be currently considered complete + if (IsLocaleMatches(locale, "ru_RU")) { + Opt.strLanguage = L"Russian"; + Opt.strHelpLanguage = L"Russian"; + ConfigOptSave(false); + } + } + // теперь все готово - создаем панели! CtrlObj.Init(); @@ -306,15 +318,6 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri fprintf(stderr, "STARTUP: %llu\n", (unsigned long long)(clock() - cl_start)); if( Opt.IsFirstStart ) { - - const char *locale = setlocale(LC_CTYPE, NULL); - // Only Russian translation can be currently considered complete - if (IsLocaleMatches(locale, "ru_RU")) { - Opt.strLanguage = L"Russian"; - Opt.strHelpLanguage = L"Russian"; - ConfigOptSave(false); - } - Help::Present(L"Far2lGettingStarted",L"",FHELP_NOSHOWERROR); DWORD tweaks = WINPORT(SetConsoleTweaks)(TWEAKS_ONLY_QUERY_SUPPORTED); From 1e6df375aefc71d86a9a329aa7df484f4a31f24d Mon Sep 17 00:00:00 2001 From: Dazzar56 Date: Mon, 23 Dec 2024 00:24:58 +0300 Subject: [PATCH 2/5] fix PANIC caused by ConfigOptSave() too early --- far2l/src/main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/far2l/src/main.cpp b/far2l/src/main.cpp index 6b9bc27f8..535007cad 100644 --- a/far2l/src/main.cpp +++ b/far2l/src/main.cpp @@ -250,6 +250,7 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri UpdatePathOptions(strDestName2, false); } + bool cfgNeedSave = false; //нужно проверить локаль до начала отрисовки интерфейса if (Opt.IsFirstStart) { @@ -258,7 +259,7 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri if (IsLocaleMatches(locale, "ru_RU")) { Opt.strLanguage = L"Russian"; Opt.strHelpLanguage = L"Russian"; - ConfigOptSave(false); + cfgNeedSave = true; } } @@ -339,10 +340,12 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri } else { Opt.OSC52ClipSet = 1; } - ConfigOptSave(false); + cfgNeedSave = true; } } + if (cfgNeedSave) ConfigOptSave(false); + FrameManager->EnterMainLoop(); } From ce0c2f0abb525c9244ae107cac6709aa57935b0b Mon Sep 17 00:00:00 2001 From: Dazzar56 Date: Mon, 23 Dec 2024 00:51:10 +0300 Subject: [PATCH 3/5] moved locale check even higher --- far2l/src/main.cpp | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/far2l/src/main.cpp b/far2l/src/main.cpp index 535007cad..45c0973ed 100644 --- a/far2l/src/main.cpp +++ b/far2l/src/main.cpp @@ -179,7 +179,7 @@ static void UpdatePathOptions(const FARString &strDestName, bool IsActivePanel) } static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARString strDestName2, - int StartLine, int StartChar) + int StartLine, int StartChar, bool cfgNeedSave) { InterThreadCallsDispatcherThread itc_dispatcher_thread; @@ -250,19 +250,6 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri UpdatePathOptions(strDestName2, false); } - bool cfgNeedSave = false; - //нужно проверить локаль до начала отрисовки интерфейса - if (Opt.IsFirstStart) - { - const char *locale = setlocale(LC_CTYPE, NULL); - // Only Russian translation can be currently considered complete - if (IsLocaleMatches(locale, "ru_RU")) { - Opt.strLanguage = L"Russian"; - Opt.strHelpLanguage = L"Russian"; - cfgNeedSave = true; - } - } - // теперь все готово - создаем панели! CtrlObj.Init(); @@ -344,8 +331,10 @@ static int MainProcess(FARString strEditViewArg, FARString strDestName1, FARStri } } - if (cfgNeedSave) ConfigOptSave(false); - + if (cfgNeedSave) { + ConfigOptSave(false); + } + FrameManager->EnterMainLoop(); } @@ -643,6 +632,19 @@ int FarAppMain(int argc, char **argv) InitConsole(); WINPORT(SetConsoleCursorBlinkTime)(NULL, Opt.CursorBlinkTime); + bool cfgNeedSave = false; + //нужно проверить локаль до начала отрисовки интерфейса + if (Opt.IsFirstStart) + { + const char *locale = setlocale(LC_CTYPE, NULL); + // Only Russian translation can be currently considered complete + if (IsLocaleMatches(locale, "ru_RU")) { + Opt.strLanguage = L"Russian"; + Opt.strHelpLanguage = L"Russian"; + cfgNeedSave = true; + } + } + static_assert(!IsPtr(Msg::NewFileName._id), "Too many language messages. Need to refactor code to eliminate use of IsPtr."); @@ -673,7 +675,7 @@ int FarAppMain(int argc, char **argv) if ( Opt.OnlyEditorViewerUsed == Options::ONLY_EDITOR && strEditViewArg.IsEmpty() ) strEditViewArg = Msg::NewFileName; - int Result = MainProcess(strEditViewArg, DestNames[0], DestNames[1], StartLine, StartChar); + int Result = MainProcess(strEditViewArg, DestNames[0], DestNames[1], StartLine, StartChar, cfgNeedSave); EmptyInternalClipboard(); doneMacroVarTable(1); From e45fb4a13c9b6fb4754b76467851f40cdc06a70d Mon Sep 17 00:00:00 2001 From: Dazzar56 Date: Mon, 23 Dec 2024 01:05:53 +0300 Subject: [PATCH 4/5] moved to the highest! also remove double call setlocale() --- far2l/src/main.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/far2l/src/main.cpp b/far2l/src/main.cpp index 45c0973ed..f17345145 100644 --- a/far2l/src/main.cpp +++ b/far2l/src/main.cpp @@ -599,15 +599,27 @@ int FarAppMain(int argc, char **argv) std::string kblo_path = StrPrintf("%lskblayouts.ini", far2l_path); KeyboardLayouts.reset(new KeyFileHelper(kblo_path.c_str())); - const char *lc = setlocale(LC_CTYPE, NULL); + const char *locale = setlocale(LC_CTYPE, NULL); char LangCode[3]; - LangCode[0] = lc[0]; - LangCode[1] = lc[1]; + LangCode[0] = locale[0]; + LangCode[1] = locale[1]; LangCode[2] = 0; KbLayoutsTrIn = KeyboardLayouts->GetString(LangCode, "Latin"); KbLayoutsTrOut = KeyboardLayouts->GetString(LangCode, "Local"); + bool cfgNeedSave = false; + //нужно проверить локаль до начала отрисовки интерфейса + if (Opt.IsFirstStart) + { + // Only Russian translation can be currently considered complete + if (IsLocaleMatches(locale, "ru_RU")) { + Opt.strLanguage = L"Russian"; + Opt.strHelpLanguage = L"Russian"; + cfgNeedSave = true; + } + } + // Настройка OEM сортировки. Должна быть после CopyGlobalSettings и перед InitKeysArray! // LocalUpperInit(); // InitLCIDSort(); @@ -632,19 +644,6 @@ int FarAppMain(int argc, char **argv) InitConsole(); WINPORT(SetConsoleCursorBlinkTime)(NULL, Opt.CursorBlinkTime); - bool cfgNeedSave = false; - //нужно проверить локаль до начала отрисовки интерфейса - if (Opt.IsFirstStart) - { - const char *locale = setlocale(LC_CTYPE, NULL); - // Only Russian translation can be currently considered complete - if (IsLocaleMatches(locale, "ru_RU")) { - Opt.strLanguage = L"Russian"; - Opt.strHelpLanguage = L"Russian"; - cfgNeedSave = true; - } - } - static_assert(!IsPtr(Msg::NewFileName._id), "Too many language messages. Need to refactor code to eliminate use of IsPtr."); From 38e1a9f5cd2cb0c9f587768a814116e05e36643d Mon Sep 17 00:00:00 2001 From: Dazzar56 Date: Mon, 23 Dec 2024 01:35:15 +0300 Subject: [PATCH 5/5] check was way too high :) needed be below ConfigOptLoad() --- far2l/src/main.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/far2l/src/main.cpp b/far2l/src/main.cpp index f17345145..2c4ff2acc 100644 --- a/far2l/src/main.cpp +++ b/far2l/src/main.cpp @@ -608,18 +608,6 @@ int FarAppMain(int argc, char **argv) KbLayoutsTrIn = KeyboardLayouts->GetString(LangCode, "Latin"); KbLayoutsTrOut = KeyboardLayouts->GetString(LangCode, "Local"); - bool cfgNeedSave = false; - //нужно проверить локаль до начала отрисовки интерфейса - if (Opt.IsFirstStart) - { - // Only Russian translation can be currently considered complete - if (IsLocaleMatches(locale, "ru_RU")) { - Opt.strLanguage = L"Russian"; - Opt.strHelpLanguage = L"Russian"; - cfgNeedSave = true; - } - } - // Настройка OEM сортировки. Должна быть после CopyGlobalSettings и перед InitKeysArray! // LocalUpperInit(); // InitLCIDSort(); @@ -644,6 +632,18 @@ int FarAppMain(int argc, char **argv) InitConsole(); WINPORT(SetConsoleCursorBlinkTime)(NULL, Opt.CursorBlinkTime); + bool cfgNeedSave = false; + //нужно проверить локаль до начала отрисовки интерфейса + if (Opt.IsFirstStart) + { + // Only Russian translation can be currently considered complete + if (IsLocaleMatches(locale, "ru_RU")) { + Opt.strLanguage = L"Russian"; + Opt.strHelpLanguage = L"Russian"; + cfgNeedSave = true; + } + } + static_assert(!IsPtr(Msg::NewFileName._id), "Too many language messages. Need to refactor code to eliminate use of IsPtr.");