commit 2ae51a9bb96036c10b9f8bc43a34116c259842f3
Author: Juergen Spitzmueller <[email protected]>
Date:   Fri Jan 12 10:44:01 2018 +0100

    Complement the movement handling of environments
    
    Make sure moved environments (such as frames) are separated from their
    new neighbours in all directions.
    
    This completes 07665d1dca95b4
---
 src/Text3.cpp |   39 +++++++++++++++++++++++++++++++++++----
 1 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/Text3.cpp b/src/Text3.cpp
index 7a939ed..7aa10a6 100644
--- a/src/Text3.cpp
+++ b/src/Text3.cpp
@@ -422,7 +422,8 @@ static void outline(OutlineOp mode, Cursor & cur)
                                cur.pos() = 0;
                                
lyx::dispatch(FuncRequest(LFUN_PARAGRAPH_BREAK));
                                DocumentClass const & tc = 
buf.params().documentClass();
-                               lyx::dispatch(FuncRequest(LFUN_LAYOUT, 
tc.plainLayout().name()));
+                               lyx::dispatch(FuncRequest(LFUN_LAYOUT, 
from_ascii("\"") + tc.plainLayout().name()
+                                                         + from_ascii("\" 
ignoreautonests")));
                                
lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "plain"));
                                ++finish;
                                cur.pit() = pit;
@@ -449,6 +450,23 @@ static void outline(OutlineOp mode, Cursor & cur)
                                        break;
                        }
                        // One such was found:
+                       // If we move an environment downwards, make sure it is
+                       // separated from its new neighbour below.
+                       ParagraphList::iterator lastmoved = finish;
+                       --lastmoved;
+                       if (start->layout().isEnvironment()
+                               && dest->layout() == start->layout()
+                               && 
!lastmoved->isEnvSeparator(lastmoved->beginOfBody())) {
+                               cur.pit() = distance(bgn, finish);
+                               cur.pos() = 0;
+                               
lyx::dispatch(FuncRequest(LFUN_PARAGRAPH_BREAK));
+                               DocumentClass const & tc = 
buf.params().documentClass();
+                               lyx::dispatch(FuncRequest(LFUN_LAYOUT, 
from_ascii("\"") + tc.plainLayout().name()
+                                                         + from_ascii("\" 
ignoreautonests")));
+                               
lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "plain"));
+                               ++finish;
+                               cur.pit() = pit;
+                       }
                        pit_type newpit = distance(bgn, dest);
                        buf.undo().recordUndo(cur, pit, newpit - 1);
                        pit_type const len = distance(start, finish);
@@ -2565,18 +2583,31 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                }
                break;
 
-       case LFUN_OUTLINE_UP:
+       case LFUN_OUTLINE_UP: {
                outline(OutlineUp, cur);
                setCursor(cur, cur.pit(), 0);
+               // If we moved an environment upwards, make sure it is
+               // separated from its new neighbour above.
+               pit_type pit = cur.pit();
+               if (pit > 0 && pars_[pit].layout().isEnvironment()
+                       && pars_[pit - 1].layout() == pars_[pit].layout()) {
+                       lyx::dispatch(FuncRequest(LFUN_PARAGRAPH_BREAK));
+                       DocumentClass const & tc = 
bv->buffer().params().documentClass();
+                       lyx::dispatch(FuncRequest(LFUN_LAYOUT, from_ascii("\"") 
+ tc.plainLayout().name()
+                                                 + from_ascii("\" 
ignoreautonests")));
+                       lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, 
"plain"));
+                       setCursor(cur, pit + 1, 0);
+               }
                cur.forceBufferUpdate();
                needsUpdate = true;
                break;
+       }
 
        case LFUN_OUTLINE_DOWN: {
                outline(OutlineDown, cur);
                setCursor(cur, cur.pit(), 0);
-               // If we move an environment, make sure it is separated
-               // from its new neighbour above.
+               // If we moved an environment downwards, make sure it is
+               // separated from its new neighbour above.
                pit_type pit = cur.pit();
                if (pit > 0 && pars_[pit].layout().isEnvironment()
                        && pars_[pit - 1].layout() == pars_[pit].layout()) {

Reply via email to