[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1016037: bullseye-pu: package libreoffice/1:7.0.4-4+deb11u1



Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian.org@packages.debian.org
Usertags: pu

[ Reason ]
1) It seems the volution adress book is broken since 2015 due to a evolution
   change. Apparently noone noticed until 2021, where I backported the patch but then
   actually forgot to request a stable update
2) Croatia will join the Eurozone on 2023-01-01. I think we should
   prepare.
   TODO: After (or shortly before) 2023-01-01 we then can do a point release update
   to switch the default...

[ Impact ]
for 1) it stays broken.
for 2) EUR isn't supported in .hr locale

[ Tests ]
None, ttbomk.

[ Risks ]
for 2) trivial, and doesn't yet affect the default
for 1) it is a bigger patch but upstream since 2021. No regression known
and if it should regress, it can't get more broken than "broken".

[ Checklist ]
  [x] *all* changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in (old)stable
  [ ] the issue is verified as fixed in unstable

(2) is not yet fixed in unstable, that will happen with the upload of
7.4.0 rc2 (or someting later) to it

[ Changes ]
See above. I just added the verbatim upstream commits.

Debdiff attached.

[ Other info ]
As said, for 2) we need a new update to switch the default later.

Regards,

Rene
diff --git a/changelog b/changelog
index bdd1d149..2baf8b2f 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,12 @@
+libreoffice (1:7.0.4-4+deb11u2) stable; urgency=medium
+
+  * debian/patches/fix-e_book_client_connect_direct_sync-sig.diff:
+    as name says; from libreoffice-7-2 branch
+  * debian/patches/hrk-euro.diff: add EUR to .hr i18n;
+    add HRK<->EUR conversion rate to Calc and the Euro Wizard
+
+ -- Rene Engelhard <rene@debian.org>  Mon, 25 Jul 2022 17:47:13 +0200
+
 libreoffice (1:7.0.4-4+deb11u1) bullseye-security; urgency=high
 
   * backport fixes from libreoffice-7-0 branch:
