diff options
author | Julien Nabet <serval2412@yahoo.fr> | 2015-09-15 21:41:48 +0200 |
---|---|---|
committer | Julien Nabet <serval2412@yahoo.fr> | 2015-09-30 12:11:35 +0000 |
commit | 652158c3f2c9cd0d6f71ecd14bf5d5cc02a71b50 (patch) | |
tree | 13ad29a110565f24e7010a68d902cadf1c441b62 | |
parent | 8727afe771a3e4d585e98ca9cceff2504e500bb0 (diff) |
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@libreoffice.org>
Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
-rw-r--r-- | sc/inc/autoform.hxx | 6 | ||||
-rw-r--r-- | sc/source/core/tool/autoform.cxx | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/sc/inc/autoform.hxx b/sc/inc/autoform.hxx index 7c188343e6e4..ffdc8cedbbe3 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 004235860a69..647f3472f9ae 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) {} |