From f0de0348d59bb82a84efff1b558623fba278704d Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 11:45:21 -0500 Subject: [PATCH] fix: windows save dialog extension bug (#44771) * fix: windows save dialog extension bug * refactor: simplify firstSpec extraction * refactor: split when necessary --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: nilaoda --- shell/browser/ui/file_dialog_win.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/shell/browser/ui/file_dialog_win.cc b/shell/browser/ui/file_dialog_win.cc index cfc8c6068c64..e142477ad082 100644 --- a/shell/browser/ui/file_dialog_win.cc +++ b/shell/browser/ui/file_dialog_win.cc @@ -144,10 +144,14 @@ static void ApplySettings(IFileDialog* dialog, const DialogSettings& settings) { // We set file extension to the first none-wildcard extension to make // sure the dialog will update file extension automatically. for (size_t i = 0; i < filterspec.size(); ++i) { - if (std::wstring(filterspec[i].pszSpec) != L"*.*") { + std::wstring spec(filterspec[i].pszSpec); + if (spec != L"*.*") { // SetFileTypeIndex is regarded as one-based index. dialog->SetFileTypeIndex(i + 1); - dialog->SetDefaultExtension(filterspec[i].pszSpec); + // "*.jpg;*.png" => "*.jpg" + std::wstring first_spec = spec.substr(0, spec.find(L';')); + // "*.jpg" => "jpg" + dialog->SetDefaultExtension(first_spec.substr(2).c_str()); break; } }