Reset InsetArgument language after passthru status change

Fixes: #10664
This commit is contained in:
Juergen Spitzmueller 2017-09-15 16:21:05 +02:00
parent 166054126e
commit d8c018b8c6
2 changed files with 29 additions and 1 deletions

View File

@ -68,6 +68,8 @@ void InsetArgument::updateBuffer(ParIterator const & it, UpdateType utype)
it.inset().getLayout().args() : it.paragraph().layout().args(); it.inset().getLayout().args() : it.paragraph().layout().args();
pass_thru_context_ = insetlayout ? pass_thru_context_ = insetlayout ?
it.inset().getLayout().isPassThru() : it.paragraph().layout().pass_thru; 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) // Handle pre 2.1 ArgInsets (lyx2lyx cannot classify them)
if (name_ == "999") { if (name_ == "999") {
@ -139,6 +141,16 @@ void InsetArgument::updateBuffer(ParIterator const & it, UpdateType utype)
labelstring_ = _("Unknown Argument"); labelstring_ = _("Unknown Argument");
tooltip_ = _("Argument not known in this Layout. Will be supressed in the output."); 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(); setButtonLabel();
InsetCollapsable::updateBuffer(it, utype); InsetCollapsable::updateBuffer(it, utype);
} }
@ -187,8 +199,13 @@ void InsetArgument::doDispatch(Cursor & cur, FuncRequest & cmd)
// forcing to latex_language in InsetText::dispatch(), // forcing to latex_language in InsetText::dispatch(),
// since this does not play nicely with inherited pass_thru // since this does not play nicely with inherited pass_thru
// (see #8471). // (see #8471).
if (pass_thru_ && !pass_thru_local_) if (pass_thru_ && !pass_thru_local_) {
text().dispatch(cur, cmd); 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 else
InsetCollapsable::doDispatch(cur, cmd); InsetCollapsable::doDispatch(cur, cmd);
break; 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 } // namespace lyx

View File

@ -92,6 +92,8 @@ private:
/// ///
docstring toolTip(BufferView const & bv, int, int) const; docstring toolTip(BufferView const & bv, int, int) const;
/// ///
void fixParagraphLanguage(Language const *);
///
std::string name_; std::string name_;
/// ///
docstring labelstring_; docstring labelstring_;