Remove indentation on screen after a plain separator inset

Fixes bug #12700.
This commit is contained in:
Jean-Marc Lasgouttes 2023-03-16 10:25:00 +01:00
parent 5ad6cbb1d8
commit f24bb4a919
2 changed files with 16 additions and 2 deletions

View File

@ -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<InsetSeparator const *>(ppar.getInset(ppar.size() - 1));
if (in != nullptr && in->nextnoindent())
parindent.erase();
}
}
FontInfo const labelfont = text_->labelFont(par);
FontMetrics const & lfm = theFontMetrics(labelfont);

View File

@ -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; }