Fix shortcuts info output on the Mac

QKeySequence returns special characters for keys on the mac rather than
textual key names (as on other OSes).

Since these symbols are not included in many fonts, we re-translate them
to textual names

Fixes: #10641
This commit is contained in:
Juergen Spitzmueller 2018-08-09 16:56:41 +02:00
parent fd7490762d
commit 5f45b3ed9c

View File

@ -747,10 +747,79 @@ void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype) {
info(from_ascii("undefined"), params_.lang); info(from_ascii("undefined"), params_.lang);
break; break;
} }
docstring sequence;
if (params_.type == InsetInfoParams::SHORTCUT_INFO) if (params_.type == InsetInfoParams::SHORTCUT_INFO)
setText(bindings.begin()->print(KeySequence::ForGui), guilang); sequence = bindings.begin()->print(KeySequence::ForGui);
else else
setText(theTopLevelKeymap().printBindings(func, KeySequence::ForGui), guilang); sequence = theTopLevelKeymap().printBindings(func, KeySequence::ForGui);
// 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;
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]]"), params_.lang->code());
break;
case 0x21b9://Tab both directions (Win)
gui = _("Tab[[Key]]");
ods << translateIfPossible(from_ascii("Tab[[Key]]"), params_.lang->code());
break;
case 0x21de://Qt::Key_PageUp
gui = _("PgUp");
ods << translateIfPossible(from_ascii("PgUp"), params_.lang->code());
break;
case 0x21df://Qt::Key_PageDown
gui = _("PgDown");
ods << translateIfPossible(from_ascii("PgDown"), params_.lang->code());
break;
case 0x21e4://Qt::Key_Backtab
gui = _("Backtab");
ods << translateIfPossible(from_ascii("Backtab"), params_.lang->code());
break;
case 0x21e5://Qt::Key_Tab
gui = _("Tab");
ods << translateIfPossible(from_ascii("Tab"), params_.lang->code());
break;
case 0x21e7://Shift
gui = _("Shift");
ods << translateIfPossible(from_ascii("Shift"), params_.lang->code());
break;
case 0x21ea://Qt::Key_CapsLock
gui = _("CapsLock");
ods << translateIfPossible(from_ascii("CapsLock"), params_.lang->code());
break;
case 0x2318://CMD
gui = _("Command[[Key]]");
ods << translateIfPossible(from_ascii("Command[[Key]]"), params_.lang->code());
break;
case 0x2324://Qt::Key_Enter
gui = _("Return[[Key]]");
ods << translateIfPossible(from_ascii("Return[[Key]]"), params_.lang->code());
break;
case 0x2325://Option key
gui = _("Option[[Key]]");
ods << translateIfPossible(from_ascii("Option[[Key]]"), params_.lang->code());
break;
case 0x2326://Qt::Key_Delete
gui = _("Delete[[Key]]");
ods << translateIfPossible(from_ascii("Delete[[Key]]"), params_.lang->code());
break;
case 0x232b://Qt::Key_Backspace
gui = _("Fn+Del");
ods << translateIfPossible(from_ascii("Fn+Delete"), params_.lang->code());
break;
case 0x238b://Qt::Key_Escape
gui = _("Esc");
ods << translateIfPossible(from_ascii("Esc"), params_.lang->code());
break;
default:
ods.put(c);
}
}
setText(ods.str(), guilang);
params_.force_ltr = !guilang->rightToLeft() && !params_.lang->rightToLeft(); params_.force_ltr = !guilang->rightToLeft() && !params_.lang->rightToLeft();
break; break;
} }