From 9b03b40731cf8ef3a0ab10f6ca071b5743946d05 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Thu, 9 Aug 2018 16:56:41 +0200 Subject: [PATCH] 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 (cherry picked from commit 5f45b3ed9c851f0d01fcc8fd17c3b25f6efd47c3) --- src/insets/InsetInfo.cpp | 77 ++++++++++++++++++++++++++++++++++++++-- status.23x | 2 ++ 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/src/insets/InsetInfo.cpp b/src/insets/InsetInfo.cpp index 3205cc11d4..65ce972af3 100644 --- a/src/insets/InsetInfo.cpp +++ b/src/insets/InsetInfo.cpp @@ -325,11 +325,82 @@ void InsetInfo::updateInfo() setText(_("undefined")); break; } + docstring sequence; if (type_ == SHORTCUT_INFO) - setText(bindings.begin()->print(KeySequence::Portable)); + sequence = bindings.begin()->print(KeySequence::ForGui); else - setText(theTopLevelKeymap().printBindings(func, KeySequence::Portable)); - force_ltr_ = true; + 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; + docstring gui; + string const lcode = bp.language->code(); + 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); + break; + case 0x21b9://Tab both directions (Win) + gui = _("Tab[[Key]]"); + ods << translateIfPossible(from_ascii("Tab[[Key]]"), lcode); + break; + case 0x21de://Qt::Key_PageUp + gui = _("PgUp"); + ods << translateIfPossible(from_ascii("PgUp"), lcode); + break; + case 0x21df://Qt::Key_PageDown + gui = _("PgDown"); + ods << translateIfPossible(from_ascii("PgDown"), lcode); + break; + case 0x21e4://Qt::Key_Backtab + gui = _("Backtab"); + ods << translateIfPossible(from_ascii("Backtab"), lcode); + break; + case 0x21e5://Qt::Key_Tab + gui = _("Tab"); + ods << translateIfPossible(from_ascii("Tab"), lcode); + break; + case 0x21e7://Shift + gui = _("Shift"); + ods << translateIfPossible(from_ascii("Shift"), lcode); + break; + case 0x21ea://Qt::Key_CapsLock + gui = _("CapsLock"); + ods << translateIfPossible(from_ascii("CapsLock"), lcode); + break; + case 0x2318://CMD + gui = _("Command[[Key]]"); + ods << translateIfPossible(from_ascii("Command[[Key]]"), lcode); + break; + case 0x2324://Qt::Key_Enter + gui = _("Return[[Key]]"); + ods << translateIfPossible(from_ascii("Return[[Key]]"), lcode); + break; + case 0x2325://Option key + gui = _("Option[[Key]]"); + ods << translateIfPossible(from_ascii("Option[[Key]]"), lcode); + break; + case 0x2326://Qt::Key_Delete + gui = _("Delete[[Key]]"); + ods << translateIfPossible(from_ascii("Delete[[Key]]"), lcode); + break; + case 0x232b://Qt::Key_Backspace + gui = _("Fn+Del"); + ods << translateIfPossible(from_ascii("Fn+Delete"), lcode); + break; + case 0x238b://Qt::Key_Escape + gui = _("Esc"); + ods << translateIfPossible(from_ascii("Esc"), lcode); + break; + default: + ods.put(c); + } + } + setText(ods.str()); + force_ltr_ = !bp.language->rightToLeft(); break; } case LYXRC_INFO: { diff --git a/status.23x b/status.23x index 5c50882aee..9bdc5132ec 100644 --- a/status.23x +++ b/status.23x @@ -81,6 +81,8 @@ What's new - Fix text direction issue in info insets with RTL context (bug 10463). +- Fix output of key symbols with info inset on the Mac (bug 10641). + * USER INTERFACE -- 2.39.5