summaryrefslogtreecommitdiff
path: root/comphelper/source/misc/lok.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'comphelper/source/misc/lok.cxx')
-rw-r--r--comphelper/source/misc/lok.cxx63
1 files changed, 47 insertions, 16 deletions
diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx
index 82e5c7aed4f9..c042b0c626e5 100644
--- a/comphelper/source/misc/lok.cxx
+++ b/comphelper/source/misc/lok.cxx
@@ -8,6 +8,7 @@
*/
#include <comphelper/lok.hxx>
+#include <osl/process.h>
#include <i18nlangtag/languagetag.hxx>
#include <sal/log.hxx>
@@ -18,6 +19,8 @@ namespace comphelper::LibreOfficeKit
static bool g_bActive(false);
+static bool g_bForkedChild(false);
+
static bool g_bPartInInvalidation(false);
static bool g_bTiledPainting(false);
@@ -73,7 +76,7 @@ public:
{
if (maLocaleLanguageTag != rLocaleLanguageTag)
{
- SAL_INFO("comphelper.lok", "Setting locale from " << maLanguageTag.getBcp47() << " to " << rLocaleLanguageTag.getBcp47());
+ SAL_INFO("comphelper.lok", "Setting locale from " << maLocaleLanguageTag.getBcp47() << " to " << rLocaleLanguageTag.getBcp47());
maLocaleLanguageTag = rLocaleLanguageTag;
}
}
@@ -97,6 +100,16 @@ bool isActive()
return g_bActive;
}
+void setForkedChild(bool bIsChild)
+{
+ g_bForkedChild = bIsChild;
+}
+
+bool isForkedChild()
+{
+ return g_bForkedChild;
+}
+
void setPartInInvalidation(bool bPartInInvalidation)
{
g_bPartInInvalidation = bPartInInvalidation;
@@ -181,6 +194,8 @@ void setCompatFlag(Compat flag) { g_eCompatFlags = static_cast<Compat>(g_eCompat
bool isCompatFlagSet(Compat flag) { return (g_eCompatFlags & flag) == flag; }
+void resetCompatFlag() { g_eCompatFlags = Compat::none; }
+
void setLocale(const LanguageTag& rLanguageTag)
{
g_aLanguageAndLocale.setLocale(rLanguageTag);
@@ -210,14 +225,12 @@ bool isAllowlistedLanguage(const OUString& lang)
if (!isActive())
return true;
-#ifdef ANDROID
+#if defined ANDROID || defined IOS
(void) lang;
return true;
#else
- static bool bInitialized = false;
- static std::vector<OUString> aAllowlist;
- if (!bInitialized)
- {
+ static const std::vector<OUString> aAllowlist = [] {
+ std::vector<OUString> aList;
// coverity[tainted_data] - we trust the contents of this variable
const char* pAllowlist = getenv("LOK_ALLOWLIST_LANGUAGES");
if (pAllowlist)
@@ -231,16 +244,16 @@ bool isAllowlistedLanguage(const OUString& lang)
continue;
std::cerr << s << " ";
- aAllowlist.emplace_back(OStringToOUString(s.c_str(), RTL_TEXTENCODING_UTF8));
+ aList.emplace_back(OStringToOUString(s, RTL_TEXTENCODING_UTF8));
}
std::cerr << std::endl;
}
- if (aAllowlist.empty())
+ if (aList.empty())
std::cerr << "No language allowlisted, turning off the language support." << std::endl;
- bInitialized = true;
- }
+ return aList;
+ }();
if (aAllowlist.empty())
return false;
@@ -257,31 +270,49 @@ bool isAllowlistedLanguage(const OUString& lang)
#endif
}
-static void (*pStatusIndicatorCallback)(void *data, statusIndicatorCallbackType type, int percent)(nullptr);
+void setTimezone(bool isSet, const OUString& rTimezone)
+{
+ if (isSet)
+ {
+ // Set the given timezone, even if empty.
+ osl_setEnvironment(OUString("TZ").pData, rTimezone.pData);
+ }
+ else
+ {
+ // Unset and empty aren't the same.
+ // When unset, it means default to the system configured timezone.
+ osl_clearEnvironment(OUString("TZ").pData);
+ }
+
+ // Update the timezone data.
+ ::tzset();
+}
+
+static void (*pStatusIndicatorCallback)(void *data, statusIndicatorCallbackType type, int percent, const char* pText)(nullptr);
static void *pStatusIndicatorCallbackData(nullptr);
-void setStatusIndicatorCallback(void (*callback)(void *data, statusIndicatorCallbackType type, int percent), void *data)
+void setStatusIndicatorCallback(void (*callback)(void *data, statusIndicatorCallbackType type, int percent, const char* pText), void *data)
{
pStatusIndicatorCallback = callback;
pStatusIndicatorCallbackData = data;
}
-void statusIndicatorStart()
+void statusIndicatorStart(const OUString& sText)
{
if (pStatusIndicatorCallback)
- pStatusIndicatorCallback(pStatusIndicatorCallbackData, statusIndicatorCallbackType::Start, 0);
+ pStatusIndicatorCallback(pStatusIndicatorCallbackData, statusIndicatorCallbackType::Start, 0, sText.toUtf8().getStr());
}
void statusIndicatorSetValue(int percent)
{
if (pStatusIndicatorCallback)
- pStatusIndicatorCallback(pStatusIndicatorCallbackData, statusIndicatorCallbackType::SetValue, percent);
+ pStatusIndicatorCallback(pStatusIndicatorCallbackData, statusIndicatorCallbackType::SetValue, percent, nullptr);
}
void statusIndicatorFinish()
{
if (pStatusIndicatorCallback)
- pStatusIndicatorCallback(pStatusIndicatorCallbackData, statusIndicatorCallbackType::Finish, 0);
+ pStatusIndicatorCallback(pStatusIndicatorCallbackData, statusIndicatorCallbackType::Finish, 0, nullptr);
}
} // namespace