Fix saving wrong macro/run menu UTF8 folder name after commands modification

The macro/run commands menu folder (submenu entry) can be UTF8 characters.
After modification of macro/run shortcut commands, the macro/run menu UTF8 folder names can be saved correctly by this commit, but in Unicode character number form instead of human readible characters.

Fix #12670, close #13516
This commit is contained in:
Don Ho 2023-04-12 22:13:54 +02:00
parent 4934b46bd7
commit 96b56f61f9
1 changed files with 34 additions and 2 deletions

View File

@ -3420,7 +3420,23 @@ void NppParameters::insertMacro(TiXmlNode *macrosRoot, const MacroShortcut & mac
macroRoot->ToElement()->SetAttribute(TEXT("Shift"), key._isShift?TEXT("yes"):TEXT("no"));
macroRoot->ToElement()->SetAttribute(TEXT("Key"), key._key);
if (!folderName.empty())
macroRoot->ToElement()->SetAttribute(TEXT("FolderName"), folderName);
{
// W -> A -> W
WcharMbcsConvertor& wmc = WcharMbcsConvertor::getInstance();
const char* folderNameA = wmc.wchar2char(folderName.c_str(), SC_CP_UTF8);
size_t len = strlen(folderNameA);
wchar_t* folderNameW = new wchar_t[len+1];
for (size_t i = 0; i < len; ++i)
{
folderNameW[i] = folderNameA[i];
}
folderNameW[len] = '\0';
macroRoot->ToElement()->SetAttribute(TEXT("FolderName"), folderNameW);
delete[] folderNameW;
}
for (size_t i = 0, len = macro._macro.size(); i < len ; ++i)
{
@ -3446,7 +3462,23 @@ void NppParameters::insertUserCmd(TiXmlNode *userCmdRoot, const UserCommand & us
cmdRoot->ToElement()->SetAttribute(TEXT("Key"), key._key);
cmdRoot->InsertEndChild(TiXmlText(userCmd._cmd.c_str()));
if (!folderName.empty())
cmdRoot->ToElement()->SetAttribute(TEXT("FolderName"), folderName);
{
// W -> A -> W
WcharMbcsConvertor& wmc = WcharMbcsConvertor::getInstance();
const char* folderNameA = wmc.wchar2char(folderName.c_str(), SC_CP_UTF8);
size_t len = strlen(folderNameA);
wchar_t* folderNameW = new wchar_t[len + 1];
for (size_t i = 0; i < len; ++i)
{
folderNameW[i] = folderNameA[i];
}
folderNameW[len] = '\0';
cmdRoot->ToElement()->SetAttribute(TEXT("FolderName"), folderNameW);
delete[] folderNameW;
}
}