mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-14 12:25:11 +00:00
Handle movement of environments better
Make sure moved environments (such as frames) are separated from their new neighbours.
This commit is contained in:
parent
fcc1cffb1a
commit
07665d1dca
@ -411,6 +411,22 @@ static void outline(OutlineOp mode, Cursor & cur)
|
|||||||
// Not found; do nothing
|
// Not found; do nothing
|
||||||
if (toclevel == Layout::NOT_IN_TOC || toclevel > thistoclevel)
|
if (toclevel == Layout::NOT_IN_TOC || toclevel > thistoclevel)
|
||||||
return;
|
return;
|
||||||
|
// If we move an environment upwards, 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, tc.plainLayout().name()));
|
||||||
|
lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "plain"));
|
||||||
|
++finish;
|
||||||
|
cur.pit() = pit;
|
||||||
|
}
|
||||||
pit_type const newpit = distance(bgn, dest);
|
pit_type const newpit = distance(bgn, dest);
|
||||||
pit_type const len = distance(start, finish);
|
pit_type const len = distance(start, finish);
|
||||||
pit_type const deletepit = pit + len;
|
pit_type const deletepit = pit + len;
|
||||||
@ -2556,12 +2572,24 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
|||||||
needsUpdate = true;
|
needsUpdate = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LFUN_OUTLINE_DOWN:
|
case LFUN_OUTLINE_DOWN: {
|
||||||
outline(OutlineDown, cur);
|
outline(OutlineDown, cur);
|
||||||
setCursor(cur, cur.pit(), 0);
|
setCursor(cur, cur.pit(), 0);
|
||||||
|
// If we move an environment, 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, tc.plainLayout().name()));
|
||||||
|
lyx::dispatch(FuncRequest(LFUN_SEPARATOR_INSERT, "plain"));
|
||||||
|
setCursor(cur, pit + 1, 0);
|
||||||
|
}
|
||||||
cur.forceBufferUpdate();
|
cur.forceBufferUpdate();
|
||||||
needsUpdate = true;
|
needsUpdate = true;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case LFUN_OUTLINE_IN:
|
case LFUN_OUTLINE_IN:
|
||||||
outline(OutlineIn, cur);
|
outline(OutlineIn, cur);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user