From 9edef3df7c6ccd22df6ce8d4558242fc90f8d5d0 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 24 Jan 2020 21:26:04 +0100 Subject: [PATCH 1/3] + fix: some default .ini-File configuration --- Build/Notepad3.ini | 2 ++ src/Config/Config.cpp | 21 +++++++++------------ src/MuiLanguage.c | 7 +++++-- src/MuiLanguage.h | 1 + src/Notepad3.c | 3 +++ 5 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index a34227077..582a25bff 100644 --- a/Build/Notepad3.ini +++ b/Build/Notepad3.ini @@ -3,6 +3,8 @@ ;Notepad3.ini=%APPDATA%\Rizonesoft\Notepad3\Notepad3.ini [Settings] SettingsVersion=4 +OpenWithDir=%USERPROFILE%\Desktop +Favorites=%USERPROFILE%\Favorites [Settings2] ;IMEInteraction=0 ;AutoReloadTimeout=2000 diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 19eaa26d6..3a8f9e932 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -26,6 +26,7 @@ extern "C" { #include "Dialogs.h" #include "Encoding.h" #include "Notepad3.h" +#include "MuiLanguage.h" #include "resource.h" } @@ -696,11 +697,16 @@ void LoadSettings() // -------------------------------------------------------------------------- + LANGID lngID = 0; Defaults2.PreferredLanguageLocaleName[0] = L'\0'; + GetUserPreferredLanguage(Defaults2.PreferredLanguageLocaleName, COUNTOF(Defaults2.PreferredLanguageLocaleName), &lngID); + IniSectionGetString(IniSecSettings2, L"PreferredLanguageLocaleName", Defaults2.PreferredLanguageLocaleName, Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName)); //_wsetlocale(LC_COLLATE, Settings2.PreferredLanguageLocaleName); + // -------------------------------------------------------------------------- + StringCchCopyW(Defaults2.DefaultExtension, COUNTOF(Defaults2.DefaultExtension), L"txt"); IniSectionGetString(IniSecSettings2, L"DefaultExtension", Defaults2.DefaultExtension, Settings2.DefaultExtension, COUNTOF(Settings2.DefaultExtension)); @@ -901,7 +907,7 @@ void LoadSettings() Defaults.EFR_Data.fuFlags = 0; Settings.EFR_Data.fuFlags = (UINT)IniSectionGetInt(IniSecSettings, L"efrData_fuFlags", (int)Defaults.EFR_Data.fuFlags); - Defaults.OpenWithDir[0] = L'\0'; + StringCchCopy(Defaults.OpenWithDir, COUNTOF(Defaults.OpenWithDir), L"%USERPROFILE%\\Desktop"); if (!IniSectionGetString(IniSecSettings, L"OpenWithDir", Defaults.OpenWithDir, Settings.OpenWithDir, COUNTOF(Settings.OpenWithDir))) { GetKnownFolderPath(FOLDERID_Desktop, Settings.OpenWithDir, COUNTOF(Settings.OpenWithDir)); } @@ -909,8 +915,7 @@ void LoadSettings() PathAbsoluteFromApp(Settings.OpenWithDir, NULL, COUNTOF(Settings.OpenWithDir), true); } - Defaults.FavoritesDir[0] = L'\0'; - //StringCchCopyW(Defaults.FavoritesDir, COUNTOF(Defaults.FavoritesDir), L"%USERPROFILE%"); + StringCchCopyW(Defaults.FavoritesDir, COUNTOF(Defaults.FavoritesDir), L"%USERPROFILE%\\Favorites"); if (!IniSectionGetString(IniSecSettings, L"Favorites", Defaults.FavoritesDir, Settings.FavoritesDir, COUNTOF(Settings.FavoritesDir))) { GetKnownFolderPath(FOLDERID_Favorites, Settings.FavoritesDir, COUNTOF(Settings.FavoritesDir)); } @@ -1494,15 +1499,7 @@ bool SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, CustomSchemesDlgSizeY); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, CustomSchemesDlgPosX); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, CustomSchemesDlgPosY); - - - // -------------------------------------------------------------------------- - const WCHAR* const IniSecSettings2 = Constants.Settings2_Section; - // -------------------------------------------------------------------------- - - IniSectionSetString(IniSecSettings2, L"DefaultWindowPosition", Settings2.DefaultWindowPosition); - IniSectionSetString(IniSecSettings2, L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName); - + // -------------------------------------------------------------------------- const WCHAR* const IniSecWindow = Constants.Window_Section; // -------------------------------------------------------------------------- diff --git a/src/MuiLanguage.c b/src/MuiLanguage.c index 2afd0c7f0..c4912b6aa 100644 --- a/src/MuiLanguage.c +++ b/src/MuiLanguage.c @@ -140,7 +140,7 @@ static bool _LngStrToMultiLngStr(WCHAR* pLngStr, WCHAR* pLngMultiStr, size_t ln // _GetUserPreferredLanguage // // -static bool _GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, LANGID* pLangID) +bool GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, LANGID* pLangID) { int res = 0; LANGID lngID = *pLangID; @@ -209,10 +209,13 @@ LANGID LoadLanguageResources() WCHAR wchLngLocalName[LOCALE_NAME_MAX_LENGTH]; StringCchCopy(wchLngLocalName, COUNTOF(wchLngLocalName), Settings2.PreferredLanguageLocaleName); - if (_GetUserPreferredLanguage(wchLngLocalName, COUNTOF(wchLngLocalName), &languageID)) { + if (GetUserPreferredLanguage(wchLngLocalName, COUNTOF(wchLngLocalName), &languageID)) { // push-back (corrected) name found StringCchCopy(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), wchLngLocalName); //_wsetlocale(LC_COLLATE, Settings2.PreferredLanguageLocaleName); + if (StringCchCompareXIW(Settings2.PreferredLanguageLocaleName, Defaults2.PreferredLanguageLocaleName) != 0) { + IniFileSetString(Globals.IniFile, Constants.Settings2_Section, L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName); + } } // set the appropriate fallback list diff --git a/src/MuiLanguage.h b/src/MuiLanguage.h index 1310debde..d5efa0ee3 100644 --- a/src/MuiLanguage.h +++ b/src/MuiLanguage.h @@ -33,6 +33,7 @@ typedef struct _muilanguage extern MUILANGUAGE MUI_LanguageDLLs[]; int MuiLanguages_CountOf(); +bool GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, LANGID* pLangID); LANGID LoadLanguageResources(); void FreeLanguageResources(); diff --git a/src/Notepad3.c b/src/Notepad3.c index 3ee7d28c3..4003514a4 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -3536,6 +3536,9 @@ static void _DynamicLanguageMenuCmd(int cmd) CloseNonModalDialogs(); StringCchCopyW(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), MUI_LanguageDLLs[iLngIdx].szLocaleName); + if (StringCchCompareXIW(Settings2.PreferredLanguageLocaleName, Defaults2.PreferredLanguageLocaleName) != 0) { + IniFileSetString(Globals.IniFile, Constants.Settings2_Section, L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName); + } LockWindowUpdate(Globals.hwndMain); // prevent intermediate redrawing From 65190c4256298b8c644c9ccca26671f67b1d1f6d Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Sat, 25 Jan 2020 10:21:51 +0100 Subject: [PATCH 2/3] + fix: MUI Language (preferred) handling --- Build/Notepad3.ini | 2 -- src/Config/Config.cpp | 17 +++++--------- src/MuiLanguage.c | 54 ++++++++++++++++++++++++++++--------------- src/MuiLanguage.h | 1 + src/Notepad3.c | 19 +++++++-------- src/TypeDefs.h | 3 ++- 6 files changed, 54 insertions(+), 42 deletions(-) diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index 582a25bff..a34227077 100644 --- a/Build/Notepad3.ini +++ b/Build/Notepad3.ini @@ -3,8 +3,6 @@ ;Notepad3.ini=%APPDATA%\Rizonesoft\Notepad3\Notepad3.ini [Settings] SettingsVersion=4 -OpenWithDir=%USERPROFILE%\Desktop -Favorites=%USERPROFILE%\Favorites [Settings2] ;IMEInteraction=0 ;AutoReloadTimeout=2000 diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 3a8f9e932..359d0265b 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -703,8 +703,9 @@ void LoadSettings() IniSectionGetString(IniSecSettings2, L"PreferredLanguageLocaleName", Defaults2.PreferredLanguageLocaleName, Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName)); - //_wsetlocale(LC_COLLATE, Settings2.PreferredLanguageLocaleName); + StringCchCopyW(Globals.InitialPreferredLanguage, COUNTOF(Globals.InitialPreferredLanguage), Settings2.PreferredLanguageLocaleName); + // -------------------------------------------------------------------------- StringCchCopyW(Defaults2.DefaultExtension, COUNTOF(Defaults2.DefaultExtension), L"txt"); @@ -907,19 +908,13 @@ void LoadSettings() Defaults.EFR_Data.fuFlags = 0; Settings.EFR_Data.fuFlags = (UINT)IniSectionGetInt(IniSecSettings, L"efrData_fuFlags", (int)Defaults.EFR_Data.fuFlags); - StringCchCopy(Defaults.OpenWithDir, COUNTOF(Defaults.OpenWithDir), L"%USERPROFILE%\\Desktop"); - if (!IniSectionGetString(IniSecSettings, L"OpenWithDir", Defaults.OpenWithDir, Settings.OpenWithDir, COUNTOF(Settings.OpenWithDir))) { - GetKnownFolderPath(FOLDERID_Desktop, Settings.OpenWithDir, COUNTOF(Settings.OpenWithDir)); - } - else { + GetKnownFolderPath(FOLDERID_Desktop, Defaults.OpenWithDir, COUNTOF(Defaults.OpenWithDir)); + if (IniSectionGetString(IniSecSettings, L"OpenWithDir", Defaults.OpenWithDir, Settings.OpenWithDir, COUNTOF(Settings.OpenWithDir))) { PathAbsoluteFromApp(Settings.OpenWithDir, NULL, COUNTOF(Settings.OpenWithDir), true); } - StringCchCopyW(Defaults.FavoritesDir, COUNTOF(Defaults.FavoritesDir), L"%USERPROFILE%\\Favorites"); - if (!IniSectionGetString(IniSecSettings, L"Favorites", Defaults.FavoritesDir, Settings.FavoritesDir, COUNTOF(Settings.FavoritesDir))) { - GetKnownFolderPath(FOLDERID_Favorites, Settings.FavoritesDir, COUNTOF(Settings.FavoritesDir)); - } - else { + GetKnownFolderPath(FOLDERID_Favorites, Defaults.FavoritesDir, COUNTOF(Defaults.FavoritesDir)); + if (IniSectionGetString(IniSecSettings, L"Favorites", Defaults.FavoritesDir, Settings.FavoritesDir, COUNTOF(Settings.FavoritesDir))) { PathAbsoluteFromApp(Settings.FavoritesDir, NULL, COUNTOF(Settings.FavoritesDir), true); } diff --git a/src/MuiLanguage.c b/src/MuiLanguage.c index c4912b6aa..083cf741b 100644 --- a/src/MuiLanguage.c +++ b/src/MuiLanguage.c @@ -193,6 +193,33 @@ bool GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, LANGID* p } +//============================================================================= +// +// ChangePreferredLanguage +// +void SetPreferredLanguage(LANGID iPreferredLanguageID) +{ + Globals.iPrefLANGID = 0; + const WCHAR* szLocaleName = NULL; + for (int lng = 0; lng < MuiLanguages_CountOf(); ++lng) { + if (MUI_LanguageDLLs[lng].LangId == iPreferredLanguageID) { + szLocaleName = MUI_LanguageDLLs[lng].szLocaleName; + Globals.iPrefLANGID = iPreferredLanguageID; + } + } + if (szLocaleName) { + if (StringCchCompareXIW(Settings2.PreferredLanguageLocaleName, szLocaleName) != 0) { + StringCchCopyW(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), szLocaleName); + if (StringCchCompareXIW(Settings2.PreferredLanguageLocaleName, Defaults2.PreferredLanguageLocaleName) != 0) { + IniFileSetString(Globals.IniFile, Constants.Settings2_Section, L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName); + } + else { + IniFileDelete(Globals.IniFile, Constants.Settings2_Section, L"PreferredLanguageLocaleName", false); + } + } + } +} + //============================================================================= // @@ -204,20 +231,6 @@ LANGID LoadLanguageResources() // 1st check language resources Globals.iAvailLngCount = _CheckAvailableLanguageDLLs(); - LANGID languageID = MUI_LanguageDLLs[0].LangId; - - WCHAR wchLngLocalName[LOCALE_NAME_MAX_LENGTH]; - StringCchCopy(wchLngLocalName, COUNTOF(wchLngLocalName), Settings2.PreferredLanguageLocaleName); - - if (GetUserPreferredLanguage(wchLngLocalName, COUNTOF(wchLngLocalName), &languageID)) { - // push-back (corrected) name found - StringCchCopy(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), wchLngLocalName); - //_wsetlocale(LC_COLLATE, Settings2.PreferredLanguageLocaleName); - if (StringCchCompareXIW(Settings2.PreferredLanguageLocaleName, Defaults2.PreferredLanguageLocaleName) != 0) { - IniFileSetString(Globals.IniFile, Constants.Settings2_Section, L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName); - } - } - // set the appropriate fallback list int iPrefLngIndex = -1; WCHAR tchAvailLngs[2 * (LOCALE_NAME_MAX_LENGTH + 1)] = { L'\0' }; @@ -258,26 +271,29 @@ LANGID LoadLanguageResources() HINSTANCE _hLangResourceContainer = NULL; Globals.bPrefLngNotAvail = (iPrefLngIndex < 0); + int iUsedLngId = (iPrefLngIndex >= 0) ? iPrefLngIndex : 0; if ((iPrefLngIndex >= 0) && MUI_LanguageDLLs[iPrefLngIndex].bHasDLL) { _hLangResourceContainer = (iPrefLngIndex == 0) ? Globals.hInstance : - LoadMUILibrary(L"lng/np3lng.dll", MUI_LANGUAGE_NAME | MUI_LANGUAGE_EXACT, languageID); + LoadMUILibrary(L"lng/np3lng.dll", MUI_LANGUAGE_NAME | MUI_LANGUAGE_EXACT, MUI_LanguageDLLs[iPrefLngIndex].LangId); if (_hLangResourceContainer) { MUI_LanguageDLLs[0].bIsActive = false; MUI_LanguageDLLs[iPrefLngIndex].bIsActive = true; + iUsedLngId = iPrefLngIndex; } } + if (!_hLangResourceContainer) { // fallback to ENGLISH_US //MsgBoxLastError(L"LoadMUILibrary", 0); - Globals.bPrefLngNotAvail = (languageID != MUI_LanguageDLLs[0].LangId); - languageID = MUI_LanguageDLLs[0].LangId; + Globals.bPrefLngNotAvail = (iPrefLngIndex != 0); _hLangResourceContainer = Globals.hInstance; MUI_LanguageDLLs[0].bIsActive = true; + iUsedLngId = 0; } Globals.hLngResContainer = _hLangResourceContainer; - SetThreadUILanguage(languageID); + SetThreadUILanguage(MUI_LanguageDLLs[iUsedLngId].LangId); // === update language dependent items === @@ -301,7 +317,7 @@ LANGID LoadLanguageResources() IniSectionGetString(StatusBar_Section, L"SectionPostfixes", tchDefaultStrg, tchStatusBar, COUNTOF(tchStatusBar)); ReadStrgsFromCSV(tchStatusBar, g_mxSBPostfix, STATUS_SECTOR_COUNT, MICRO_BUFFER, L"_POFX_"); - return languageID; + return MUI_LanguageDLLs[iUsedLngId].LangId; } diff --git a/src/MuiLanguage.h b/src/MuiLanguage.h index d5efa0ee3..e0c7c9660 100644 --- a/src/MuiLanguage.h +++ b/src/MuiLanguage.h @@ -34,6 +34,7 @@ extern MUILANGUAGE MUI_LanguageDLLs[]; int MuiLanguages_CountOf(); bool GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, LANGID* pLangID); +void SetPreferredLanguage(LANGID iPreferredLanguageID); LANGID LoadLanguageResources(); void FreeLanguageResources(); diff --git a/src/Notepad3.c b/src/Notepad3.c index 4003514a4..9ee147ec6 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -867,7 +867,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, // ---------------------------------------------------- // MultiLingual // - Globals.iPrefLANGID = LoadLanguageResources(); + SetPreferredLanguage(LoadLanguageResources()); // ---------------------------------------------------- @@ -974,7 +974,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, SetTimer(hwnd, IDT_TIMER_MRKALL, USER_TIMER_MINIMUM, (TIMERPROC)MQ_ExecuteNext); if (Globals.bPrefLngNotAvail) { - InfoBoxLng(MB_ICONWARNING, L"MsgPrefLanguageNotAvailable", IDS_WARN_PREF_LNG_NOT_AVAIL, Settings2.PreferredLanguageLocaleName); + InfoBoxLng(MB_ICONWARNING, L"MsgPrefLanguageNotAvailable", IDS_WARN_PREF_LNG_NOT_AVAIL, Globals.InitialPreferredLanguage); } MSG msg; @@ -3535,17 +3535,18 @@ static void _DynamicLanguageMenuCmd(int cmd) { CloseNonModalDialogs(); - StringCchCopyW(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), MUI_LanguageDLLs[iLngIdx].szLocaleName); - if (StringCchCompareXIW(Settings2.PreferredLanguageLocaleName, Defaults2.PreferredLanguageLocaleName) != 0) { - IniFileSetString(Globals.IniFile, Constants.Settings2_Section, L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName); - } - LockWindowUpdate(Globals.hwndMain); // prevent intermediate redrawing DestroyMenu(Globals.hMainMenu); - Globals.iPrefLANGID = MUI_LanguageDLLs[iLngIdx].LangId; + + // desired language + SetPreferredLanguage(MUI_LanguageDLLs[iLngIdx].LangId); + FreeLanguageResources(); - Globals.iPrefLANGID = LoadLanguageResources(); + + // change to available (fallback en-US) + SetPreferredLanguage(LoadLanguageResources()); + Globals.hMainMenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_MAINMENU)); if (!Globals.hMainMenu) { MsgBoxLastError(L"LoadMenu()", 0); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index fa6b250bc..289ce59ea 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -355,6 +355,7 @@ typedef struct _globals_t unsigned idxSelectedTheme; WCHAR SelectedThemeName[128]; + WCHAR InitialPreferredLanguage[LOCALE_NAME_MAX_LENGTH + 1]; FR_STATES FindReplaceMatchFoundState; @@ -534,7 +535,7 @@ typedef struct _settings2_t //~float ReliableCEDConfidenceMapping; // = 0.85f; //~float UnReliableCEDConfidenceMapping; //= 0.20f; - WCHAR PreferredLanguageLocaleName[LOCALE_NAME_MAX_LENGTH+1]; + WCHAR PreferredLanguageLocaleName[LOCALE_NAME_MAX_LENGTH + 1]; WCHAR DefaultExtension[64]; WCHAR DefaultDirectory[MAX_PATH]; WCHAR FileDlgFilters[XHUGE_BUFFER]; From a6d51f24e1810d836062fe708cf3343a001fddc8 Mon Sep 17 00:00:00 2001 From: Pairi Daiza Date: Sat, 25 Jan 2020 14:38:56 +0100 Subject: [PATCH 3/3] + Add version files for beta channel (Build_2714) --- Versions/build.txt | 2 +- doc/KeyboardShortcuts.txt | 2 +- res/Notepad3.exe.manifest.conf | 2 +- src/VersionEx.h | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Versions/build.txt b/Versions/build.txt index c98e88a99..091d5b0a2 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -2713 +2714 diff --git a/doc/KeyboardShortcuts.txt b/doc/KeyboardShortcuts.txt index 7a9472615..ea5790cb6 100644 --- a/doc/KeyboardShortcuts.txt +++ b/doc/KeyboardShortcuts.txt @@ -19,7 +19,7 @@ Keyboard Shortcuts for Notepad3 Tools Alt+N Open document in new window. - Alt+Shit+N Open new empty window. + Alt+Shift+N Open new empty window. Ctrl+M Run MiniPath file browser plugin. Ctrl+L Launch document. Alt+L Open with. diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index 074ca286a..2d2b64984 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 BETA diff --git a/src/VersionEx.h b/src/VersionEx.h index d71bccebd..ce7e51eb0 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -8,8 +8,8 @@ #define SAPPNAME "Notepad3" #define VERSION_MAJOR 5 #define VERSION_MINOR 20 -#define VERSION_REV 124 -#define VERSION_BUILD 2713 +#define VERSION_REV 125 +#define VERSION_BUILD 2714 #define SCINTILLA_VER 430 #define ONIGURUMA_REGEX_VER 6.9.4 #define UCHARDET_VER 2018.09.27