fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx | 21 ++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
New commits: commit 39b1a0f7a5baa09b6040a147e8ceae4c0c476ddc Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Thu Dec 6 01:32:35 2018 +0300 Commit: Ilhan Yesil <ilhanye...@gmx.de> CommitDate: Wed Jan 23 13:44:28 2019 +0100 tdf#119747 FileSaveDialog: remove duplicate extension on Windows This properly reimplements the fix, only changing the display strings sent to native dialog, and never modifying the filter names as seen by LibreOffice code. Reviewed-on: https://gerrit.libreoffice.org/64656 Tested-by: Jenkins Reviewed-by: Katarina Behrens <katarina.behr...@cib.de> Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de> Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> (cherry picked from commit f553e34aff94fd9bce9cce77e0a723021be7c38a) Reviewed-on: https://gerrit.libreoffice.org/66777 Reviewed-by: Ilhan Yesil <ilhanye...@gmx.de> Tested-by: Ilhan Yesil <ilhanye...@gmx.de> (cherry picked from commit b2fdea0bcb3b5edb824c8d725f7f37521ff890ef) Change-Id: Iee5f09acd6b12c0ba8b7568b16f8ab07821006ee Reviewed-on: https://gerrit.libreoffice.org/66794 Reviewed-by: Ilhan Yesil <ilhanye...@gmx.de> Tested-by: Ilhan Yesil <ilhanye...@gmx.de> diff --git a/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx b/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx index dfc99a336187..595b68118560 100644 --- a/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx +++ b/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx @@ -119,8 +119,16 @@ OUString lcl_getURLFromShellItem (IShellItem* pItem) return sURL; } +// Vista file picker shows the filter mask next to filter name in the list; so we need to remove the +// mask from the filter name to avoid duplicating masks +static OUString lcl_AdjustFilterName(const OUString& sName) +{ + const sal_Int32 idx = sName.indexOf("(."); + return (idx > 0) ? sName.copy(0, idx).trim() : sName; +} -::std::vector< COMDLG_FILTERSPEC > lcl_buildFilterList(CFilterContainer& rContainer) +::std::vector< COMDLG_FILTERSPEC > lcl_buildFilterList(CFilterContainer& rContainer, + std::vector<OUString>& rvStrings) { ::std::vector< COMDLG_FILTERSPEC > lList ; CFilterContainer::FILTER_ENTRY_T aFilter; @@ -130,7 +138,8 @@ OUString lcl_getURLFromShellItem (IShellItem* pItem) { COMDLG_FILTERSPEC aSpec; - aSpec.pszName = o3tl::toW(aFilter.first.getStr()) ; + rvStrings.push_back(lcl_AdjustFilterName(aFilter.first)); // to avoid dangling pointer + aSpec.pszName = o3tl::toW(rvStrings.back().getStr()) ; aSpec.pszSpec = o3tl::toW(aFilter.second.getStr()); lList.push_back(aSpec); @@ -781,7 +790,9 @@ void VistaFilePickerImpl::impl_sta_setFiltersOnDialog() // SYNCHRONIZED-> ::osl::ResettableMutexGuard aLock(m_aMutex); - ::std::vector< COMDLG_FILTERSPEC > lFilters = lcl_buildFilterList(m_lFilters); + std::vector<OUString> vStrings; // to hold the adjusted filter names, pointers to which will be + // stored in lFilters + ::std::vector< COMDLG_FILTERSPEC > lFilters = lcl_buildFilterList(m_lFilters, vStrings); OUString sCurrentFilter = m_lFilters.getCurrentFilter(); sal_Int32 nCurrentFilter = m_lFilters.getFilterPos(sCurrentFilter); TFileDialog iDialog = impl_getBaseDialogInterface(); @@ -937,7 +948,9 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest) { // COM dialog base on 1 ... filter container on 0 .-) ::size_t nRealIndex = (nFileType-1); - ::std::vector< COMDLG_FILTERSPEC > lFilters = lcl_buildFilterList(m_lFilters); + std::vector<OUString> vStrings; + ::std::vector<COMDLG_FILTERSPEC> lFilters + = lcl_buildFilterList(m_lFilters, vStrings); if ( nRealIndex < lFilters.size() ) { PCWSTR lpFilterExt = lFilters[nRealIndex].pszSpec; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits