35 lines
682 B
C++
35 lines
682 B
C++
|
#include <cstring>
|
||
|
#include <locale.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#include "pbd/localeguard.h"
|
||
|
|
||
|
// JE - added temporarily, to reduce the delay effects when calling
|
||
|
// setlocale() recursively in a Windows GUI thread (we should think
|
||
|
// about moving the caller(s) into a dedicated worker thread).
|
||
|
std::string PBD::LocaleGuard::current;
|
||
|
|
||
|
PBD::LocaleGuard::LocaleGuard (const char* str)
|
||
|
: old(0)
|
||
|
{
|
||
|
if (current != str) {
|
||
|
old = strdup (setlocale (LC_NUMERIC, NULL));
|
||
|
if (strcmp (old, str)) {
|
||
|
if (setlocale (LC_NUMERIC, str))
|
||
|
current = str;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
PBD::LocaleGuard::~LocaleGuard ()
|
||
|
{
|
||
|
if (old) {
|
||
|
if (setlocale (LC_NUMERIC, old))
|
||
|
current = old;
|
||
|
|
||
|
free ((char*)old);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|