From d9c229ca358d42581df304a580674e66371fa22b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 25 Mar 2026 11:28:00 +0800 Subject: [PATCH] Fix narrow/wide string concatenation errors for wxWidgets 3.3 In wx 3.3 with wxUSE_STD_CONTAINERS=ON, wxString is backed by std::wstring, so direct concatenation of const char[] with std::wstring or wxUniCharRef fails. Fix by splitting compound concatenations into separate += operations on wxString, or by wrapping the left operand in wxString() to use its operator+. Files fixed: - AuxiliaryDataViewModel.cpp: split "\\" + wxString/wstring chains - AboutDialog.cpp: split std::string("\n") + wxUniCharRef - Auxiliary.cpp: wrap dir.wstring() in wxString(), split "/" + wstring --- src/slic3r/GUI/AboutDialog.cpp | 3 ++- src/slic3r/GUI/Auxiliary.cpp | 7 ++++--- src/slic3r/GUI/AuxiliaryDataViewModel.cpp | 9 ++++++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index f4482ee6bd..74bfad013f 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -293,7 +293,8 @@ AboutDialog::AboutDialog() find_txt += text_list[i][o]; count_txt += text_list[i][o]; } else { - find_txt += std::string("\n") + text_list[i][o]; + find_txt += "\n"; + find_txt += text_list[i][o]; count_txt = text_list[i][o]; } } diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index 4deb621fd5..838f2739d1 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -368,7 +368,7 @@ void AuFile::on_input_enter(wxCommandEvent &evt) auto new_fullname = new_file_name + m_file_path.extension().string(); - wxString new_fullname_path = dir.wstring() + "/" + new_fullname; + wxString new_fullname_path = wxString(dir.wstring()) + "/" + new_fullname; fs::path new_dir_path(new_fullname_path.ToStdWstring()); @@ -955,7 +955,8 @@ void AuxiliaryPanel::on_import_file(wxCommandEvent &event) } if (!is_exist) { - dir_path += "/" + src_bfs_path.filename().generic_wstring(); + dir_path += "/"; + dir_path += src_bfs_path.filename().generic_wstring(); } else { time_t t1 = time(0); char ch1[64]; @@ -965,7 +966,7 @@ void AuxiliaryPanel::on_import_file(wxCommandEvent &event) wxString name = src_bfs_path.filename().generic_wstring(); auto before_name = replaceSpace(name.ToStdString(), src_bfs_path.extension().string(), ""); time_text = replaceSpace(time_text, ":", "_"); - dir_path += "/" + before_name + "_" + time_text + src_bfs_path.extension().wstring(); + dir_path += wxString("/") + before_name + "_" + time_text + src_bfs_path.extension().wstring(); } diff --git a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp index cad5cf5455..a4268c7044 100644 --- a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp +++ b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp @@ -332,9 +332,12 @@ wxDataViewItemArray AuxiliaryModel::ImportFile(AuxiliaryModelNode* sel, wxArrayS // Copy imported file to project temp directory fs::path src_bfs_path(file_path.ToStdWstring()); wxString dir_path = m_root_dir; - if (sel != m_root) - dir_path += "\\" + sel->name; - dir_path += "\\" + src_bfs_path.filename().generic_wstring(); + if (sel != m_root) { + dir_path += "\\"; + dir_path += sel->name; + } + dir_path += "\\"; + dir_path += src_bfs_path.filename().generic_wstring(); boost::system::error_code ec; if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_options::overwrite_existing, ec))