commit f24bb4a91980a17c00c12ec0bbb457e0f182215f
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Thu Mar 16 10:25:00 2023 +0100

    Remove indentation on screen after a plain separator inset
    
    Fixes bug #12700.
---
 src/TextMetrics.cpp         |   16 ++++++++++++++--
 src/insets/InsetSeparator.h |    2 ++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 7acf5ff..f424118 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<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);
diff --git a/src/insets/InsetSeparator.h b/src/insets/InsetSeparator.h
index 0c12d95..b824214 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; }
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to