From: Juergen Spitzmueller Date: Fri, 15 Sep 2017 14:21:05 +0000 (+0200) Subject: Reset InsetArgument language after passthru status change X-Git-Tag: lyx-2.4.0dev-acb2ca7b~4545 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=a7b017fd2f1fcc307fa7fc59f0bd47a8160989e4;p=features.git Reset InsetArgument language after passthru status change Fixes: #10664 (cherry picked from commit d8c018b8c691f6bc3ebbb5f78bffc0b3f87c228f) --- diff --git a/src/insets/InsetArgument.cpp b/src/insets/InsetArgument.cpp index e22bcdeb4e..5e51f42044 100644 --- a/src/insets/InsetArgument.cpp +++ b/src/insets/InsetArgument.cpp @@ -68,6 +68,8 @@ void InsetArgument::updateBuffer(ParIterator const & it, UpdateType utype) it.inset().getLayout().args() : it.paragraph().layout().args(); pass_thru_context_ = insetlayout ? it.inset().getLayout().isPassThru() : it.paragraph().layout().pass_thru; + // Record PassThru status in order to act on changes. + bool const former_pass_thru = pass_thru_; // Handle pre 2.1 ArgInsets (lyx2lyx cannot classify them) if (name_ == "999") { @@ -139,6 +141,16 @@ void InsetArgument::updateBuffer(ParIterator const & it, UpdateType utype) labelstring_ = _("Unknown Argument"); tooltip_ = _("Argument not known in this Layout. Will be supressed in the output."); } + + if (former_pass_thru != pass_thru_) { + // PassThru status changed. We might need to update + // the language of the contents + Language const * l = insetlayout + ? it.inset().buffer().language() + : it.buffer()->language(); + fixParagraphLanguage(l); + } + setButtonLabel(); InsetCollapsable::updateBuffer(it, utype); } @@ -187,8 +199,13 @@ void InsetArgument::doDispatch(Cursor & cur, FuncRequest & cmd) // forcing to latex_language in InsetText::dispatch(), // since this does not play nicely with inherited pass_thru // (see #8471). - if (pass_thru_ && !pass_thru_local_) + if (pass_thru_ && !pass_thru_local_) { text().dispatch(cur, cmd); + // For the paste operations, check if we have + // non-latex_language, and if so, fix. + if (cmd.action() != LFUN_SELF_INSERT) + fixParagraphLanguage(buffer().params().language); + } else InsetCollapsable::doDispatch(cur, cmd); break; @@ -322,4 +339,13 @@ void InsetArgument::addToToc(DocIterator const & dit, bool output_active, } +void InsetArgument::fixParagraphLanguage(Language const * l) +{ + Font font(inherit_font, l); + if (pass_thru_) + font.setLanguage(latex_language); + paragraphs().front().resetFonts(font); +} + + } // namespace lyx diff --git a/src/insets/InsetArgument.h b/src/insets/InsetArgument.h index cbd03375e0..86de5b1ca1 100644 --- a/src/insets/InsetArgument.h +++ b/src/insets/InsetArgument.h @@ -92,6 +92,8 @@ private: /// docstring toolTip(BufferView const & bv, int, int) const; /// + void fixParagraphLanguage(Language const *); + /// std::string name_; /// docstring labelstring_;