diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 7acf5ffbbb..f4241181c2 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -35,6 +35,7 @@ #include "TextClass.h" #include "VSpace.h" +#include "insets/InsetSeparator.h" #include "insets/InsetText.h" #include "mathed/MacroTable.h" @@ -1792,11 +1793,13 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type const pos) const } } - // This happens after sections or environments in standard classes. - // We have to check the previous layout at same depth. + // Check for reasons to remove indentation. + // First, at document level. if (buffer.params().paragraph_separation == BufferParams::ParagraphSkipSeparation) parindent.erase(); + // This happens after sections or environments in standard classes. + // We have to check the previous layout at same depth. else if (pit > 0 && pars[pit - 1].getDepth() >= par.getDepth()) { pit_type prev = text_->depthHook(pit, par.getDepth()); if (par.layout() == pars[prev].layout()) { @@ -1806,6 +1809,15 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type const pos) const } else if (pars[prev].layout().nextnoindent) parindent.erase(); } + // The previous paragraph may have ended with a separator inset. + if (pit > 0) { + Paragraph const & ppar = pars[pit - 1]; + if (ppar.size() > 0) { + auto * in = dynamic_cast(ppar.getInset(ppar.size() - 1)); + if (in != nullptr && in->nextnoindent()) + parindent.erase(); + } + } FontInfo const labelfont = text_->labelFont(par); FontMetrics const & lfm = theFontMetrics(labelfont); diff --git a/src/insets/InsetSeparator.h b/src/insets/InsetSeparator.h index 0c12d95686..b824214ae7 100644 --- a/src/insets/InsetSeparator.h +++ b/src/insets/InsetSeparator.h @@ -66,6 +66,8 @@ public: } /// int rowFlags() const override { return BreakAfter | Flush; } + /// + bool nextnoindent() const { return params_.kind == InsetSeparatorParams::PLAIN; } private: /// InsetCode lyxCode() const override { return SEPARATOR_CODE; }