diff options
author | Eike Rathke <erack@redhat.com> | 2017-07-17 21:59:38 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-07-18 11:16:27 +0200 |
commit | ee052d7fb032c2b571cdb825d4e73a3715790ef0 (patch) | |
tree | 14ed51527047f120ea176b32ebfdcbc648865acb | |
parent | c5303d5cad303a745996fcebe9fdbc4bd6df0640 (diff) |
Defer also loading of the English CalendarWrapper, tdf#109045 follow-up
Always constructing the en-US CalendarWrapper defeats the original intention
that not for every construction of SvNumberFormatter a calendar is needed, plus
if no en-US is requested constructing such calendar is just wasted.
Since
commit 2a22696546ace75c38a72ad13f7383aedd00e06a
Date: Mon Jul 10 15:56:32 2017 +0200
tdf#109045: store en calendar separately in OnDemandCalendarWrapper
Change-Id: I06e13754f03fc1fe4fbf48b76ccb82c917606480
(cherry picked from commit 21394b08475d1d869aa62c1dbb46c3dcc93ae3f0)
Reviewed-on: https://gerrit.libreoffice.org/40097
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Aron Budea <aron.budea@collabora.com>
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
-rw-r--r-- | include/svl/ondemand.hxx | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/include/svl/ondemand.hxx b/include/svl/ondemand.hxx index 04984086ed8b..5ba5de610e91 100644 --- a/include/svl/ondemand.hxx +++ b/include/svl/ondemand.hxx @@ -129,7 +129,7 @@ public: const LocaleDataWrapper& operator*() const { return *get(); } }; -/** Load a calendar only if it's needed. Keep calendar for "en" locale +/** Load a calendar only if it's needed. Keep calendar for "en-US" locale separately, as there can be alternation between locale dependent and locale independent formats. SvNumberformatter uses it upon switching locales. @@ -143,7 +143,7 @@ class OnDemandCalendarWrapper css::lang::Locale aEnglishLocale; css::lang::Locale aLocale; mutable css::lang::Locale aLastAnyLocale; - std::unique_ptr<CalendarWrapper> pEnglishPtr; + mutable std::unique_ptr<CalendarWrapper> pEnglishPtr; mutable std::unique_ptr<CalendarWrapper> pAnyPtr; public: @@ -161,8 +161,7 @@ public: { m_xContext = rxContext; changeLocale( rLocale ); - pEnglishPtr.reset(new CalendarWrapper( m_xContext )); - pEnglishPtr->loadDefaultCalendar( aEnglishLocale ); + pEnglishPtr.reset(); pAnyPtr.reset(); } @@ -176,6 +175,11 @@ public: CalendarWrapper* pPtr; if ( aLocale == aEnglishLocale ) { + if (!pEnglishPtr) + { + pEnglishPtr.reset( new CalendarWrapper( m_xContext )); + pEnglishPtr->loadDefaultCalendar( aEnglishLocale ); + } pPtr = pEnglishPtr.get(); } else |