[Libreoffice-commits] core.git: Branch 'libreoffice-5-4-0' - include/svl
Aron Budea
aron.budea at collabora.com
Tue Jul 18 06:45:51 UTC 2017
include/svl/ondemand.hxx | 53 +++++++++++++++++++++++++++++++----------------
1 file changed, 35 insertions(+), 18 deletions(-)
New commits:
commit 6c1a83147c60b999decf12307d2d4313382702ee
Author: Aron Budea <aron.budea at collabora.com>
Date: Mon Jul 10 15:56:32 2017 +0200
tdf#109045: store en calendar separately in OnDemandCalendarWrapper
When working with pivot cache there's alternating use of
locale dependent and locale indepentent formats, which
causes unnecessary loading of calendars due to constant
switching.
OnDemandLocaleDataWrapper already does this, now do
something similar in OnDemandCalendarWrapper.
Reviewed-on: https://gerrit.libreoffice.org/39762
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
Tested-by: Noel Grandin <noel.grandin at collabora.co.uk>
(cherry picked from commit 2a22696546ace75c38a72ad13f7383aedd00e06a)
Change-Id: I3d64dbe8afa929cf416d87678762e82b45561d63
Reviewed-on: https://gerrit.libreoffice.org/39834
Reviewed-by: Eike Rathke <erack at redhat.com>
Reviewed-by: Michael Stahl <mstahl at redhat.com>
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
Tested-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/include/svl/ondemand.hxx b/include/svl/ondemand.hxx
index b48523cd594d..04984086ed8b 100644
--- a/include/svl/ondemand.hxx
+++ b/include/svl/ondemand.hxx
@@ -129,26 +129,30 @@ public:
const LocaleDataWrapper& operator*() const { return *get(); }
};
-/** Load a calendar only if it's needed.
+/** Load a calendar only if it's needed. Keep calendar for "en" locale
+ separately, as there can be alternation between locale dependent and
+ locale independent formats.
SvNumberformatter uses it upon switching locales.
+
@ATTENTION If the default ctor is used the init() method MUST be called
before accessing the calendar.
*/
class OnDemandCalendarWrapper
{
css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ css::lang::Locale aEnglishLocale;
css::lang::Locale aLocale;
- mutable std::unique_ptr<CalendarWrapper>
- pPtr;
- mutable bool bValid;
- bool bInitialized;
+ mutable css::lang::Locale aLastAnyLocale;
+ std::unique_ptr<CalendarWrapper> pEnglishPtr;
+ mutable std::unique_ptr<CalendarWrapper> pAnyPtr;
public:
OnDemandCalendarWrapper()
- : pPtr(nullptr)
- , bValid(false)
- , bInitialized(false)
- {}
+ {
+ LanguageTag aEnglishLanguageTag(LANGUAGE_ENGLISH_US);
+ aEnglishLocale = aEnglishLanguageTag.getLocale();
+ aLastAnyLocale = aEnglishLocale;
+ }
void init(
const css::uno::Reference< css::uno::XComponentContext >& rxContext,
@@ -157,26 +161,39 @@ public:
{
m_xContext = rxContext;
changeLocale( rLocale );
- pPtr.reset();
- bInitialized = true;
+ pEnglishPtr.reset(new CalendarWrapper( m_xContext ));
+ pEnglishPtr->loadDefaultCalendar( aEnglishLocale );
+ pAnyPtr.reset();
}
void changeLocale( const css::lang::Locale& rLocale )
{
- bValid = false;
aLocale = rLocale;
}
CalendarWrapper* get() const
{
- if ( !bValid )
+ CalendarWrapper* pPtr;
+ if ( aLocale == aEnglishLocale )
{
- if ( !pPtr )
- pPtr.reset(new CalendarWrapper( m_xContext ));
- pPtr->loadDefaultCalendar( aLocale );
- bValid = true;
+ pPtr = pEnglishPtr.get();
}
- return pPtr.get();
+ else
+ {
+ if ( !pAnyPtr )
+ {
+ pAnyPtr.reset(new CalendarWrapper( m_xContext ));
+ pAnyPtr->loadDefaultCalendar(aLocale);
+ aLastAnyLocale = aLocale;
+ }
+ else if ( aLocale != aLastAnyLocale )
+ {
+ pAnyPtr->loadDefaultCalendar( aLocale );
+ aLastAnyLocale = aLocale;
+ }
+ pPtr = pAnyPtr.get();
+ }
+ return pPtr;
}
};
More information about the Libreoffice-commits
mailing list