diff --git a/patches/fix-e_book_client_connect_direct_sync-sig.diff b/patches/fix-e_book_client_connect_direct_sync-sig.diff
new file mode 100644
index 00000000..7aef915e
--- /dev/null
+++ b/patches/fix-e_book_client_connect_direct_sync-sig.diff
@@ -0,0 +1,417 @@
+From 3b9210195b8d2ac9861a1e607455ff9d16eb68fd Mon Sep 17 00:00:00 2001
+From: Julien Nabet <serval2412@yahoo.fr>
+Date: Wed, 15 Dec 2021 22:45:47 +0100
+Subject: [PATCH] tdf#137101: fix e_book_client_connect_direct_sync signature
+ in Evolution
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+since it changed in 2015, see all details from tdf#137101
+Thank you to krumelmonster for having spotted this!
+
++ some cleanup to remove all eds_check_version calls
+and dependencies
+
+Change-Id: Iaf2437f8f5c04ab9674a380dac1dfb16ec8c7201
+Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126898
+Tested-by: Jenkins
+Tested-by: Caolán McNamara <caolanm@redhat.com>
+Reviewed-by: Caolán McNamara <caolanm@redhat.com>
+(cherry picked from commit 0661c796c767802c114441ad9a17fd0979d72ef4)
+Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126920
+---
+ connectivity/source/drivers/evoab2/EApi.cxx   |  54 +-------
+ connectivity/source/drivers/evoab2/EApi.h     |   2 +-
+ .../drivers/evoab2/NDatabaseMetaData.cxx      | 121 +++++------------
+ .../source/drivers/evoab2/NResultSet.cxx      | 125 +-----------------
+ 4 files changed, 39 insertions(+), 263 deletions(-)
+
+diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx
+index 12096bdade87..ebe710dedb57 100644
+--- a/connectivity/source/drivers/evoab2/EApi.cxx
++++ b/connectivity/source/drivers/evoab2/EApi.cxx
+@@ -23,16 +23,7 @@
+ static const char *eBookLibNames[] = {
+     "libebook-1.2.so.20", // evolution-data-server 3.33.2+
+     "libebook-1.2.so.19", // evolution-data-server 3.24+
+-    "libebook-1.2.so.16",
+-    "libebook-1.2.so.15",
+-    "libebook-1.2.so.14", // bumped again (evolution-3.6)
+-    "libebook-1.2.so.13", // bumped again (evolution-3.4)
+-    "libebook-1.2.so.12", // bumped again
+-    "libebook-1.2.so.10", // bumped again
+-    "libebook-1.2.so.9",  // evolution-2.8
+-    "libebook-1.2.so.5",  // evolution-2.4 and 2.6+
+-    "libebook-1.2.so.3",  // evolution-2.2
+-    "libebook.so.8"       // evolution-2.0
++    "libebook-1.2.so.16"
+ };
+ 
+ typedef void (*SymbolFunc) ();
+@@ -71,19 +62,6 @@ static const ApiMap aCommonApiMap[] =
+     SYM_MAP( e_book_query_field_exists )
+ };
+ 
+-//< 3.6 api
+-static const ApiMap aOldApiMap[] =
+-{
+-    SYM_MAP( e_book_get_addressbooks ),
+-    SYM_MAP( e_book_get_uri ),
+-    SYM_MAP( e_book_authenticate_user ),
+-    SYM_MAP( e_source_group_peek_base_uri),
+-    SYM_MAP( e_source_peek_name ),
+-    SYM_MAP( e_source_get_property ),
+-    SYM_MAP( e_source_list_peek_groups ),
+-    SYM_MAP( e_source_group_peek_sources )
+-};
+-
+ //>= 3.6 api
+ static const ApiMap aNewApiMap[] =
+ {
+@@ -101,12 +79,6 @@ static const ApiMap aNewApiMap[] =
+     SYM_MAP( e_client_util_free_object_slist )
+ };
+ 
+-//== indirect read access (3.6 only)
+-static const ApiMap aClientApiMap36[] =
+-{
+-    SYM_MAP( e_book_client_new )
+-};
+-
+ //>= direct read access API (>= 3.8)
+ static const ApiMap aClientApiMap38[] =
+ {
+@@ -144,33 +116,14 @@ bool EApiInit()
+ 
+         if (tryLink( aModule, eBookLibNames[ j ], aCommonApiMap))
+         {
+-            if (eds_check_version( 3, 6, 0 ) != nullptr)
++            if (tryLink( aModule, eBookLibNames[ j ], aNewApiMap))
+             {
+-                if (tryLink( aModule, eBookLibNames[ j ], aOldApiMap))
++                if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap38))
+                 {
+                     aModule.release();
+                     return true;
+                 }
+             }
+-            else if (tryLink( aModule, eBookLibNames[ j ], aNewApiMap))
+-            {
+-                if (eds_check_version( 3, 7, 6 ) != nullptr)
+-                {
+-                    if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap36))
+-                    {
+-                        aModule.release();
+-                        return true;
+-                    }
+-                }
+-                else
+-                {
+-                    if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap38))
+-                    {
+-                        aModule.release();
+-                        return true;
+-                    }
+-                }
+-            }
+         }
+     }
+     fprintf( stderr, "Can find no compliant libebook client libraries\n" );
+diff --git a/connectivity/source/drivers/evoab2/EApi.h b/connectivity/source/drivers/evoab2/EApi.h
+index 8c05f95fa2ce..928786d79f00 100644
+--- a/connectivity/source/drivers/evoab2/EApi.h
++++ b/connectivity/source/drivers/evoab2/EApi.h
+@@ -147,7 +147,7 @@ EAPI_EXTERN const gchar* (*eds_check_version) (guint required_major, guint requi
+ EAPI_EXTERN const gchar* (*e_source_get_uid) (ESource *source);
+ EAPI_EXTERN ESource* (*e_source_registry_ref_source) (ESourceRegistry *registry, const gchar *uid);
+ EAPI_EXTERN EBookClient* (*e_book_client_new) (ESource *source, GError **error);
+-EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, GCancellable *cancellable, GError **error);
++EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, guint32 wait_for_connected_seconds, GCancellable *cancellable, GError **error);
+ EAPI_EXTERN gboolean (*e_client_open_sync) (EClient *client, gboolean only_if_exists, GCancellable *cancellable, GError **error);
+ EAPI_EXTERN ESource* (*e_client_get_source) (EClient *client);
+ EAPI_EXTERN gboolean (*e_book_client_get_contacts_sync) (EBookClient *client, const gchar *sexp, GSList **contacts, GCancellable *cancellable, GError **error);
+diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
+index 9eb6f1d34862..783d9728784f 100644
+--- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
++++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
+@@ -1106,103 +1106,50 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables(
+ 
+     ODatabaseMetaDataResultSet::ORows aRows;
+ 
+-    if (eds_check_version(3, 6, 0) == nullptr)
+-    {
+-        GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK);
++    GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK);
+ 
+-        for (GList* liter = pSources; liter; liter = liter->next)
+-        {
+-            ESource *pSource = E_SOURCE (liter->data);
+-            bool can = false;
+-            switch (m_pConnection->getSDBCAddressType())
+-            {
+-                case SDBCAddress::EVO_GWISE:
+-                    can = isSourceBackend( pSource, "groupwise"); // not supported in evo/eds 3.6.x+, somehow
+-                    break;
+-                case SDBCAddress::EVO_LOCAL:
+-                    can = isSourceBackend( pSource, "local");
+-                    break;
+-                case SDBCAddress::EVO_LDAP:
+-                    can = isSourceBackend( pSource, "ldap");
+-                    break;
+-                case SDBCAddress::Unknown:
+-                    can = true;
+-                    break;
+-            }
+-            if (!can)
+-                continue;
+-
+-            OUString aHumanName = OStringToOUString( e_source_get_display_name( pSource ),
+-                                                          RTL_TEXTENCODING_UTF8 );
+-            OUString aUID = OStringToOUString( e_source_get_uid( pSource ),
+-                                                          RTL_TEXTENCODING_UTF8 );
+-            ODatabaseMetaDataResultSet::ORow aRow{
+-                ORowSetValueDecoratorRef(),
+-                ORowSetValueDecoratorRef(),
+-                ORowSetValueDecoratorRef(),
+-                new ORowSetValueDecorator(aHumanName), //tablename
+-                new ORowSetValueDecorator(aTable),
+-                new ORowSetValueDecorator(aUID)}; //comment
+-            //I'd prefer to swap the comment and the human name and
+-            //just use e_source_registry_ref_source(get_e_source_registry(), aUID);
+-            //in open book rather than search for the name again
+-            aRows.push_back(aRow);
+-        }
+-
+-        g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr);
+-        g_list_free (pSources);
+-    }
+-    else
++    for (GList* liter = pSources; liter; liter = liter->next)
+     {
+-        ESourceList *pSourceList;
+-        if( !e_book_get_addressbooks (&pSourceList, nullptr) )
+-                pSourceList = nullptr;
+-
+-        GSList *g;
+-        for( g = e_source_list_peek_groups( pSourceList ); g; g = g->next)
++        ESource *pSource = E_SOURCE (liter->data);
++	bool can = false;
++	switch (m_pConnection->getSDBCAddressType())
+         {
+-            GSList *s;
+-            const char *p = e_source_group_peek_base_uri(E_SOURCE_GROUP(g->data));
+-
+-            switch (m_pConnection->getSDBCAddressType()) {
+             case SDBCAddress::EVO_GWISE:
+-                        if ( !strncmp( "groupwise://", p, 11 ))
+-                            break;
+-                        else
+-                            continue;
++		can = isSourceBackend( pSource, "groupwise"); // not supported in evo/eds 3.6.x+, somehow
++		break;
+             case SDBCAddress::EVO_LOCAL:
+-                        if ( !strncmp( "file://", p, 6 ) ||
+-                             !strncmp( "local://", p, 6 ) )
+-                            break;
+-                        else
+-                            continue;
++		can = isSourceBackend( pSource, "local");
++		break;
+             case SDBCAddress::EVO_LDAP:
+-                        if ( !strncmp( "ldap://";, p, 6 ))
+-                            break;
+-                        else
+-                            continue;
++		can = isSourceBackend( pSource, "ldap");
++		break;
+             case SDBCAddress::Unknown:
++		can = true;
+                 break;
+-            }
+-            for (s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next)
+-            {
+-                ESource *pSource = E_SOURCE (s->data);
+-
+-                OUString aName = OStringToOUString( e_source_peek_name( pSource ),
+-                                                              RTL_TEXTENCODING_UTF8 );
+-
+-                ODatabaseMetaDataResultSet::ORow aRow{
+-                    ORowSetValueDecoratorRef(),
+-                    ORowSetValueDecoratorRef(),
+-                    ORowSetValueDecoratorRef(),
+-                    new ORowSetValueDecorator(aName),
+-                    new ORowSetValueDecorator(aTable),
+-                    ODatabaseMetaDataResultSet::getEmptyValue()};
+-                aRows.push_back(aRow);
+-            }
+         }
++        if (!can)
++            continue;
++
++        OUString aHumanName = OStringToOUString( e_source_get_display_name( pSource ),
++                                                      RTL_TEXTENCODING_UTF8 );
++        OUString aUID = OStringToOUString( e_source_get_uid( pSource ),
++                                                      RTL_TEXTENCODING_UTF8 );
++        ODatabaseMetaDataResultSet::ORow aRow{
++            ORowSetValueDecoratorRef(),
++            ORowSetValueDecoratorRef(),
++            ORowSetValueDecoratorRef(),
++            new ORowSetValueDecorator(aHumanName), //tablename
++            new ORowSetValueDecorator(ORowSetValue(aTable)),
++            new ORowSetValueDecorator(aUID)}; //comment
++        //I'd prefer to swap the comment and the human name and
++        //just use e_source_registry_ref_source(get_e_source_registry(), aUID);
++        //in open book rather than search for the name again
++        aRows.push_back(aRow);
+     }
+ 
++    g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr);
++    g_list_free (pSources);
++
+     pResult->setRows(aRows);
+ 
+     return xRef;
+diff --git a/connectivity/source/drivers/evoab2/NResultSet.cxx b/connectivity/source/drivers/evoab2/NResultSet.cxx
+index 77d53939c1aa..2e15f245b8c8 100644
+--- a/connectivity/source/drivers/evoab2/NResultSet.cxx
++++ b/connectivity/source/drivers/evoab2/NResultSet.cxx
+@@ -477,123 +477,7 @@ class OEvoabVersion38Helper : public OEvoabVersion36Helper
+ protected:
+     virtual EBookClient * createClient( ESource *pSource ) override
+     {
+-        return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, nullptr, nullptr);
+-    }
+-};
+-
+-ESource * findSource( const char *id )
+-{
+-    ESourceList *pSourceList = nullptr;
+-
+-    g_return_val_if_fail (id != nullptr, nullptr);
+-
+-    if (!e_book_get_addressbooks (&pSourceList, nullptr))
+-        pSourceList = nullptr;
+-
+-    for ( GSList *g = e_source_list_peek_groups (pSourceList); g; g = g->next)
+-    {
+-        for (GSList *s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next)
+-        {
+-            ESource *pSource = E_SOURCE (s->data);
+-            if (!strcmp (e_source_peek_name (pSource), id))
+-                return pSource;
+-        }
+-    }
+-    return nullptr;
+-}
+-
+-bool isAuthRequired( EBook *pBook )
+-{
+-    return e_source_get_property( e_book_get_source( pBook ),
+-                                  "auth" ) != nullptr;
+-}
+-
+-class OEvoabVersion35Helper : public OEvoabVersionHelper
+-{
+-private:
+-    GList *m_pContacts;
+-
+-public:
+-    OEvoabVersion35Helper()
+-        : m_pContacts(nullptr)
+-    {
+-    }
+-
+-    virtual ~OEvoabVersion35Helper() override
+-    {
+-        freeContacts();
+-    }
+-
+-    virtual EBook* openBook(const char *abname) override
+-    {
+-        ESource *pSource = findSource (abname);
+-        EBook *pBook = pSource ? e_book_new (pSource, nullptr) : nullptr;
+-        if (pBook && !e_book_open (pBook, true, nullptr))
+-        {
+-            g_object_unref (G_OBJECT (pBook));
+-            pBook = nullptr;
+-        }
+-        return pBook;
+-    }
+-
+-    virtual bool isLDAP( EBook *pBook ) override
+-    {
+-        return pBook && !strncmp( "ldap://";, e_book_get_uri( pBook ), 6 );
+-    }
+-
+-    virtual bool isLocal( EBook *pBook ) override
+-    {
+-        return pBook && ( !strncmp( "file://", e_book_get_uri( pBook ), 6 ) ||
+-                          !strncmp( "local:", e_book_get_uri( pBook ), 6 ) );
+-    }
+-
+-    virtual void freeContacts() override final
+-    {
+-        g_list_free(m_pContacts);
+-        m_pContacts = nullptr;
+-    }
+-
+-    virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &rPassword) override
+-    {
+-        freeContacts();
+-
+-        ESource *pSource = e_book_get_source( pBook );
+-        bool bAuthSuccess = true;
+-
+-        if( isAuthRequired( pBook ) )
+-        {
+-            OString aUser( getUserName( pBook ) );
+-            const char *pAuth = e_source_get_property( pSource, "auth" );
+-            bAuthSuccess = e_book_authenticate_user( pBook, aUser.getStr(), rPassword.getStr(), pAuth, nullptr );
+-        }
+-
+-        if (bAuthSuccess)
+-            e_book_get_contacts( pBook, pQuery, &m_pContacts, nullptr );
+-    }
+-
+-    virtual EContact *getContact(sal_Int32 nIndex) override
+-    {
+-        gpointer pData = g_list_nth_data (m_pContacts, nIndex);
+-        return pData ? E_CONTACT (pData) : nullptr;
+-    }
+-
+-    virtual sal_Int32 getNumContacts() override
+-    {
+-        return g_list_length( m_pContacts );
+-    }
+-
+-    virtual bool hasContacts() override
+-    {
+-        return m_pContacts != nullptr;
+-    }
+-
+-    virtual void sortContacts( const ComparisonData& _rCompData ) override
+-    {
+-        OSL_ENSURE( !_rCompData.rSortOrder.empty(), "sortContacts: no need to call this without any sort order!" );
+-        ENSURE_OR_THROW( _rCompData.aIntlWrapper.getCaseCollator(), "no collator for comparing strings" );
+-
+-        m_pContacts = g_list_sort_with_data( m_pContacts, &CompareContacts,
+-            const_cast< gpointer >( static_cast< gconstpointer >( &_rCompData ) ) );
++        return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, 10, nullptr, nullptr);
+     }
+ };
+ 
+@@ -612,12 +496,7 @@ OEvoabResultSet::OEvoabResultSet( OCommonStatement* pStmt, OEvoabConnection *pCo
+     ,m_nIndex(-1)
+     ,m_nLength(0)
+ {
+-    if (eds_check_version( 3, 7, 6 ) == nullptr)
+-        m_pVersionHelper  = std::make_unique<OEvoabVersion38Helper>();
+-    else if (eds_check_version( 3, 6, 0 ) == nullptr)
+-        m_pVersionHelper  = std::make_unique<OEvoabVersion36Helper>();
+-    else
+-        m_pVersionHelper  = std::make_unique<OEvoabVersion35Helper>();
++    m_pVersionHelper  = std::make_unique<OEvoabVersion38Helper>();
+ 
+     #define REGISTER_PROP( id, member ) \
+         registerProperty( \
diff --git a/patches/hrk-euro.diff b/patches/hrk-euro.diff
new file mode 100644
index 00000000..b4fbe69a
--- /dev/null
+++ b/patches/hrk-euro.diff
@@ -0,0 +1,156 @@
+From 7c4b2db21ef77b37daf234ac1ab9989234606a22 Mon Sep 17 00:00:00 2001
+From: Eike Rathke <erack@redhat.com>
+Date: Fri, 22 Jul 2022 22:12:02 +0200
+Subject: Resolves: tdf#150011 Add HRK Croatian Kuna conversion to EUR Euro
+
+TODO: switch defaults before 2023-01-01 in
+i18npool/source/localedata/data/hr_HR.xml
+
+Change-Id: Ifc62aefbc8c9fe8bbf044f61ae4fd6eeff692185
+Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137371
+Reviewed-by: Eike Rathke <erack@redhat.com>
+Tested-by: Jenkins
+---
+ i18npool/source/localedata/data/hr_HR.xml              |  8 ++++++++
+ officecfg/registry/data/org/openoffice/Office/Calc.xcu | 11 +++++++++++
+ sc/source/core/tool/interpr2.cxx                       |  3 ++-
+ 3 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/i18npool/source/localedata/data/hr_HR.xml b/i18npool/source/localedata/data/hr_HR.xml
+index 0c493131e16b..4de83e5535cd 100644
+--- a/i18npool/source/localedata/data/hr_HR.xml
++++ b/i18npool/source/localedata/data/hr_HR.xml
+@@ -421,6 +421,14 @@
+       <CurrencyName>Hrvatska Kuna</CurrencyName>
+       <DecimalPlaces>2</DecimalPlaces>
+     </Currency>
++    <!-- TODO: switch defaults before 2023-01-01 -->
++    <Currency default="false" usedInCompatibleFormatCodes="false">
++      <CurrencyID>EUR</CurrencyID>
++      <CurrencySymbol>€</CurrencySymbol>
++      <BankSymbol>EUR</BankSymbol>
++      <CurrencyName>Euro</CurrencyName>
++      <DecimalPlaces>2</DecimalPlaces>
++    </Currency>
+   </LC_CURRENCY>
+   <LC_TRANSLITERATION>
+     <Transliteration unoid="SENTENCE_CASE"/>
+diff --git a/officecfg/registry/data/org/openoffice/Office/Calc.xcu b/officecfg/registry/data/org/openoffice/Office/Calc.xcu
+index a62d06512704..eda60fe6c434 100644
+--- a/officecfg/registry/data/org/openoffice/Office/Calc.xcu
++++ b/officecfg/registry/data/org/openoffice/Office/Calc.xcu
+@@ -228,6 +228,17 @@
+         <value>3.45280</value>
+       </prop>
+     </node>
++    <node oor:name="CR20" oor:op="replace">
++      <prop oor:name="FromUnit">
++        <value>EUR</value>
++      </prop>
++      <prop oor:name="ToUnit">
++        <value>HRK</value>
++      </prop>
++      <prop oor:name="Factor">
++        <value>7.53450</value>
++      </prop>
++    </node>
+   </node>
+   <node oor:name="Calculate">
+     <node oor:name="Other">
+diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx
+index 31c42a4b728a..67fcd9f787f8 100644
+--- a/sc/source/core/tool/interpr2.cxx
++++ b/sc/source/core/tool/interpr2.cxx
+@@ -3235,7 +3235,8 @@ static bool lclConvertMoney( const OUString& aSearchUnit, double& rfRate, int& r
+         { "SKK", 30.1260,  2 },
+         { "EEK", 15.6466,  2 },
+         { "LVL", 0.702804, 2 },
+-        { "LTL", 3.45280,  2 }
++        { "LTL", 3.45280,  2 },
++        { "HRK", 7.53450,  2 }
+     };
+ 
+     for (const auto & i : aConvertTable)
+-- 
+cgit v1.2.1
+
+From b1a2f727ca99ecd3402d4b051b99cbfd24266e59 Mon Sep 17 00:00:00 2001
+From: Eike Rathke <erack@redhat.com>
+Date: Fri, 22 Jul 2022 22:17:11 +0200
+Subject: Related: tdf#150011 Add HRK Croatian Kuna to Euro conversion wizard
+
+Maybe just for completeness, it's removed from menu but might be
+callable as macro.
+
+Change-Id: Iade0be845186d3deb2f00f4aaa230c0b344cea72
+Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137372
+Reviewed-by: Eike Rathke <erack@redhat.com>
+Tested-by: Jenkins
+---
+ wizards/source/euro/Init.xba                        | 16 ++++++++++++++++
+ wizards/source/resources/resources_en_US.properties |  1 +
+ 2 files changed, 17 insertions(+)
+
+diff --git a/wizards/source/euro/Init.xba b/wizards/source/euro/Init.xba
+index 623a0a53be46..9f56c503a347 100644
+--- a/wizards/source/euro/Init.xba
++++ b/wizards/source/euro/Init.xba
+@@ -89,6 +89,7 @@ Public sCurrSLOVAK as String
+ Public sCurrESTONIAN as String
+ Public sCurrLATVIAN as String
+ Public sCurrLITHUANIAN as String
++Public sCurrCROATIAN as String
+ 
+ Public sPrgsRETRIEVAL as String
+ Public sPrgsCONVERTING as String
+@@ -214,6 +215,7 @@ Dim LocWorkPath as String
+ 		sCurrESTONIAN = GetResText(&quot;CURRENCIES_16&quot;)
+ 		sCurrLATVIAN = GetResText(&quot;CURRENCIES_17&quot;)
+ 		sCurrLITHUANIAN = GetResText(&quot;CURRENCIES_18&quot;)
++		sCurrCROATIAN = GetResText(&quot;CURRENCIES_19&quot;)
+ 		.cmdCancel.Label =  sCANCEL
+ 		.cmdHelp.Label =  sHELP
+ 		.cmdBack.Label =  GetResText(&quot;STEP_ZERO_2&quot;)
+@@ -393,6 +395,11 @@ Sub InitializeLanguages()
+     LangIDValue(18,0,1) = &quot;LT&quot;
+     LangIDValue(18,0,2) = &quot;-427&quot;
+ 
++&apos; CURRENCIES_CROATIAN
++    LangIDValue(19,0,0) = &quot;hr&quot;
++    LangIDValue(19,0,1) = &quot;HR&quot;
++    LangIDValue(19,0,2) = &quot;-41A&quot;
++
+ End Sub
+ 
+ 
+@@ -572,6 +579,15 @@ Dim i as Integer
+ 	CurrValue(18,4) = &quot;Lt&quot;
+ 	CurrValue(18,5) = &quot;LTL&quot;
+ 
++	CurrValue(19,0) = sCurrCROATIAN
++	&apos; real conversion rate
++	CurrValue(19,1) = 7.53450
++	&apos; rounded conversion rate
++	CurrValue(19,2) = 7.5
++	CurrValue(19,3) = &quot;kn&quot;
++	CurrValue(19,4) = &quot;kn&quot;
++	CurrValue(19,5) = &quot;HRK&quot;
++
+ 	i = -1
+ 	CurrSymbolList(0) = &quot;&quot;
+ 	CurrSymbolList(1) = &quot;&quot;
+diff --git a/wizards/source/resources/resources_en_US.properties b/wizards/source/resources/resources_en_US.properties
+index 32f9104e97e0..8649b2500e6a 100644
+--- a/wizards/source/resources/resources_en_US.properties
++++ b/wizards/source/resources/resources_en_US.properties
+@@ -448,6 +448,7 @@ CURRENCIES_15=Slovak Koruna
+ CURRENCIES_16=Estonian Kroon
+ CURRENCIES_17=Latvian Lats
+ CURRENCIES_18=Lithuanian Litas
++CURRENCIES_19=Croatian Kuna
+ STEP_LASTPAGE_0=Progress
+ STEP_LASTPAGE_1=Retrieving the relevant documents...
+ STEP_LASTPAGE_2=Converting the documents...
+-- 
+cgit v1.2.1
+
diff --git a/patches/series b/patches/series
index d7c5a79c..49c11aa3 100644
--- a/patches/series
+++ b/patches/series
@@ -56,3 +56,5 @@ xmlsecurity-XSecParser-confused-about-multiple-timestamps.diff
 xmlsecurity-ignore-elements-in-ds:Object-that-arent-signed.diff
 default-to-CertificateValidity::INVALID.diff
 xmlsecurity-improve-handling-of-multiple-X509Data-elements.diff
+fix-e_book_client_connect_direct_sync-sig.diff
+hrk-euro.diff

Reply to: