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());

Reply via email to