mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Do not use GUI language for shortcut info inset if no translation is available
Fixes: #11508 Now there is the opposite case which needs to be addressed: If no translation is available for a shortcut in a non-latin-scripted document, we need to switch the language to English.
This commit is contained in:
parent
f848183fa8
commit
55c9bc218a
@ -476,7 +476,8 @@ docstring const KeyMap::print(bool forgui) const
|
||||
|
||||
|
||||
docstring KeyMap::printBindings(FuncRequest const & func,
|
||||
KeySequence::outputFormat format) const
|
||||
KeySequence::outputFormat format,
|
||||
bool const untranslated) const
|
||||
{
|
||||
Bindings bindings = findBindings(func);
|
||||
if (bindings.empty())
|
||||
@ -486,10 +487,10 @@ docstring KeyMap::printBindings(FuncRequest const & func,
|
||||
Bindings::const_iterator cit = bindings.begin();
|
||||
Bindings::const_iterator cit_end = bindings.end();
|
||||
// print the first item
|
||||
res << cit->print(format);
|
||||
res << cit->print(format, untranslated);
|
||||
// more than one shortcuts?
|
||||
for (++cit; cit != cit_end; ++cit)
|
||||
res << ", " << cit->print(format);
|
||||
res << ", " << cit->print(format, untranslated);
|
||||
return res.str();
|
||||
}
|
||||
|
||||
|
@ -118,7 +118,8 @@ public:
|
||||
|
||||
/// Given an action, print the keybindings.
|
||||
docstring printBindings(FuncRequest const & func,
|
||||
KeySequence::outputFormat format) const;
|
||||
KeySequence::outputFormat format,
|
||||
bool const untranslated = false) const;
|
||||
|
||||
struct Binding {
|
||||
Binding(FuncRequest const & r, KeySequence const & s, ItemType t)
|
||||
|
@ -133,7 +133,7 @@ size_t KeySequence::parse(string const & s)
|
||||
}
|
||||
|
||||
|
||||
docstring const KeySequence::print(outputFormat format) const
|
||||
docstring const KeySequence::print(outputFormat format, bool const untranslated) const
|
||||
{
|
||||
docstring buf;
|
||||
|
||||
@ -142,10 +142,10 @@ docstring const KeySequence::print(outputFormat format) const
|
||||
for (size_t i = 0; i != length; ++i) {
|
||||
switch (format) {
|
||||
case Portable:
|
||||
buf += sequence[i].print(modifiers[i].first, false);
|
||||
buf += sequence[i].print(modifiers[i].first, false, untranslated);
|
||||
break;
|
||||
case ForGui:
|
||||
buf += sequence[i].print(modifiers[i].first, true);
|
||||
buf += sequence[i].print(modifiers[i].first, true, untranslated);
|
||||
break;
|
||||
case BindFile:
|
||||
KeyModifier mod = modifiers[i].first;
|
||||
|
@ -72,7 +72,7 @@ public:
|
||||
* @param format output format
|
||||
* @see parse()
|
||||
*/
|
||||
docstring const print(outputFormat format) const;
|
||||
docstring const print(outputFormat format, bool const untranslated = false) const;
|
||||
|
||||
/**
|
||||
* Return the current sequence and available options as
|
||||
|
@ -56,7 +56,7 @@ public:
|
||||
* Use the native UI format when \c forgui is true.
|
||||
* i.e. (translated and with special characters for Mac OS X)
|
||||
*/
|
||||
docstring const print(KeyModifier mod, bool forgui) const;
|
||||
docstring const print(KeyModifier mod, bool forgui, bool untranslated = false) const;
|
||||
|
||||
///
|
||||
int key() const { return key_; }
|
||||
|
@ -686,7 +686,7 @@ char_type KeySymbol::getUCSEncoded() const
|
||||
}
|
||||
|
||||
|
||||
docstring const KeySymbol::print(KeyModifier mod, bool forgui) const
|
||||
docstring const KeySymbol::print(KeyModifier mod, bool forgui, bool untranslated) const
|
||||
{
|
||||
int tmpkey = key_;
|
||||
|
||||
@ -703,7 +703,8 @@ docstring const KeySymbol::print(KeyModifier mod, bool forgui) const
|
||||
QString str;
|
||||
|
||||
if (forgui)
|
||||
str = seq.toString(QKeySequence::NativeText);
|
||||
str = untranslated ? seq.toString(QKeySequence::PortableText)
|
||||
: seq.toString(QKeySequence::NativeText);
|
||||
else {
|
||||
#ifdef Q_OS_MAC
|
||||
// Qt/Mac does not use Command and friends in the
|
||||
|
@ -167,6 +167,12 @@ set<string> getTexFileList(string const & filename)
|
||||
// remove duplicates
|
||||
return list;
|
||||
}
|
||||
|
||||
bool translateString(docstring const in, docstring & out, string const lcode)
|
||||
{
|
||||
out = translateIfPossible(in, lcode);
|
||||
return in != out;
|
||||
}
|
||||
} // namespace anon
|
||||
|
||||
|
||||
@ -710,15 +716,21 @@ void InsetInfo::setInfo(string const & name)
|
||||
|
||||
void InsetInfo::error(docstring const & err, Language const * lang)
|
||||
{
|
||||
setText(bformat(translateIfPossible(err, lang->code()), from_utf8(params_.name)),
|
||||
Font(inherit_font, lang), false);
|
||||
docstring const res = translateIfPossible(err, lang->code());
|
||||
bool const translated = res != err;
|
||||
// If the string is not translated, we use default lang (English)
|
||||
Font const f = translated ? Font(inherit_font, lang) : Font(inherit_font);
|
||||
setText(bformat(res, from_utf8(params_.name)), f, false);
|
||||
}
|
||||
|
||||
|
||||
void InsetInfo::info(docstring const & err, Language const * lang)
|
||||
{
|
||||
setText(translateIfPossible(err, lang->code()),
|
||||
Font(inherit_font, lang), false);
|
||||
docstring const res = translateIfPossible(err, lang->code());
|
||||
bool const translated = res != err;
|
||||
// If the string is not translated, we use default lang (English)
|
||||
Font const f = translated ? Font(inherit_font, lang) : Font(inherit_font);
|
||||
setText(translateIfPossible(err, lang->code()), f, false);
|
||||
}
|
||||
|
||||
|
||||
@ -774,84 +786,105 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype) {
|
||||
break;
|
||||
}
|
||||
docstring sequence;
|
||||
if (params_.type == InsetInfoParams::SHORTCUT_INFO)
|
||||
docstring seq_untranslated;
|
||||
if (params_.type == InsetInfoParams::SHORTCUT_INFO) {
|
||||
sequence = bindings.begin()->print(KeySequence::ForGui);
|
||||
else
|
||||
seq_untranslated = bindings.begin()->print(KeySequence::ForGui, true);
|
||||
} else {
|
||||
sequence = theTopLevelKeymap().printBindings(func, KeySequence::ForGui);
|
||||
seq_untranslated = theTopLevelKeymap().printBindings(func, KeySequence::ForGui, true);
|
||||
}
|
||||
// QKeySequence returns special characters for keys on the mac
|
||||
// Since these are not included in many fonts, we
|
||||
// re-translate them to textual names (see #10641)
|
||||
odocstringstream ods;
|
||||
string const lcode = params_.lang->code();
|
||||
docstring trans;
|
||||
bool is_translated = sequence != seq_untranslated;
|
||||
for (size_t n = 0; n < sequence.size(); ++n) {
|
||||
char_type const c = sequence[n];
|
||||
switch(c) {
|
||||
case 0x21b5://Return
|
||||
gui = _("Return[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Return[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Return[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21b9://Tab both directions (Win)
|
||||
gui = _("Tab[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Tab[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Tab[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21de://Qt::Key_PageUp
|
||||
gui = _("PgUp");
|
||||
ods << translateIfPossible(from_ascii("PgUp"), lcode);
|
||||
is_translated = translateString(from_ascii("PgUp"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21df://Qt::Key_PageDown
|
||||
gui = _("PgDown");
|
||||
ods << translateIfPossible(from_ascii("PgDown"), lcode);
|
||||
is_translated = translateString(from_ascii("PgDown"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21e4://Qt::Key_Backtab
|
||||
gui = _("Backtab");
|
||||
ods << translateIfPossible(from_ascii("Backtab"), lcode);
|
||||
is_translated = translateString(from_ascii("Backtab"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21e5://Qt::Key_Tab
|
||||
gui = _("Tab");
|
||||
ods << translateIfPossible(from_ascii("Tab"), lcode);
|
||||
is_translated = translateString(from_ascii("Tab"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21e7://Shift
|
||||
gui = _("Shift");
|
||||
ods << translateIfPossible(from_ascii("Shift"), lcode);
|
||||
is_translated = translateString(from_ascii("Shift"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x21ea://Qt::Key_CapsLock
|
||||
gui = _("CapsLock");
|
||||
ods << translateIfPossible(from_ascii("CapsLock"), lcode);
|
||||
is_translated = translateString(from_ascii("CapsLock"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x2303://Control
|
||||
gui = _("Control[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Control[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Control[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x2318://CMD
|
||||
gui = _("Command[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Command[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Command[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x2324://Qt::Key_Enter
|
||||
gui = _("Return[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Return[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Return[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x2325://Option key
|
||||
gui = _("Option[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Option[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Option[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x2326://Qt::Key_Delete
|
||||
gui = _("Delete[[Key]]");
|
||||
ods << translateIfPossible(from_ascii("Delete[[Key]]"), lcode);
|
||||
is_translated = translateString(from_ascii("Delete[[Key]]"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x232b://Qt::Key_Backspace
|
||||
gui = _("Fn+Del");
|
||||
ods << translateIfPossible(from_ascii("Fn+Delete"), lcode);
|
||||
is_translated = translateString(from_ascii("Fn+Del"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
case 0x238b://Qt::Key_Escape
|
||||
gui = _("Esc");
|
||||
ods << translateIfPossible(from_ascii("Esc"), lcode);
|
||||
is_translated = translateString(from_ascii("Esc"), trans, lcode);
|
||||
ods << trans;
|
||||
break;
|
||||
default:
|
||||
ods.put(c);
|
||||
}
|
||||
}
|
||||
setText(ods.str(), guilang);
|
||||
params_.force_ltr = !guilang->rightToLeft() && !params_.lang->rightToLeft();
|
||||
setText(ods.str(), is_translated ? guilang : nullptr);
|
||||
params_.force_ltr = !is_translated || (!guilang->rightToLeft() && !params_.lang->rightToLeft());
|
||||
break;
|
||||
}
|
||||
case InsetInfoParams::LYXRC_INFO: {
|
||||
|
Loading…
Reference in New Issue
Block a user