[Libreoffice-commits] core.git: sc/inc sc/source

Julien Nabet serval2412 at yahoo.fr
Wed Sep 30 05:11:58 PDT 2015


 sc/inc/autoform.hxx              |    6 +++++-
 sc/source/core/tool/autoform.cxx |   10 ++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

New commits:
commit 652158c3f2c9cd0d6f71ecd14bf5d5cc02a71b50
Author: Julien Nabet <serval2412 at yahoo.fr>
Date:   Tue Sep 15 21:41:48 2015 +0200

    tdf#94173: Calc doesn't save your own created autoformat presets
    
    Auformat list (maData) is defined as "MapType" which itself is defined like this:
    boost::ptr_map<OUString, ScAutoFormatData>
    so default sorting is ascii
    
    2 consequences:
    1) Default didn't appear first
    2) When adding a new autoformat entry when it was new first one of the list
    wasn't saved because of iterator was incremented first before looping
    See https://bugs.documentfoundation.org/show_bug.cgi?id=94173#c5
    There were some other weird behaviors too according to comments of the bugtracker
    
    Regression from http://cgit.freedesktop.org/libreoffice/core/commit/?id=72c1b6141d590fb4479925ed8bc88b79357c2bfc
    
    Solution:
    Add a Compare so Default entry is always first one so the first time incremented iterator is ok and
    new entry (even if new first one in list) is saved
    
    Thank you Markus for the idea! (I was lost in Compare syntax)
    
    Change-Id: I9ba0cdc63c66b747db102bb661cd09fbfe5996ae
    Reviewed-on: https://gerrit.libreoffice.org/18598
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Julien Nabet <serval2412 at yahoo.fr>

diff --git a/sc/inc/autoform.hxx b/sc/inc/autoform.hxx
index 7c18834..ffdc8ce 100644
--- a/sc/inc/autoform.hxx
+++ b/sc/inc/autoform.hxx
@@ -307,9 +307,13 @@ public:
     bool                        Save( SvStream& rStream, sal_uInt16 fileVersion );
 };
 
+struct DefaultFirstEntry {
+    bool operator() (const OUString& left, const OUString& right) const;
+};
+
 class SC_DLLPUBLIC ScAutoFormat
 {
-    typedef boost::ptr_map<OUString, ScAutoFormatData> MapType;
+    typedef boost::ptr_map<OUString, ScAutoFormatData, DefaultFirstEntry> MapType;
     MapType maData;
     bool mbSaveLater;
     ScAfVersions m_aVersions;
diff --git a/sc/source/core/tool/autoform.cxx b/sc/source/core/tool/autoform.cxx
index 0042358..647f347 100644
--- a/sc/source/core/tool/autoform.cxx
+++ b/sc/source/core/tool/autoform.cxx
@@ -896,6 +896,16 @@ ScAutoFormat::ScAutoFormat() :
     insert(pData);
 }
 
+bool DefaultFirstEntry::operator() (const OUString& left, const OUString& right) const
+{
+    OUString aStrStandard(ScGlobal::GetRscString(STR_STYLENAME_STANDARD));
+    if ( ScGlobal::GetpTransliteration()->isEqual( left, aStrStandard ) )
+        return true;
+    if ( ScGlobal::GetpTransliteration()->isEqual( right, aStrStandard ) )
+        return false;
+    return left < right;
+}
+
 ScAutoFormat::ScAutoFormat(const ScAutoFormat& r) :
     maData(r.maData),
     mbSaveLater(false) {}


More information about the Libreoffice-commits mailing list