mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-27 06:19:36 +00:00
Updates to splitting of consecutive environments.
From Enrico. (cherry picked from commit ee82dd604010d4c1bf250640a3df6d790ea08380)
This commit is contained in:
parent
24dfca3e2a
commit
74dd33e385
@ -2203,9 +2203,14 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
|
|||||||
// inset (depending on cmd.x(), cmd.y()). This is needed for
|
// inset (depending on cmd.x(), cmd.y()). This is needed for
|
||||||
// editing to fix bug 9628, but e.g. the context menu needs a
|
// editing to fix bug 9628, but e.g. the context menu needs a
|
||||||
// cursor in front of the inset.
|
// cursor in front of the inset.
|
||||||
if ((inset->hasSettings() || !inset->contextMenuName().empty()) &&
|
if ((inset->hasSettings() || !inset->contextMenuName().empty()
|
||||||
|
|| inset->lyxCode() == SEPARATOR_CODE) &&
|
||||||
cur.nextInset() != inset && cur.prevInset() == inset)
|
cur.nextInset() != inset && cur.prevInset() == inset)
|
||||||
cur.posBackward();
|
cur.posBackward();
|
||||||
|
} else if (cur.inTexted() && cur.pos()
|
||||||
|
&& cur.paragraph().isEnvSeparator(cur.pos() - 1)) {
|
||||||
|
// Always place cursor in front of a separator inset.
|
||||||
|
cur.posBackward();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put anchor at the same position.
|
// Put anchor at the same position.
|
||||||
@ -2512,12 +2517,8 @@ bool BufferView::mouseSetCursor(Cursor & cur, bool select)
|
|||||||
// FIXME: (2) if we had a working InsetText::notifyCursorLeaves,
|
// FIXME: (2) if we had a working InsetText::notifyCursorLeaves,
|
||||||
// the leftinset bool would not be necessary (badcursor instead).
|
// the leftinset bool would not be necessary (badcursor instead).
|
||||||
bool update = leftinset;
|
bool update = leftinset;
|
||||||
if (!do_selection && d->cursor_.inTexted()) {
|
if (!do_selection && d->cursor_.inTexted())
|
||||||
update |= checkDepm(cur, d->cursor_);
|
update |= checkDepm(cur, d->cursor_);
|
||||||
if (cur.inTexted() && cur.pos()
|
|
||||||
&& cur.paragraph().isEnvSeparator(cur.pos() - 1))
|
|
||||||
cur.posBackward();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!do_selection)
|
if (!do_selection)
|
||||||
d->cursor_.resetAnchor();
|
d->cursor_.resetAnchor();
|
||||||
|
@ -66,8 +66,7 @@ double Row::Element::pos2x(pos_type const i) const
|
|||||||
|
|
||||||
double w = 0;
|
double w = 0;
|
||||||
//handle first the two bounds of the element
|
//handle first the two bounds of the element
|
||||||
if (i == endpos && type != VIRTUAL
|
if (i == endpos && type != VIRTUAL)
|
||||||
&& !(inset && inset->lyxCode() == SEPARATOR_CODE))
|
|
||||||
w = isRTL() ? 0 : full_width();
|
w = isRTL() ? 0 : full_width();
|
||||||
else if (i == pos || type != STRING)
|
else if (i == pos || type != STRING)
|
||||||
w = isRTL() ? full_width() : 0;
|
w = isRTL() ? full_width() : 0;
|
||||||
|
16
src/Text.cpp
16
src/Text.cpp
@ -1110,7 +1110,7 @@ bool Text::cursorForwardOneWord(Cursor & cur)
|
|||||||
Paragraph const & par = cur.paragraph();
|
Paragraph const & par = cur.paragraph();
|
||||||
|
|
||||||
// Paragraph boundary is a word boundary
|
// Paragraph boundary is a word boundary
|
||||||
if (pos == lastpos) {
|
if (pos == lastpos || (pos + 1 == lastpos && par.isEnvSeparator(pos))) {
|
||||||
if (pit != cur.lastpit())
|
if (pit != cur.lastpit())
|
||||||
return setCursor(cur, pit + 1, 0);
|
return setCursor(cur, pit + 1, 0);
|
||||||
else
|
else
|
||||||
@ -1143,6 +1143,10 @@ bool Text::cursorForwardOneWord(Cursor & cur)
|
|||||||
++pos;
|
++pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't skip a separator inset at the end of a paragraph
|
||||||
|
if (pos == lastpos && pos && par.isEnvSeparator(pos - 1))
|
||||||
|
--pos;
|
||||||
|
|
||||||
return setCursor(cur, pit, pos);
|
return setCursor(cur, pit, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1156,8 +1160,14 @@ bool Text::cursorBackwardOneWord(Cursor & cur)
|
|||||||
Paragraph & par = cur.paragraph();
|
Paragraph & par = cur.paragraph();
|
||||||
|
|
||||||
// Paragraph boundary is a word boundary
|
// Paragraph boundary is a word boundary
|
||||||
if (pos == 0 && pit != 0)
|
if (pos == 0 && pit != 0) {
|
||||||
return setCursor(cur, pit - 1, getPar(pit - 1).size());
|
Paragraph & prevpar = getPar(pit - 1);
|
||||||
|
pos = prevpar.size();
|
||||||
|
// Don't stop after an environment separator
|
||||||
|
if (pos && prevpar.isEnvSeparator(pos - 1))
|
||||||
|
--pos;
|
||||||
|
return setCursor(cur, pit - 1, pos);
|
||||||
|
}
|
||||||
|
|
||||||
if (lyxrc.mac_like_cursor_movement) {
|
if (lyxrc.mac_like_cursor_movement) {
|
||||||
// Skip through punctuation and spaces.
|
// Skip through punctuation and spaces.
|
||||||
|
@ -1661,6 +1661,9 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
|||||||
|
|
||||||
tm->setCursorFromCoordinates(cur, cmd.x(), y);
|
tm->setCursorFromCoordinates(cur, cmd.x(), y);
|
||||||
cur.setTargetX(cmd.x());
|
cur.setTargetX(cmd.x());
|
||||||
|
// Don't allow selecting a separator inset
|
||||||
|
if (cur.pos() && cur.paragraph().isEnvSeparator(cur.pos() - 1))
|
||||||
|
cur.posBackward();
|
||||||
if (cmd.y() >= wh)
|
if (cmd.y() >= wh)
|
||||||
lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
|
lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
|
||||||
else if (cmd.y() < 0)
|
else if (cmd.y() < 0)
|
||||||
|
@ -1594,7 +1594,8 @@ bool TextMetrics::cursorEnd(Cursor & cur)
|
|||||||
boundary = true;
|
boundary = true;
|
||||||
else
|
else
|
||||||
--end;
|
--end;
|
||||||
}
|
} else if (cur.paragraph().isEnvSeparator(end-1))
|
||||||
|
--end;
|
||||||
return text_->setCursor(cur, cur.pit(), end, true, boundary);
|
return text_->setCursor(cur, cur.pit(), end, true, boundary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user