mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Fix bug #5435.
Revert the previous fix and fix the DEPM regression. This reverts r28910. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29248 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
586afc2a4c
commit
cdd802421a
@ -321,6 +321,15 @@ void Cursor::dispatch(FuncRequest const & cmd0)
|
|||||||
// object will be used again.
|
// object will be used again.
|
||||||
if (!disp_.dispatched()) {
|
if (!disp_.dispatched()) {
|
||||||
LYXERR(Debug::DEBUG, "RESTORING OLD CURSOR!");
|
LYXERR(Debug::DEBUG, "RESTORING OLD CURSOR!");
|
||||||
|
// We might have invalidated the cursor when removing an empty
|
||||||
|
// paragraph while the cursor could not be moved out the inset
|
||||||
|
// while we initially thought we could. This might happen when
|
||||||
|
// a multiline inset becomes an inline inset when the second
|
||||||
|
// paragraph is removed.
|
||||||
|
if (safe.pit() > safe.lastpit()) {
|
||||||
|
safe.pit() = safe.lastpit();
|
||||||
|
safe.pos() = safe.lastpos();
|
||||||
|
}
|
||||||
operator=(safe);
|
operator=(safe);
|
||||||
disp_.update(Update::None);
|
disp_.update(Update::None);
|
||||||
disp_.dispatched(false);
|
disp_.dispatched(false);
|
||||||
@ -1776,14 +1785,31 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
|
|||||||
row = pm.pos2row(pos());
|
row = pm.pos2row(pos());
|
||||||
|
|
||||||
if (atFirstOrLastRow(up)) {
|
if (atFirstOrLastRow(up)) {
|
||||||
|
// Is there a place for the cursor to go ? If yes, we
|
||||||
|
// can execute the DEPM, otherwise we should keep the
|
||||||
|
// paragraph to host the cursor.
|
||||||
Cursor dummy = *this;
|
Cursor dummy = *this;
|
||||||
// The cursor hasn't changed yet. This happens when
|
bool valid_destination = false;
|
||||||
// you e.g. move out of an inset. And to give the
|
for(; dummy.depth(); dummy.pop())
|
||||||
// DEPM the possibility of doing something we must
|
if (!dummy.atFirstOrLastRow(up)) {
|
||||||
// provide it with two different cursors. (Lgb, vfr)
|
valid_destination = true;
|
||||||
dummy.pos() = dummy.pos() == 0 ? dummy.lastpos() : 0;
|
break;
|
||||||
dummy.pit() = dummy.pit() == 0 ? dummy.lastpit() : 0;
|
}
|
||||||
updateNeeded |= bv().checkDepm(dummy, *this);
|
|
||||||
|
// will a next dispatch follow and if there is a new
|
||||||
|
// dispatch will it move the cursor out ?
|
||||||
|
if (depth() > 1 && valid_destination) {
|
||||||
|
// The cursor hasn't changed yet. This happens when
|
||||||
|
// you e.g. move out of an inset. And to give the
|
||||||
|
// DEPM the possibility of doing something we must
|
||||||
|
// provide it with two different cursors. (Lgb, vfr)
|
||||||
|
dummy = *this;
|
||||||
|
dummy.pos() = dummy.pos() == 0 ? dummy.lastpos() : 0;
|
||||||
|
dummy.pit() = dummy.pit() == 0 ? dummy.lastpit() : 0;
|
||||||
|
|
||||||
|
updateNeeded |= bv().checkDepm(dummy, *this);
|
||||||
|
updateTextTargetOffset();
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1797,6 +1823,19 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
|
|||||||
else
|
else
|
||||||
tm.editXY(*this, xo, yo + textRow().descent() + 1);
|
tm.editXY(*this, xo, yo + textRow().descent() + 1);
|
||||||
clearSelection();
|
clearSelection();
|
||||||
|
|
||||||
|
// This happens when you move out of an inset.
|
||||||
|
// And to give the DEPM the possibility of doing
|
||||||
|
// something we must provide it with two different
|
||||||
|
// cursors. (Lgb)
|
||||||
|
Cursor dummy = *this;
|
||||||
|
if (dummy == old)
|
||||||
|
++dummy.pos();
|
||||||
|
if (bv().checkDepm(dummy, old)) {
|
||||||
|
updateNeeded = true;
|
||||||
|
// Make sure that cur gets back whatever happened to dummy(Lgb)
|
||||||
|
operator=(dummy);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// if there is a selection, we stay out of any inset, and just jump to the right position:
|
// if there is a selection, we stay out of any inset, and just jump to the right position:
|
||||||
Cursor old = *this;
|
Cursor old = *this;
|
||||||
|
Loading…
Reference in New Issue
Block a user