include/svx/charmap.hxx | 2 - svx/source/dialog/charmap.cxx | 79 ++++++++++++++---------------------------- 2 files changed, 28 insertions(+), 53 deletions(-)
New commits: commit 332b620732d4f78625c6547a988fa9860ab0d7bd Author: Vert D <devoptm...@gmx.com> AuthorDate: Fri Apr 28 08:13:56 2023 -0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Tue May 2 14:22:55 2023 +0200 tdf#154884 fix isFavChar, updateFavCharacterList deletes the correct pair Change-Id: I98be8df93c5e3985e95f285e3cb9a2b600eb85c9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151216 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/include/svx/charmap.hxx b/include/svx/charmap.hxx index 71999368fd4a..8057eae3c1bd 100644 --- a/include/svx/charmap.hxx +++ b/include/svx/charmap.hxx @@ -78,7 +78,7 @@ public: void SetFont( const vcl::Font& rFont ); vcl::Font const & GetFont() const { return maFont; } FontCharMapRef const & GetFontCharMap(); - bool isFavChar(const OUString& sTitle, const OUString& rFont); + bool isFavChar(std::u16string_view sTitle, std::u16string_view rFont); void getFavCharacterList(); //gets both Fav char and Fav char font list void updateFavCharacterList(const OUString& rChar, const OUString& rFont); diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx index 924838273d05..6d7933fe95cb 100644 --- a/svx/source/dialog/charmap.cxx +++ b/svx/source/dialog/charmap.cxx @@ -228,18 +228,15 @@ void SvxShowCharSet::getFavCharacterList() comphelper::sequenceToContainer(maFavCharFontList, rFavCharFontList); } -bool SvxShowCharSet::isFavChar(const OUString& sTitle, const OUString& rFont) +bool SvxShowCharSet::isFavChar(std::u16string_view sTitle, std::u16string_view rFont) { - auto isFavCharTitleExists = std::any_of(maFavCharList.begin(), - maFavCharList.end(), - [sTitle] (const OUString & a) { return a == sTitle; }); - - auto isFavCharFontExists = std::any_of(maFavCharFontList.begin(), - maFavCharFontList.end(), - [rFont] (const OUString & a) { return a == rFont; }); - - // if Fav char to be added is already in list, return true - return isFavCharTitleExists && isFavCharFontExists; + assert(maFavCharList.size() == maFavCharFontList.size()); + for (size_t i = 0; i < maFavCharList.size(); i++) + { + if (maFavCharList[i] == sTitle && maFavCharFontList[i] == rFont) + return true; + } + return false; } void SvxShowCharSet::createContextMenu(const Point& rPosition) @@ -300,55 +297,33 @@ void SvxShowCharSet::CopyToClipboard(const OUString& rOUStr) void SvxShowCharSet::updateFavCharacterList(const OUString& sTitle, const OUString& rFont) { - if(isFavChar(sTitle, rFont)) + if (isFavChar(sTitle, rFont)) { - auto itChar = std::find(maFavCharList.begin(), maFavCharList.end(), sTitle); - auto itChar2 = std::find(maFavCharFontList.begin(), maFavCharFontList.end(), rFont); - - // if Fav char to be added is already in list, remove it - if( itChar != maFavCharList.end() && itChar2 != maFavCharFontList.end() ) + assert(maFavCharList.size() == maFavCharFontList.size()); + auto fontIt = maFavCharFontList.begin(); + for (auto charIt = maFavCharList.begin(); charIt != maFavCharList.end(); charIt++) { - maFavCharList.erase( itChar ); - maFavCharFontList.erase( itChar2); - } - - css::uno::Sequence< OUString > aFavCharList(maFavCharList.size()); - auto aFavCharListRange = asNonConstRange(aFavCharList); - css::uno::Sequence< OUString > aFavCharFontList(maFavCharFontList.size()); - auto aFavCharFontListRange = asNonConstRange(aFavCharFontList); - - for (size_t i = 0; i < maFavCharList.size(); ++i) - { - aFavCharListRange[i] = maFavCharList[i]; - aFavCharFontListRange[i] = maFavCharFontList[i]; + if (*charIt == sTitle && *fontIt == rFont) + { + maFavCharList.erase(charIt); + maFavCharFontList.erase(fontIt); + break; + } + fontIt++; } - - std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create()); - officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterList::set(aFavCharList, batch); - officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterFontList::set(aFavCharFontList, batch); - batch->commit(); - return; } - - auto itChar = std::find(maFavCharList.begin(), maFavCharList.end(), sTitle); - auto itChar2 = std::find(maFavCharFontList.begin(), maFavCharFontList.end(), rFont); - - // if Fav char to be added is already in list, remove it - if( itChar != maFavCharList.end() && itChar2 != maFavCharFontList.end() ) + else { - maFavCharList.erase( itChar ); - maFavCharFontList.erase( itChar2); - } + if (maFavCharList.size() == 16) + { + maFavCharList.pop_back(); + maFavCharFontList.pop_back(); + } - if (maFavCharList.size() == 16) - { - maFavCharList.pop_back(); - maFavCharFontList.pop_back(); + maFavCharList.push_back(sTitle); + maFavCharFontList.push_back(rFont); } - maFavCharList.push_back(sTitle); - maFavCharFontList.push_back(rFont); - css::uno::Sequence< OUString > aFavCharList(maFavCharList.size()); auto aFavCharListRange = asNonConstRange(aFavCharList); css::uno::Sequence< OUString > aFavCharFontList(maFavCharFontList.size());