commit 17275458d9b9e2904b42d95cf6fe4fcbc9960297
Author: Georg Baum <[email protected]>
Date: Mon Jul 7 22:22:25 2014 +0200
Fix uncodable author warning
The old code was not threadsafe, and the restriction to one message box per
author name did not work if more than two authors were uncodable.
diff --git a/src/Changes.cpp b/src/Changes.cpp
index 85cbad6..d289890 100644
--- a/src/Changes.cpp
+++ b/src/Changes.cpp
@@ -27,6 +27,7 @@
#include "support/gettext.h"
#include "support/lassert.h"
#include "support/lstrings.h"
+#include "support/mutex.h"
#include "frontends/alert.h"
@@ -348,8 +349,7 @@ docstring getLaTeXMarkup(docstring const & macro, docstring
const & author,
if (macro.empty())
return docstring();
- static docstring warned_author = docstring();
- docstring uncodable_author = warned_author;
+ docstring uncodable_author;
odocstringstream ods;
ods << macro;
@@ -366,8 +366,12 @@ docstring getLaTeXMarkup(docstring const & macro,
docstring const & author,
ods << author_latexed.first << "}{" << chgTime << "}{";
// warn user (once) if we found uncodable glyphs.
- if (uncodable_author != warned_author) {
- frontend::Alert::warning(_("Uncodable character in author
name"),
+ if (!uncodable_author.empty()) {
+ static std::set<docstring> warned_authors;
+ static Mutex warned_mutex;
+ Mutex::Locker locker(&warned_mutex);
+ if (warned_authors.find(uncodable_author) ==
warned_authors.end()) {
+ frontend::Alert::warning(_("Uncodable character in
author name"),
support::bformat(_("The author name '%1$s',\n"
"used for change tracking, contains the
following glyphs that\n"
"cannot be represented in the current
encoding: %2$s.\n"
@@ -375,7 +379,8 @@ docstring getLaTeXMarkup(docstring const & macro, docstring
const & author,
"Choose an appropriate document encoding
(such as utf8)\n"
"or change the spelling of the author name."),
uncodable_author, author_latexed.second));
- warned_author = uncodable_author;
+ warned_authors.insert(uncodable_author);
+ }
}
return ods.str();