X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetInfo.cpp;h=65ce972af305a88ec083e5a5b79332aa66456195;hb=b9116e8b81f55ee795ea444ee02ff921bf82606a;hp=a54be67fcf76eaf402cf4ced435c441ebc423eea;hpb=a59301eaff51c63db706e17bd5496b8e02928f14;p=lyx.git diff --git a/src/insets/InsetInfo.cpp b/src/insets/InsetInfo.cpp index a54be67fcf..65ce972af3 100644 --- a/src/insets/InsetInfo.cpp +++ b/src/insets/InsetInfo.cpp @@ -21,6 +21,7 @@ #include "InsetSpecialChar.h" #include "KeyMap.h" #include "LaTeXFeatures.h" +#include "Language.h" #include "LayoutFile.h" #include "Length.h" #include "LyXAction.h" @@ -92,7 +93,8 @@ NameTranslator const & nameTranslator() InsetInfo::InsetInfo(Buffer * buf, string const & name) - : InsetCollapsible(buf), type_(UNKNOWN_INFO), name_() + : InsetCollapsible(buf), type_(UNKNOWN_INFO), name_(), + force_ltr_(false) { setInfo(name); status_ = Collapsed; @@ -295,10 +297,17 @@ void InsetInfo::setText(docstring const & str) } +bool InsetInfo::forceLTR() const +{ + return !buffer().params().language->rightToLeft() || force_ltr_; +} + + void InsetInfo::updateInfo() { BufferParams const & bp = buffer().params(); + force_ltr_ = false; switch (type_) { case UNKNOWN_INFO: error("Unknown Info: %1$s"); @@ -316,10 +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)); + 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: {