include/svl/zforlist.hxx         |    4 ++++
 svx/source/tbxctrls/tbcontrl.cxx |   18 +++++++++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

New commits:
commit 97e63ff5375d9d80d6fe5d4bd68883e35bd56d91
Author:     Eike Rathke <er...@redhat.com>
AuthorDate: Mon Oct 25 15:39:46 2021 +0200
Commit:     Eike Rathke <er...@redhat.com>
CommitDate: Mon Oct 25 18:15:40 2021 +0200

    Fix toolbar button's currency list's number format for default locale
    
    Always resulted in the currency's LCID being omitted in the number
    format for the default locale, which doesn't immediately harm but
    loses the context (what currency a $ sign is actually), and also
    lead to the "real" default currency format never matching the one
    being generated for the list so no entry was selected if that
    format was applied.
    
    Change-Id: I7963e4d3701092d6e227705fc0e8282448f075b1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124152
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins

diff --git a/include/svl/zforlist.hxx b/include/svl/zforlist.hxx
index 9836f5047542..251b8212a3cd 100644
--- a/include/svl/zforlist.hxx
+++ b/include/svl/zforlist.hxx
@@ -323,6 +323,7 @@ public:
     NfCurrencyEntry( const css::i18n::Currency & rCurr,
                      const LocaleDataWrapper& rLocaleData,
                      LanguageType eLang );
+    NfCurrencyEntry( const NfCurrencyEntry& ) = default;
 
                         /// Symbols and language identical
     bool                operator==( const NfCurrencyEntry& r ) const;
@@ -334,6 +335,9 @@ public:
     sal_uInt16          GetNegativeFormat() const   { return nNegativeFormat; }
     sal_uInt16          GetDigits() const           { return nDigits; }
 
+                        /** Only to resolve system locale for currency list. */
+    void                SetLanguage( LanguageType nLang ) { eLanguage = nLang; 
}
+
                         /** [$DM-407] (bBank==false) or [$DEM] (bBank==true)
                             is returned. If bBank==false and
                             bWithoutExtension==true only [$DM] */
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 6dd380b31883..1c816097b3ff 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -3642,11 +3642,23 @@ namespace
                     if (rItem.getLength() > sLongestString.getLength())
                         sLongestString = rItem;
 
-                    const NfCurrencyEntry& aCurrencyEntry = rCurrencyTable[ 
rCurrencyIndex ];
-
                     bIsSymbol = nPos >= nLen;
 
-                    sal_uInt16 nDefaultFormat = 
aFormatter.GetCurrencyFormatStrings( aStringsDtor, aCurrencyEntry, bIsSymbol );
+                    sal_uInt16 nDefaultFormat;
+                    const NfCurrencyEntry& rCurrencyEntry = rCurrencyTable[ 
rCurrencyIndex ];
+                    if (rCurrencyIndex == 0)
+                    {
+                        // Stored with system locale, but we want the resolved
+                        // full LCID format string. For example
+                        // "[$$-409]#,##0.00" instead of "[$$]#,##0.00".
+                        NfCurrencyEntry aCurrencyEntry( rCurrencyEntry);
+                        aCurrencyEntry.SetLanguage( LanguageTag( 
aCurrencyEntry.GetLanguage()).getLanguageType());
+                        nDefaultFormat = aFormatter.GetCurrencyFormatStrings( 
aStringsDtor, aCurrencyEntry, bIsSymbol);
+                    }
+                    else
+                    {
+                        nDefaultFormat = aFormatter.GetCurrencyFormatStrings( 
aStringsDtor, rCurrencyEntry, bIsSymbol);
+                    }
                     const OUString& rFormatStr = aStringsDtor[ nDefaultFormat 
];
                     m_aFormatEntries.push_back( rFormatStr );
                     if( rFormatStr == m_rSelectedFormat )

Reply via email to